@sinoia/hubdoc-tools 1.0.3 → 1.2.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 (341) hide show
  1. package/README.md +115 -34
  2. package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts +15 -0
  3. package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/plugins/connection-plugin/index.js +37 -0
  5. package/dist/__tests__/fixtures/plugins/connection-plugin/index.js.map +1 -0
  6. package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts +15 -0
  7. package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/plugins/scan-plugin/index.js +54 -0
  9. package/dist/__tests__/fixtures/plugins/scan-plugin/index.js.map +1 -0
  10. package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts +15 -0
  11. package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/plugins/test-plugin/index.js +34 -0
  13. package/dist/__tests__/fixtures/plugins/test-plugin/index.js.map +1 -0
  14. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts +16 -0
  15. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js +145 -0
  17. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js.map +1 -0
  18. package/dist/api/api/authentication-api.d.ts +208 -0
  19. package/dist/api/api/authentication-api.d.ts.map +1 -0
  20. package/dist/api/api/authentication-api.js +385 -0
  21. package/dist/api/api/authentication-api.js.map +1 -0
  22. package/dist/api/api/bulk-uploads-api.d.ts +101 -0
  23. package/dist/api/api/bulk-uploads-api.d.ts.map +1 -0
  24. package/dist/api/api/bulk-uploads-api.js +195 -0
  25. package/dist/api/api/bulk-uploads-api.js.map +1 -0
  26. package/dist/api/api/contacts-api.d.ts +246 -0
  27. package/dist/api/api/contacts-api.d.ts.map +1 -0
  28. package/dist/api/api/contacts-api.js +465 -0
  29. package/dist/api/api/contacts-api.js.map +1 -0
  30. package/dist/api/api/documents-api.d.ts +267 -0
  31. package/dist/api/api/documents-api.d.ts.map +1 -0
  32. package/dist/api/api/documents-api.js +506 -0
  33. package/dist/api/api/documents-api.js.map +1 -0
  34. package/dist/api/api/folders-api.d.ts +255 -0
  35. package/dist/api/api/folders-api.d.ts.map +1 -0
  36. package/dist/api/api/folders-api.js +479 -0
  37. package/dist/api/api/folders-api.js.map +1 -0
  38. package/dist/api/api/groups-api.d.ts +246 -0
  39. package/dist/api/api/groups-api.d.ts.map +1 -0
  40. package/dist/api/api/groups-api.js +465 -0
  41. package/dist/api/api/groups-api.js.map +1 -0
  42. package/dist/api/api/permissions-api.d.ts +246 -0
  43. package/dist/api/api/permissions-api.d.ts.map +1 -0
  44. package/dist/api/api/permissions-api.js +465 -0
  45. package/dist/api/api/permissions-api.js.map +1 -0
  46. package/dist/api/api/workspaces-api.d.ts +213 -0
  47. package/dist/api/api/workspaces-api.d.ts.map +1 -0
  48. package/dist/api/api/workspaces-api.js +424 -0
  49. package/dist/api/api/workspaces-api.js.map +1 -0
  50. package/dist/api/api.d.ts +20 -0
  51. package/dist/api/api.d.ts.map +1 -0
  52. package/dist/api/api.js +38 -0
  53. package/dist/api/api.js.map +1 -0
  54. package/dist/api/base.d.ts +43 -0
  55. package/dist/api/base.d.ts.map +1 -0
  56. package/dist/api/base.js +49 -0
  57. package/dist/api/base.js.map +1 -0
  58. package/dist/api/common.d.ts +29 -0
  59. package/dist/api/common.d.ts.map +1 -0
  60. package/dist/api/common.js +109 -0
  61. package/dist/api/common.js.map +1 -0
  62. package/dist/api/configuration.d.ts +99 -0
  63. package/dist/api/configuration.d.ts.map +1 -0
  64. package/dist/api/configuration.js +49 -0
  65. package/dist/api/configuration.js.map +1 -0
  66. package/dist/api/index.d.ts +15 -0
  67. package/dist/api/index.d.ts.map +1 -0
  68. package/dist/api/index.js +33 -0
  69. package/dist/api/index.js.map +1 -0
  70. package/dist/api/models/api-v1-documents-documents-post-request1.d.ts +34 -0
  71. package/dist/api/models/api-v1-documents-documents-post-request1.d.ts.map +1 -0
  72. package/dist/api/models/api-v1-documents-documents-post-request1.js +16 -0
  73. package/dist/api/models/api-v1-documents-documents-post-request1.js.map +1 -0
  74. package/dist/api/models/api-v1-documents-documents-post201-response.d.ts +17 -0
  75. package/dist/api/models/api-v1-documents-documents-post201-response.d.ts.map +1 -0
  76. package/dist/api/models/api-v1-documents-documents-post201-response.js +16 -0
  77. package/dist/api/models/api-v1-documents-documents-post201-response.js.map +1 -0
  78. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts +17 -0
  79. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts.map +1 -0
  80. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js +16 -0
  81. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js.map +1 -0
  82. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts +17 -0
  83. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts.map +1 -0
  84. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js +16 -0
  85. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js.map +1 -0
  86. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts +18 -0
  87. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts.map +1 -0
  88. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js +16 -0
  89. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js.map +1 -0
  90. package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts +17 -0
  91. package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts.map +1 -0
  92. package/dist/api/models/api-v1-documents-folders-id-get200-response.js +16 -0
  93. package/dist/api/models/api-v1-documents-folders-id-get200-response.js.map +1 -0
  94. package/dist/api/models/bulk-upload-mutation.d.ts +34 -0
  95. package/dist/api/models/bulk-upload-mutation.d.ts.map +1 -0
  96. package/dist/api/models/bulk-upload-mutation.js +16 -0
  97. package/dist/api/models/bulk-upload-mutation.js.map +1 -0
  98. package/dist/api/models/bulk-upload.d.ts +91 -0
  99. package/dist/api/models/bulk-upload.d.ts.map +1 -0
  100. package/dist/api/models/bulk-upload.js +23 -0
  101. package/dist/api/models/bulk-upload.js.map +1 -0
  102. package/dist/api/models/contact-mutation.d.ts +30 -0
  103. package/dist/api/models/contact-mutation.d.ts.map +1 -0
  104. package/dist/api/models/contact-mutation.js +16 -0
  105. package/dist/api/models/contact-mutation.js.map +1 -0
  106. package/dist/api/models/contact.d.ts +54 -0
  107. package/dist/api/models/contact.d.ts.map +1 -0
  108. package/dist/api/models/contact.js +16 -0
  109. package/dist/api/models/contact.js.map +1 -0
  110. package/dist/api/models/document-document-type.d.ts +19 -0
  111. package/dist/api/models/document-document-type.d.ts.map +1 -0
  112. package/dist/api/models/document-document-type.js +16 -0
  113. package/dist/api/models/document-document-type.js.map +1 -0
  114. package/dist/api/models/document-domain.d.ts +19 -0
  115. package/dist/api/models/document-domain.d.ts.map +1 -0
  116. package/dist/api/models/document-domain.js +16 -0
  117. package/dist/api/models/document-domain.js.map +1 -0
  118. package/dist/api/models/document-folder.d.ts +19 -0
  119. package/dist/api/models/document-folder.d.ts.map +1 -0
  120. package/dist/api/models/document-folder.js +16 -0
  121. package/dist/api/models/document-folder.js.map +1 -0
  122. package/dist/api/models/document-mutation.d.ts +50 -0
  123. package/dist/api/models/document-mutation.d.ts.map +1 -0
  124. package/dist/api/models/document-mutation.js +16 -0
  125. package/dist/api/models/document-mutation.js.map +1 -0
  126. package/dist/api/models/document.d.ts +73 -0
  127. package/dist/api/models/document.d.ts.map +1 -0
  128. package/dist/api/models/document.js +16 -0
  129. package/dist/api/models/document.js.map +1 -0
  130. package/dist/api/models/folder-mutation.d.ts +38 -0
  131. package/dist/api/models/folder-mutation.d.ts.map +1 -0
  132. package/dist/api/models/folder-mutation.js +16 -0
  133. package/dist/api/models/folder-mutation.js.map +1 -0
  134. package/dist/api/models/folder-parent.d.ts +19 -0
  135. package/dist/api/models/folder-parent.d.ts.map +1 -0
  136. package/dist/api/models/folder-parent.js +16 -0
  137. package/dist/api/models/folder-parent.js.map +1 -0
  138. package/dist/api/models/folder.d.ts +65 -0
  139. package/dist/api/models/folder.d.ts.map +1 -0
  140. package/dist/api/models/folder.js +16 -0
  141. package/dist/api/models/folder.js.map +1 -0
  142. package/dist/api/models/group-mutation.d.ts +26 -0
  143. package/dist/api/models/group-mutation.d.ts.map +1 -0
  144. package/dist/api/models/group-mutation.js +16 -0
  145. package/dist/api/models/group-mutation.js.map +1 -0
  146. package/dist/api/models/group.d.ts +38 -0
  147. package/dist/api/models/group.d.ts.map +1 -0
  148. package/dist/api/models/group.js +16 -0
  149. package/dist/api/models/group.js.map +1 -0
  150. package/dist/api/models/index.d.ts +35 -0
  151. package/dist/api/models/index.d.ts.map +1 -0
  152. package/dist/api/models/index.js +51 -0
  153. package/dist/api/models/index.js.map +1 -0
  154. package/dist/api/models/model-error.d.ts +26 -0
  155. package/dist/api/models/model-error.d.ts.map +1 -0
  156. package/dist/api/models/model-error.js +16 -0
  157. package/dist/api/models/model-error.js.map +1 -0
  158. package/dist/api/models/oauth-revoke-post200-response.d.ts +15 -0
  159. package/dist/api/models/oauth-revoke-post200-response.d.ts.map +1 -0
  160. package/dist/api/models/oauth-revoke-post200-response.js +16 -0
  161. package/dist/api/models/oauth-revoke-post200-response.js.map +1 -0
  162. package/dist/api/models/permission-actor.d.ts +20 -0
  163. package/dist/api/models/permission-actor.d.ts.map +1 -0
  164. package/dist/api/models/permission-actor.js +16 -0
  165. package/dist/api/models/permission-actor.js.map +1 -0
  166. package/dist/api/models/permission-mutation.d.ts +44 -0
  167. package/dist/api/models/permission-mutation.d.ts.map +1 -0
  168. package/dist/api/models/permission-mutation.js +22 -0
  169. package/dist/api/models/permission-mutation.js.map +1 -0
  170. package/dist/api/models/permission-permissible.d.ts +20 -0
  171. package/dist/api/models/permission-permissible.d.ts.map +1 -0
  172. package/dist/api/models/permission-permissible.js +16 -0
  173. package/dist/api/models/permission-permissible.js.map +1 -0
  174. package/dist/api/models/permission.d.ts +60 -0
  175. package/dist/api/models/permission.d.ts.map +1 -0
  176. package/dist/api/models/permission.js +22 -0
  177. package/dist/api/models/permission.js.map +1 -0
  178. package/dist/api/models/token-response.d.ts +41 -0
  179. package/dist/api/models/token-response.d.ts.map +1 -0
  180. package/dist/api/models/token-response.js +16 -0
  181. package/dist/api/models/token-response.js.map +1 -0
  182. package/dist/api/models/user.d.ts +18 -0
  183. package/dist/api/models/user.d.ts.map +1 -0
  184. package/dist/api/models/user.js +16 -0
  185. package/dist/api/models/user.js.map +1 -0
  186. package/dist/api/models/workspace-mutation-settings-validation.d.ts +26 -0
  187. package/dist/api/models/workspace-mutation-settings-validation.d.ts.map +1 -0
  188. package/dist/api/models/workspace-mutation-settings-validation.js +16 -0
  189. package/dist/api/models/workspace-mutation-settings-validation.js.map +1 -0
  190. package/dist/api/models/workspace-mutation-settings.d.ts +60 -0
  191. package/dist/api/models/workspace-mutation-settings.d.ts.map +1 -0
  192. package/dist/api/models/workspace-mutation-settings.js +16 -0
  193. package/dist/api/models/workspace-mutation-settings.js.map +1 -0
  194. package/dist/api/models/workspace-mutation.d.ts +44 -0
  195. package/dist/api/models/workspace-mutation.d.ts.map +1 -0
  196. package/dist/api/models/workspace-mutation.js +16 -0
  197. package/dist/api/models/workspace-mutation.js.map +1 -0
  198. package/dist/api/models/workspace-settings-validation.d.ts +26 -0
  199. package/dist/api/models/workspace-settings-validation.d.ts.map +1 -0
  200. package/dist/api/models/workspace-settings-validation.js +16 -0
  201. package/dist/api/models/workspace-settings-validation.js.map +1 -0
  202. package/dist/api/models/workspace-settings.d.ts +60 -0
  203. package/dist/api/models/workspace-settings.d.ts.map +1 -0
  204. package/dist/api/models/workspace-settings.js +16 -0
  205. package/dist/api/models/workspace-settings.js.map +1 -0
  206. package/dist/api/models/workspace.d.ts +62 -0
  207. package/dist/api/models/workspace.d.ts.map +1 -0
  208. package/dist/api/models/workspace.js +16 -0
  209. package/dist/api/models/workspace.js.map +1 -0
  210. package/dist/cli/handlers/command-handlers.d.ts +29 -0
  211. package/dist/cli/handlers/command-handlers.d.ts.map +1 -0
  212. package/dist/cli/handlers/command-handlers.js +261 -0
  213. package/dist/cli/handlers/command-handlers.js.map +1 -0
  214. package/dist/cli/handlers/engine-handlers.d.ts +15 -0
  215. package/dist/cli/handlers/engine-handlers.d.ts.map +1 -0
  216. package/dist/cli/handlers/engine-handlers.js +174 -0
  217. package/dist/cli/handlers/engine-handlers.js.map +1 -0
  218. package/dist/cli/interactive.d.ts +15 -0
  219. package/dist/cli/interactive.d.ts.map +1 -0
  220. package/dist/cli/interactive.js +234 -0
  221. package/dist/cli/interactive.js.map +1 -0
  222. package/dist/cli.js +31 -739
  223. package/dist/cli.js.map +1 -1
  224. package/dist/commands/export.d.ts +1 -1
  225. package/dist/commands/export.d.ts.map +1 -1
  226. package/dist/commands/export.js +1 -1
  227. package/dist/commands/export.js.map +1 -1
  228. package/dist/commands/import.js +1 -1
  229. package/dist/commands/import.js.map +1 -1
  230. package/dist/index.d.ts +27 -3
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +62 -20
  233. package/dist/index.js.map +1 -1
  234. package/dist/services/hubdoc-api.d.ts +5 -0
  235. package/dist/services/hubdoc-api.d.ts.map +1 -1
  236. package/dist/services/hubdoc-api.js +48 -26
  237. package/dist/services/hubdoc-api.js.map +1 -1
  238. package/dist/services/hubdoc-export.d.ts +1 -1
  239. package/dist/services/hubdoc-export.d.ts.map +1 -1
  240. package/dist/services/hubdoc-export.js +1 -1
  241. package/dist/services/hubdoc-export.js.map +1 -1
  242. package/dist/services/oauth-token-service.d.ts +27 -14
  243. package/dist/services/oauth-token-service.d.ts.map +1 -1
  244. package/dist/services/oauth-token-service.js +147 -80
  245. package/dist/services/oauth-token-service.js.map +1 -1
  246. package/dist/services/plugin-import.d.ts +2 -2
  247. package/dist/services/plugin-import.d.ts.map +1 -1
  248. package/dist/services/plugin-import.js +2 -2
  249. package/dist/services/plugin-import.js.map +1 -1
  250. package/dist/services/plugin-manager.d.ts +1 -1
  251. package/dist/services/plugin-manager.d.ts.map +1 -1
  252. package/dist/services/plugin-manager.js +2 -2
  253. package/dist/services/plugin-manager.js.map +1 -1
  254. package/dist/types/index.d.ts +12 -37
  255. package/dist/types/index.d.ts.map +1 -1
  256. package/dist/utils/config.d.ts +30 -1
  257. package/dist/utils/config.d.ts.map +1 -1
  258. package/dist/utils/config.js +187 -40
  259. package/dist/utils/config.js.map +1 -1
  260. package/dist/utils/csv.d.ts +1 -0
  261. package/dist/utils/csv.d.ts.map +1 -1
  262. package/dist/utils/csv.js +21 -0
  263. package/dist/utils/csv.js.map +1 -1
  264. package/package.json +23 -6
  265. package/.env.example +0 -23
  266. package/BAUTECH_HubDoc_Import.pptx +0 -0
  267. package/CHANGELOG.md +0 -127
  268. package/DEMO-DOCUMENTATION.html +0 -356
  269. package/DEMO-DOCUMENTATION.md +0 -411
  270. package/EXPORT-DOCUMENTATION.md +0 -333
  271. package/HUBDOC-API-V2.md +0 -248
  272. package/INSTALL.md +0 -175
  273. package/PACKAGING.md +0 -206
  274. package/PLUGINS.md +0 -328
  275. package/PRESENTATION-CLIENT.md +0 -100
  276. package/README-hubdoc-tool.md +0 -369
  277. package/README-npm.md +0 -238
  278. package/TESTING.md +0 -129
  279. package/config-examples/README.md +0 -36
  280. package/config-examples/alfresco-config.example.json +0 -8
  281. package/config-examples/azure-blob-config.example.json +0 -7
  282. package/config-examples/box-config.example.json +0 -5
  283. package/config-examples/nuxeo-config.example.json +0 -8
  284. package/config-examples/opentext-config.example.json +0 -7
  285. package/config-examples/s3-config.example.json +0 -8
  286. package/config-examples/sharepoint-config.example.json +0 -7
  287. package/demo/README.md +0 -199
  288. package/demo/demo-script.md +0 -284
  289. package/demo/generate-sample-csv.js +0 -351
  290. package/demo/mapping_bautech_15k.csv +0 -1
  291. package/demo/simulate-import.js +0 -273
  292. package/dist/commands/export-v2.d.ts +0 -45
  293. package/dist/commands/export-v2.d.ts.map +0 -1
  294. package/dist/commands/export-v2.js +0 -369
  295. package/dist/commands/export-v2.js.map +0 -1
  296. package/dist/commands/import-v2.d.ts +0 -32
  297. package/dist/commands/import-v2.d.ts.map +0 -1
  298. package/dist/commands/import-v2.js +0 -331
  299. package/dist/commands/import-v2.js.map +0 -1
  300. package/dist/services/hubdoc-api-v2.d.ts +0 -150
  301. package/dist/services/hubdoc-api-v2.d.ts.map +0 -1
  302. package/dist/services/hubdoc-api-v2.js +0 -418
  303. package/dist/services/hubdoc-api-v2.js.map +0 -1
  304. package/dist/services/hubdoc-client.d.ts +0 -246
  305. package/dist/services/hubdoc-client.d.ts.map +0 -1
  306. package/dist/services/hubdoc-client.js +0 -714
  307. package/dist/services/hubdoc-client.js.map +0 -1
  308. package/dist/services/hubdoc-export-service.d.ts +0 -90
  309. package/dist/services/hubdoc-export-service.d.ts.map +0 -1
  310. package/dist/services/hubdoc-export-service.js +0 -443
  311. package/dist/services/hubdoc-export-service.js.map +0 -1
  312. package/dist/services/hubdoc-export-v2.d.ts +0 -77
  313. package/dist/services/hubdoc-export-v2.d.ts.map +0 -1
  314. package/dist/services/hubdoc-export-v2.js +0 -329
  315. package/dist/services/hubdoc-export-v2.js.map +0 -1
  316. package/dist/services/hubdoc-import-service.d.ts +0 -64
  317. package/dist/services/hubdoc-import-service.d.ts.map +0 -1
  318. package/dist/services/hubdoc-import-service.js +0 -374
  319. package/dist/services/hubdoc-import-service.js.map +0 -1
  320. package/docs/README.md +0 -65
  321. package/docs/connectors/alfresco.md +0 -211
  322. package/docs/connectors/aws-s3.md +0 -187
  323. package/docs/connectors/azure-blob.md +0 -195
  324. package/docs/connectors/box.md +0 -115
  325. package/docs/connectors/nuxeo.md +0 -214
  326. package/docs/connectors/opentext.md +0 -234
  327. package/docs/connectors/sharepoint.md +0 -207
  328. package/documentation.html +0 -273
  329. package/jest.config.js +0 -15
  330. package/plugins/core/README.md +0 -122
  331. package/plugins/core/TESTING.md +0 -155
  332. package/plugins/core/plugin.json +0 -26
  333. package/plugins/dropbox/plugin.json +0 -12
  334. package/plugins/filesystem/plugin.json +0 -12
  335. package/plugins/googledrive/plugin.json +0 -12
  336. package/plugins/onedrive/TESTING.md +0 -197
  337. package/plugins/onedrive/plugin.json +0 -12
  338. package/scripts/build-windows-installer.ps1 +0 -132
  339. package/scripts/build-windows-installer.sh +0 -106
  340. package/scripts/prepare-publish.js +0 -62
  341. package/scripts/restore-package.js +0 -29
@@ -1,273 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Simulateur d'import HubDoc pour dƩmonstration
5
- * Simule un import rƩaliste avec progress bar et mƩtriques temps rƩel
6
- */
7
-
8
- const fs = require('fs');
9
- const path = require('path');
10
-
11
- // Configuration de la simulation
12
- const SIMULATION_CONFIG = {
13
- totalDocs: 15000,
14
- avgSpeed: 97, // docs par minute
15
- peakSpeed: 145,
16
- successRate: 0.9898, // 98.98%
17
- duration: 154, // minutes (2h34m)
18
- batchSize: 50
19
- };
20
-
21
- // Couleurs terminal
22
- const colors = {
23
- green: '\\x1b[32m',
24
- red: '\\x1b[31m',
25
- yellow: '\\x1b[33m',
26
- blue: '\\x1b[34m',
27
- cyan: '\\x1b[36m',
28
- bold: '\\x1b[1m',
29
- reset: '\\x1b[0m'
30
- };
31
-
32
- // Types de documents et dossiers
33
- const FOLDERS = [
34
- 'Les Jardins de Meudon/Plans',
35
- 'Les Jardins de Meudon/Administratif',
36
- 'RƩsidence Harmony Levallois/Devis',
37
- 'Ɖco-Quartier Boulogne/PV RĆ©ception',
38
- 'Villa Prestige Neuilly/Plans',
39
- 'Administration/Contrats',
40
- 'Technique/DOE',
41
- 'Archives/2023'
42
- ];
43
-
44
- const SAMPLE_FILES = [
45
- 'plan_facade_nord_meudon_v2.pdf',
46
- 'permis_construire_levallois.pdf',
47
- 'devis_gros_oeuvre_martin_tp.pdf',
48
- 'pv_reception_electricite_lot3.pdf',
49
- 'contrat_marche_ville_paris.pdf',
50
- 'doe_chauffage_thermique_plus.pdf',
51
- 'etude_sol_neuilly_geotechnique.pdf',
52
- 'rapport_acoustique_boulogne.pdf'
53
- ];
54
-
55
- class ImportSimulator {
56
- constructor() {
57
- this.processedDocs = 0;
58
- this.successfulDocs = 0;
59
- this.failedDocs = 0;
60
- this.warnings = 0;
61
- this.startTime = Date.now();
62
- this.foldersCreated = new Set();
63
- this.readPermissions = 0;
64
- this.writePermissions = 0;
65
- }
66
-
67
- // Génère une barre de progression
68
- generateProgressBar(percentage, width = 40) {
69
- const filled = Math.floor(percentage * width / 100);
70
- const empty = width - filled;
71
- return 'ā–ˆ'.repeat(filled) + 'ā–‘'.repeat(empty);
72
- }
73
-
74
- // Calcule les mƩtriques en temps rƩel
75
- calculateMetrics() {
76
- const elapsedMs = Date.now() - this.startTime;
77
- const elapsedMin = elapsedMs / 60000;
78
- const docsPerMin = elapsedMin > 0 ? Math.round(this.processedDocs / elapsedMin) : 0;
79
- const percentage = (this.processedDocs / SIMULATION_CONFIG.totalDocs * 100);
80
-
81
- const estimatedTotalMin = SIMULATION_CONFIG.totalDocs / SIMULATION_CONFIG.avgSpeed;
82
- const remainingMin = Math.max(0, estimatedTotalMin - elapsedMin);
83
-
84
- return {
85
- elapsedMin: Math.floor(elapsedMin),
86
- elapsedSec: Math.floor((elapsedMs % 60000) / 1000),
87
- docsPerMin,
88
- percentage: percentage.toFixed(1),
89
- remainingMin: Math.floor(remainingMin),
90
- remainingSec: Math.floor((remainingMin % 1) * 60)
91
- };
92
- }
93
-
94
- // Affiche l'Ʃtat actuel
95
- displayStatus() {
96
- const metrics = this.calculateMetrics();
97
- const progressBar = this.generateProgressBar(parseFloat(metrics.percentage));
98
-
99
- // Clear screen et retour en haut
100
- process.stdout.write('\\x1b[2J\\x1b[H');
101
-
102
- console.log(`${colors.bold}šŸš€ HubDoc Import - BAUTECH Construction${colors.reset}`);
103
- console.log(`${colors.cyan}šŸ“… Started: 15/03/2024 14:30:00${colors.reset}`);
104
- console.log(`${colors.green}āœ… Connected to HubDoc API${colors.reset}\\n`);
105
-
106
- console.log(`${colors.bold}šŸ“Š Import Progress${colors.reset}`);
107
- console.log(`${progressBar} ${metrics.percentage}%`);
108
- console.log(`${colors.blue}${this.processedDocs.toLocaleString()} / ${SIMULATION_CONFIG.totalDocs.toLocaleString()} documents processed${colors.reset}\\n`);
109
-
110
- // Fichier en cours
111
- const currentFile = this.getCurrentFile();
112
- console.log(`${colors.yellow}šŸ“ Current: ${currentFile}${colors.reset}`);
113
- console.log(`${colors.cyan}ā±ļø Elapsed: ${metrics.elapsedMin}h ${metrics.elapsedSec}m | Remaining: ~${metrics.remainingMin}h ${metrics.remainingSec}m${colors.reset}`);
114
- console.log(`${colors.blue}šŸ“ˆ Speed: ${metrics.docsPerMin} docs/min | Peak: ${SIMULATION_CONFIG.peakSpeed} docs/min${colors.reset}\\n`);
115
-
116
- // Succès récents
117
- console.log(`${colors.green}āœ… Recent Successes:${colors.reset}`);
118
- const recentSuccesses = this.getRecentSuccesses();
119
- recentSuccesses.forEach(file => {
120
- console.log(` ${colors.green}• ${file}${colors.reset}`);
121
- });
122
- console.log();
123
-
124
- // Dossiers crƩƩs
125
- console.log(`${colors.yellow}šŸ“‹ Folders Created:${colors.reset}`);
126
- Array.from(this.foldersCreated).slice(-3).forEach(folder => {
127
- const docCount = Math.floor(Math.random() * 50) + 10;
128
- console.log(` ${colors.yellow}✨ ${folder} (${docCount} docs)${colors.reset}`);
129
- });
130
- console.log();
131
-
132
- // Permissions
133
- console.log(`${colors.blue}šŸ” Permissions Applied:${colors.reset}`);
134
- console.log(` ${colors.blue}šŸ‘„ ${this.readPermissions.toLocaleString()} read permissions set${colors.reset}`);
135
- console.log(` ${colors.blue}āœļø ${this.writePermissions.toLocaleString()} write permissions set${colors.reset}`);
136
- }
137
-
138
- getCurrentFile() {
139
- const folder = FOLDERS[Math.floor(Math.random() * FOLDERS.length)];
140
- const file = SAMPLE_FILES[Math.floor(Math.random() * SAMPLE_FILES.length)];
141
- return `${folder}/${file}`;
142
- }
143
-
144
- getRecentSuccesses() {
145
- return [
146
- `${FOLDERS[0]}/permis_construire_meudon.pdf`,
147
- `${FOLDERS[2]}/devis_second_oeuvre_350k.pdf`,
148
- `${FOLDERS[3]}/pv_reception_plomberie_ok.pdf`
149
- ];
150
- }
151
-
152
- // Simule le traitement d'un batch de documents
153
- processBatch() {
154
- return new Promise(resolve => {
155
- const batchSize = Math.min(SIMULATION_CONFIG.batchSize, SIMULATION_CONFIG.totalDocs - this.processedDocs);
156
-
157
- // Simule le temps de traitement
158
- const baseDelay = (60 / SIMULATION_CONFIG.avgSpeed) * batchSize * 1000; // ms
159
- const randomDelay = baseDelay * (0.7 + Math.random() * 0.6); // Variation ±30%
160
-
161
- setTimeout(() => {
162
- // Traite le batch
163
- for (let i = 0; i < batchSize; i++) {
164
- this.processedDocs++;
165
-
166
- // Simule succès/échec selon le taux configuré
167
- if (Math.random() < SIMULATION_CONFIG.successRate) {
168
- this.successfulDocs++;
169
-
170
- // Ajoute des permissions
171
- this.readPermissions += Math.floor(Math.random() * 3) + 1;
172
- this.writePermissions += Math.floor(Math.random() * 2);
173
-
174
- } else {
175
- this.failedDocs++;
176
- }
177
-
178
- // Ajoute des warnings occasionnels
179
- if (Math.random() < 0.006) {
180
- this.warnings++;
181
- }
182
-
183
- // Ajoute des dossiers crƩƩs
184
- if (Math.random() < 0.02) {
185
- const folder = FOLDERS[Math.floor(Math.random() * FOLDERS.length)];
186
- this.foldersCreated.add(folder);
187
- }
188
- }
189
-
190
- resolve();
191
- }, randomDelay);
192
- });
193
- }
194
-
195
- // Affiche le rƩsumƩ final
196
- displayFinalResults() {
197
- process.stdout.write('\\x1b[2J\\x1b[H');
198
-
199
- const totalTime = Date.now() - this.startTime;
200
- const hours = Math.floor(totalTime / 3600000);
201
- const minutes = Math.floor((totalTime % 3600000) / 60000);
202
- const seconds = Math.floor((totalTime % 60000) / 1000);
203
-
204
- const avgSpeed = Math.round(this.processedDocs / (totalTime / 60000));
205
- const successRate = (this.successfulDocs / this.processedDocs * 100).toFixed(2);
206
-
207
- console.log(`${colors.bold}šŸ“Š BAUTECH Import - RƉSULTATS FINAUX${colors.reset}`);
208
- console.log('═'.repeat(50));
209
- console.log();
210
- console.log(`${colors.green}āœ… Import RĆ©ussi: ${this.successfulDocs.toLocaleString()} / ${this.processedDocs.toLocaleString()} (${successRate}%)${colors.reset}`);
211
- console.log(`${colors.red}āŒ Ɖchecs: ${this.failedDocs} (${(this.failedDocs/this.processedDocs*100).toFixed(2)}%)${colors.reset}`);
212
- console.log(`${colors.yellow}āš ļø Avertissements: ${this.warnings}${colors.reset}`);
213
- console.log();
214
- console.log(`${colors.blue}šŸ’¾ Volume traitĆ©: 47.3 GB${colors.reset}`);
215
- console.log(`${colors.blue}ā±ļø DurĆ©e totale: ${hours}h ${minutes}m ${seconds}s${colors.reset}`);
216
- console.log(`${colors.blue}šŸ“ˆ Vitesse moyenne: ${avgSpeed} docs/min${colors.reset}`);
217
- console.log();
218
- console.log(`${colors.yellow}šŸ“ Workspaces CrƩƩs:${colors.reset}`);
219
- console.log(` ${colors.green}šŸ¢ BAUTECH Production → ${(this.successfulDocs * 0.91).toFixed(0)} documents${colors.reset}`);
220
- console.log(` ${colors.green}šŸ“œ BAUTECH Archives → ${(this.successfulDocs * 0.09).toFixed(0)} documents${colors.reset}`);
221
- console.log();
222
- console.log(`${colors.blue}šŸ” SĆ©curitĆ©:${colors.reset}`);
223
- console.log(` ${colors.blue}šŸ‘„ ${this.readPermissions.toLocaleString()} permissions utilisateurs${colors.reset}`);
224
- console.log(` ${colors.blue}šŸ‘„ ${this.writePermissions.toLocaleString()} permissions groupes${colors.reset}`);
225
- console.log(` ${colors.green}šŸ”’ 100% des documents sĆ©curisĆ©s${colors.reset}`);
226
- console.log();
227
-
228
- // ROI
229
- console.log(`${colors.bold}šŸ’° RETOUR SUR INVESTISSEMENT${colors.reset}`);
230
- console.log();
231
- console.log(`${colors.cyan}Avant HubDoc:${colors.reset}`);
232
- console.log(`• Recherche documents: 2h/jour/personne Ɨ 12 personnes = 24h/jour`);
233
- console.log(`• CoĆ»t horaire moyen: 40€`);
234
- console.log(`• CoĆ»t quotidien: 960€`);
235
- console.log();
236
- console.log(`${colors.green}AprĆØs HubDoc:${colors.reset}`);
237
- console.log(`• Recherche documents: 5min/jour/personne Ɨ 12 personnes = 1h/jour`);
238
- console.log(`• Gain quotidien: 920€`);
239
- console.log(`• Gain mensuel: 20,160€`);
240
- console.log(`${colors.bold}• ROI sur 6 mois: 1,200%${colors.reset}`);
241
- console.log();
242
- console.log(`${colors.yellow}šŸŽÆ CoĆ»t de l'import: 8h Ɨ 80€ = 640€${colors.reset}`);
243
- console.log(`${colors.green}šŸ’” Amortissement: 16 heures d'utilisation${colors.reset}`);
244
- }
245
-
246
- // Lance la simulation
247
- async run() {
248
- console.log(`${colors.bold}šŸš€ DĆ©marrage de la simulation d'import BAUTECH...${colors.reset}\\n`);
249
-
250
- // Boucle principale
251
- while (this.processedDocs < SIMULATION_CONFIG.totalDocs) {
252
- await this.processBatch();
253
- this.displayStatus();
254
-
255
- // Petite pause pour l'effet visuel
256
- await new Promise(resolve => setTimeout(resolve, 100));
257
- }
258
-
259
- // Affichage final
260
- setTimeout(() => {
261
- this.displayFinalResults();
262
- }, 1000);
263
- }
264
- }
265
-
266
- // Lancement de la simulation
267
- if (require.main === module) {
268
- console.log(`${colors.bold}šŸŽ¬ Simulateur d'Import HubDoc${colors.reset}`);
269
- console.log(`${colors.cyan}Simulation: 15,000 documents BAUTECH Construction${colors.reset}\\n`);
270
-
271
- const simulator = new ImportSimulator();
272
- simulator.run().catch(console.error);
273
- }
@@ -1,45 +0,0 @@
1
- import { ExportOptions } from '../types/export';
2
- import { HubDocConfig } from '../types';
3
- export declare class ExportCommandV2 {
4
- private exportService;
5
- private csvManager;
6
- constructor(config: HubDocConfig);
7
- execute(options: ExportOptions): Promise<void>;
8
- /**
9
- * Execute scan mode - generate export mapping
10
- */
11
- private executeScan;
12
- /**
13
- * Execute export mode - download documents
14
- */
15
- private executeExport;
16
- /**
17
- * Execute search-based scan
18
- */
19
- private executeSearchBasedScan;
20
- /**
21
- * Get interactive scan configuration
22
- */
23
- private getInteractiveScanConfig;
24
- /**
25
- * Show export preview
26
- */
27
- private showExportPreview;
28
- /**
29
- * Show scan summary
30
- */
31
- private showScanSummary;
32
- /**
33
- * Show export summary
34
- */
35
- private showExportSummary;
36
- /**
37
- * Show created directory structure
38
- */
39
- private showCreatedStructure;
40
- /**
41
- * Format file size for display
42
- */
43
- private formatFileSize;
44
- }
45
- //# sourceMappingURL=export-v2.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-v2.d.ts","sourceRoot":"","sources":["../../src/commands/export-v2.ts"],"names":[],"mappings":"AAMA,OAAO,EAA+B,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,UAAU,CAAmB;gBAEzB,MAAM,EAAE,YAAY;IAK1B,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpD;;OAEG;YACW,WAAW;IA0DzB;;OAEG;YACW,aAAa;IA8E3B;;OAEG;YACW,sBAAsB;IAmCpC;;OAEG;YACW,wBAAwB;IAsBtC;;OAEG;YACW,iBAAiB;IA2C/B;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;OAEG;IACH,OAAO,CAAC,cAAc;CAYvB"}
@@ -1,369 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ExportCommandV2 = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const ora_1 = __importDefault(require("ora"));
10
- const inquirer_1 = __importDefault(require("inquirer"));
11
- const hubdoc_export_v2_1 = require("../services/hubdoc-export-v2");
12
- const export_csv_1 = require("../utils/export-csv");
13
- class ExportCommandV2 {
14
- constructor(config) {
15
- this.exportService = new hubdoc_export_v2_1.HubDocExportServiceV2(config);
16
- this.csvManager = new export_csv_1.ExportCsvManager();
17
- }
18
- async execute(options) {
19
- const spinner = (0, ora_1.default)('Starting export process...').start();
20
- try {
21
- // Test API connection first
22
- const isConnected = await this.exportService.testConnection();
23
- if (!isConnected) {
24
- spinner.fail('Failed to connect to HubDoc API');
25
- return;
26
- }
27
- spinner.succeed('Connected to HubDoc API');
28
- if (options.mode === 'scan') {
29
- await this.executeScan(options);
30
- }
31
- else if (options.mode === 'export') {
32
- await this.executeExport(options);
33
- }
34
- else {
35
- throw new Error('Invalid export mode. Use "scan" or "export".');
36
- }
37
- }
38
- catch (error) {
39
- spinner.fail(`Export failed: ${error.message}`);
40
- throw error;
41
- }
42
- }
43
- /**
44
- * Execute scan mode - generate export mapping
45
- */
46
- async executeScan(options) {
47
- console.log(chalk_1.default.blue('šŸ” Scanning HubDoc for documents...'));
48
- // Show scan configuration
49
- if (options.projectFilter) {
50
- console.log(chalk_1.default.gray(` šŸ“ Workspace filter: ${options.projectFilter}`));
51
- }
52
- if (options.domainFilter) {
53
- console.log(chalk_1.default.gray(` šŸ·ļø Folder filter: ${options.domainFilter}`));
54
- }
55
- // Interactive scan configuration
56
- if (options.interactive) {
57
- const scanConfig = await this.getInteractiveScanConfig();
58
- options.projectFilter = scanConfig.workspaceFilter || options.projectFilter;
59
- options.domainFilter = scanConfig.folderFilter || options.domainFilter;
60
- }
61
- // Show export statistics first
62
- const stats = await this.exportService.getExportStats();
63
- console.log(chalk_1.default.blue('\nšŸ“Š HubDoc Content Overview:'));
64
- console.log(chalk_1.default.cyan(` šŸ“ Workspaces: ${stats.totalWorkspaces}`));
65
- console.log(chalk_1.default.cyan(` šŸ“‚ Folders: ${stats.totalFolders}`));
66
- console.log(chalk_1.default.cyan(` šŸ“„ Documents: ${stats.totalFiles}`));
67
- console.log(chalk_1.default.cyan(` šŸ’¾ Total size: ${this.formatFileSize(stats.totalSize)}`));
68
- // Generate export mapping
69
- const mappings = await this.exportService.generateExportMapping(options.projectFilter, options.domainFilter);
70
- if (mappings.length === 0) {
71
- console.log(chalk_1.default.yellow('āš ļø No documents found matching the criteria'));
72
- if (options.interactive) {
73
- const { trySearch } = await inquirer_1.default.prompt([{
74
- type: 'confirm',
75
- name: 'trySearch',
76
- message: 'Would you like to try a search-based export instead?',
77
- default: false
78
- }]);
79
- if (trySearch) {
80
- await this.executeSearchBasedScan(options);
81
- }
82
- }
83
- return;
84
- }
85
- // Save to CSV
86
- const outputPath = options.mappingFile || 'export-mapping.csv';
87
- await this.csvManager.generateExportMapping(mappings, outputPath);
88
- // Show detailed scan summary
89
- this.showScanSummary(mappings, outputPath);
90
- }
91
- /**
92
- * Execute export mode - download documents
93
- */
94
- async executeExport(options) {
95
- if (!options.mappingFile) {
96
- throw new Error('Mapping file is required for export mode. Use --mapping option or run scan first.');
97
- }
98
- console.log(chalk_1.default.blue(`šŸ“„ Loading export mapping from: ${options.mappingFile}`));
99
- // Read mappings from CSV
100
- const mappings = await this.csvManager.readExportMapping(options.mappingFile);
101
- if (mappings.length === 0) {
102
- console.log(chalk_1.default.yellow('āš ļø No documents to export'));
103
- return;
104
- }
105
- console.log(chalk_1.default.blue(`šŸ“¦ Found ${mappings.length} documents to export`));
106
- // Validate export paths
107
- const { valid, invalid } = await this.csvManager.validateExportPaths(mappings);
108
- if (invalid.length > 0) {
109
- console.log(chalk_1.default.yellow(`āš ļø Found ${invalid.length} documents with invalid paths:`));
110
- invalid.slice(0, 5).forEach(mapping => {
111
- console.log(chalk_1.default.red(` āŒ ${mapping.documentName}: ${mapping.targetPath || 'No target path'}`));
112
- });
113
- if (invalid.length > 5) {
114
- console.log(chalk_1.default.gray(` ... and ${invalid.length - 5} more`));
115
- }
116
- if (options.interactive) {
117
- const { proceed } = await inquirer_1.default.prompt([{
118
- type: 'confirm',
119
- name: 'proceed',
120
- message: 'Continue with valid documents only?',
121
- default: true
122
- }]);
123
- if (!proceed) {
124
- console.log(chalk_1.default.gray('Export cancelled'));
125
- return;
126
- }
127
- }
128
- }
129
- if (valid.length === 0) {
130
- console.log(chalk_1.default.red('āŒ No valid documents to export'));
131
- return;
132
- }
133
- // Show export preview
134
- await this.showExportPreview(valid, options);
135
- // Confirm export if interactive
136
- if (options.interactive) {
137
- const { confirm } = await inquirer_1.default.prompt([{
138
- type: 'confirm',
139
- name: 'confirm',
140
- message: `Proceed with exporting ${valid.length} documents?`,
141
- default: true
142
- }]);
143
- if (!confirm) {
144
- console.log(chalk_1.default.gray('Export cancelled'));
145
- return;
146
- }
147
- }
148
- // Execute export
149
- const outputDir = options.outputDir || './export';
150
- console.log(chalk_1.default.blue(`\nšŸš€ Starting export to: ${path_1.default.resolve(outputDir)}`));
151
- const results = await this.exportService.exportDocuments(valid, outputDir);
152
- // Show final summary
153
- this.showExportSummary(results, outputDir);
154
- }
155
- /**
156
- * Execute search-based scan
157
- */
158
- async executeSearchBasedScan(options) {
159
- const { query, fileType, limit } = await inquirer_1.default.prompt([
160
- {
161
- type: 'input',
162
- name: 'query',
163
- message: 'Enter search query:',
164
- validate: (input) => input.trim().length > 0 || 'Query cannot be empty'
165
- },
166
- {
167
- type: 'input',
168
- name: 'fileType',
169
- message: 'File type filter (optional):',
170
- default: ''
171
- },
172
- {
173
- type: 'number',
174
- name: 'limit',
175
- message: 'Maximum results:',
176
- default: 1000
177
- }
178
- ]);
179
- const mappings = await this.exportService.searchDocuments(query, {
180
- workspace: options.projectFilter,
181
- fileType: fileType || undefined,
182
- limit: limit || 1000
183
- });
184
- if (mappings.length > 0) {
185
- const outputPath = options.mappingFile || 'search-export-mapping.csv';
186
- await this.csvManager.generateExportMapping(mappings, outputPath);
187
- this.showScanSummary(mappings, outputPath);
188
- }
189
- }
190
- /**
191
- * Get interactive scan configuration
192
- */
193
- async getInteractiveScanConfig() {
194
- console.log(chalk_1.default.blue('\nšŸ”§ Export Scan Configuration'));
195
- return await inquirer_1.default.prompt([
196
- {
197
- type: 'input',
198
- name: 'workspaceFilter',
199
- message: 'Workspace name filter (partial match, optional):',
200
- default: ''
201
- },
202
- {
203
- type: 'input',
204
- name: 'folderFilter',
205
- message: 'Folder name filter (partial match, optional):',
206
- default: ''
207
- }
208
- ]);
209
- }
210
- /**
211
- * Show export preview
212
- */
213
- async showExportPreview(mappings, options) {
214
- console.log(chalk_1.default.bold('\nšŸ“‹ Export Preview'));
215
- console.log(chalk_1.default.blue(`šŸ“„ Documents to export: ${mappings.length}`));
216
- console.log(chalk_1.default.blue(`šŸ“ Output directory: ${path_1.default.resolve(options.outputDir || './export')}`));
217
- // Group by target folder
218
- const folderGroups = mappings.reduce((groups, mapping) => {
219
- const folder = path_1.default.dirname(mapping.targetPath || 'Root');
220
- if (!groups[folder])
221
- groups[folder] = [];
222
- groups[folder].push(mapping);
223
- return groups;
224
- }, {});
225
- console.log(chalk_1.default.blue('\nšŸ“‚ Directory structure to be created:'));
226
- Object.entries(folderGroups)
227
- .sort(([a], [b]) => a.localeCompare(b))
228
- .slice(0, 10)
229
- .forEach(([folder, items]) => {
230
- console.log(chalk_1.default.cyan(` šŸ“‚ ${folder === '.' ? 'Root' : folder} (${items.length} files)`));
231
- });
232
- if (Object.keys(folderGroups).length > 10) {
233
- console.log(chalk_1.default.gray(` ... and ${Object.keys(folderGroups).length - 10} more folders`));
234
- }
235
- // Show workspace distribution
236
- const workspaceGroups = mappings.reduce((groups, mapping) => {
237
- const workspace = mapping.projects[0]?.projectName || 'Unknown';
238
- if (!groups[workspace])
239
- groups[workspace] = 0;
240
- groups[workspace]++;
241
- return groups;
242
- }, {});
243
- if (Object.keys(workspaceGroups).length > 1) {
244
- console.log(chalk_1.default.blue('\nšŸ“ Documents by workspace:'));
245
- Object.entries(workspaceGroups)
246
- .sort(([, a], [, b]) => b - a)
247
- .forEach(([workspace, count]) => {
248
- console.log(chalk_1.default.cyan(` • ${workspace}: ${count} documents`));
249
- });
250
- }
251
- }
252
- /**
253
- * Show scan summary
254
- */
255
- showScanSummary(mappings, outputPath) {
256
- const projectCounts = {};
257
- mappings.forEach(mapping => {
258
- mapping.projects.forEach(project => {
259
- projectCounts[project.projectName] = (projectCounts[project.projectName] || 0) + 1;
260
- });
261
- });
262
- console.log('\n' + chalk_1.default.bold('šŸ“Š Scan Summary'));
263
- console.log(chalk_1.default.blue(`šŸ“„ Total documents found: ${mappings.length}`));
264
- if (Object.keys(projectCounts).length > 0) {
265
- console.log('\n' + chalk_1.default.bold('šŸ“ Documents by workspace:'));
266
- Object.entries(projectCounts)
267
- .sort(([, a], [, b]) => b - a)
268
- .forEach(([project, count]) => {
269
- console.log(chalk_1.default.cyan(` • ${project}: ${count} documents`));
270
- });
271
- }
272
- // Show file type distribution
273
- const fileTypes = mappings.reduce((types, mapping) => {
274
- const ext = path_1.default.extname(mapping.documentName).toLowerCase() || 'no extension';
275
- if (!types[ext])
276
- types[ext] = 0;
277
- types[ext]++;
278
- return types;
279
- }, {});
280
- console.log('\n' + chalk_1.default.bold('šŸ“‹ File types:'));
281
- Object.entries(fileTypes)
282
- .sort(([, a], [, b]) => b - a)
283
- .slice(0, 10)
284
- .forEach(([ext, count]) => {
285
- console.log(chalk_1.default.cyan(` • ${ext}: ${count} files`));
286
- });
287
- console.log('\n' + chalk_1.default.green('āœ… Export mapping generated successfully'));
288
- console.log(chalk_1.default.blue(`šŸ“„ File: ${outputPath}`));
289
- console.log(chalk_1.default.gray(' šŸ“ Edit the CSV file to customize target paths'));
290
- console.log(chalk_1.default.gray(' šŸš€ Run export mode to download documents'));
291
- console.log(chalk_1.default.gray(` Example: hubdoc-tool export --mapping ${outputPath}`));
292
- }
293
- /**
294
- * Show export summary
295
- */
296
- showExportSummary(results, outputDir) {
297
- const successful = results.filter(r => r.success);
298
- const failed = results.filter(r => !r.success);
299
- console.log('\n' + chalk_1.default.bold('šŸ“Š Export Summary'));
300
- console.log(chalk_1.default.green(`āœ… Successfully exported: ${successful.length} documents`));
301
- console.log(chalk_1.default.blue(`šŸ“ Export directory: ${path_1.default.resolve(outputDir)}`));
302
- if (failed.length > 0) {
303
- console.log(chalk_1.default.red(`āŒ Failed exports: ${failed.length}`));
304
- // Show error breakdown
305
- const errorTypes = failed.reduce((types, result) => {
306
- const error = result.error || 'Unknown error';
307
- const errorType = error.includes('not found') ? 'Not found' :
308
- error.includes('permission') ? 'Permission denied' :
309
- error.includes('network') ? 'Network error' :
310
- 'Other error';
311
- if (!types[errorType])
312
- types[errorType] = 0;
313
- types[errorType]++;
314
- return types;
315
- }, {});
316
- console.log(chalk_1.default.red('\nāŒ Error breakdown:'));
317
- Object.entries(errorTypes).forEach(([errorType, count]) => {
318
- console.log(chalk_1.default.red(` • ${errorType}: ${count} files`));
319
- });
320
- }
321
- // Show directory structure created
322
- this.showCreatedStructure(successful, outputDir);
323
- // Show success rate and performance
324
- const successRate = ((successful.length / results.length) * 100).toFixed(1);
325
- const rateColor = parseFloat(successRate) >= 95 ? 'green' : parseFloat(successRate) >= 80 ? 'yellow' : 'red';
326
- console.log(chalk_1.default[rateColor](`\nšŸ“Š Success rate: ${successRate}%`));
327
- }
328
- /**
329
- * Show created directory structure
330
- */
331
- showCreatedStructure(results, baseDir) {
332
- const directories = new Set();
333
- results.forEach(result => {
334
- if (result.success && result.exportedPath) {
335
- const dir = path_1.default.dirname(path_1.default.relative(baseDir, result.exportedPath));
336
- if (dir && dir !== '.') {
337
- directories.add(dir);
338
- }
339
- }
340
- });
341
- if (directories.size > 0) {
342
- console.log('\n' + chalk_1.default.bold('šŸ“ Directory structure created:'));
343
- Array.from(directories)
344
- .sort()
345
- .slice(0, 15) // Show first 15 directories
346
- .forEach(dir => {
347
- console.log(chalk_1.default.cyan(` šŸ“‚ ${dir}`));
348
- });
349
- if (directories.size > 15) {
350
- console.log(chalk_1.default.gray(` ... and ${directories.size - 15} more directories`));
351
- }
352
- }
353
- }
354
- /**
355
- * Format file size for display
356
- */
357
- formatFileSize(bytes) {
358
- const units = ['B', 'KB', 'MB', 'GB', 'TB'];
359
- let size = bytes;
360
- let unitIndex = 0;
361
- while (size >= 1024 && unitIndex < units.length - 1) {
362
- size /= 1024;
363
- unitIndex++;
364
- }
365
- return `${size.toFixed(1)} ${units[unitIndex]}`;
366
- }
367
- }
368
- exports.ExportCommandV2 = ExportCommandV2;
369
- //# sourceMappingURL=export-v2.js.map