@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.
- package/README.md +115 -34
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.js +37 -0
- package/dist/__tests__/fixtures/plugins/connection-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.js +54 -0
- package/dist/__tests__/fixtures/plugins/scan-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts +15 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.js +34 -0
- package/dist/__tests__/fixtures/plugins/test-plugin/index.js.map +1 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts +16 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js +145 -0
- package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js.map +1 -0
- package/dist/api/api/authentication-api.d.ts +208 -0
- package/dist/api/api/authentication-api.d.ts.map +1 -0
- package/dist/api/api/authentication-api.js +385 -0
- package/dist/api/api/authentication-api.js.map +1 -0
- package/dist/api/api/bulk-uploads-api.d.ts +101 -0
- package/dist/api/api/bulk-uploads-api.d.ts.map +1 -0
- package/dist/api/api/bulk-uploads-api.js +195 -0
- package/dist/api/api/bulk-uploads-api.js.map +1 -0
- package/dist/api/api/contacts-api.d.ts +246 -0
- package/dist/api/api/contacts-api.d.ts.map +1 -0
- package/dist/api/api/contacts-api.js +465 -0
- package/dist/api/api/contacts-api.js.map +1 -0
- package/dist/api/api/documents-api.d.ts +267 -0
- package/dist/api/api/documents-api.d.ts.map +1 -0
- package/dist/api/api/documents-api.js +506 -0
- package/dist/api/api/documents-api.js.map +1 -0
- package/dist/api/api/folders-api.d.ts +255 -0
- package/dist/api/api/folders-api.d.ts.map +1 -0
- package/dist/api/api/folders-api.js +479 -0
- package/dist/api/api/folders-api.js.map +1 -0
- package/dist/api/api/groups-api.d.ts +246 -0
- package/dist/api/api/groups-api.d.ts.map +1 -0
- package/dist/api/api/groups-api.js +465 -0
- package/dist/api/api/groups-api.js.map +1 -0
- package/dist/api/api/permissions-api.d.ts +246 -0
- package/dist/api/api/permissions-api.d.ts.map +1 -0
- package/dist/api/api/permissions-api.js +465 -0
- package/dist/api/api/permissions-api.js.map +1 -0
- package/dist/api/api/workspaces-api.d.ts +213 -0
- package/dist/api/api/workspaces-api.d.ts.map +1 -0
- package/dist/api/api/workspaces-api.js +424 -0
- package/dist/api/api/workspaces-api.js.map +1 -0
- package/dist/api/api.d.ts +20 -0
- package/dist/api/api.d.ts.map +1 -0
- package/dist/api/api.js +38 -0
- package/dist/api/api.js.map +1 -0
- package/dist/api/base.d.ts +43 -0
- package/dist/api/base.d.ts.map +1 -0
- package/dist/api/base.js +49 -0
- package/dist/api/base.js.map +1 -0
- package/dist/api/common.d.ts +29 -0
- package/dist/api/common.d.ts.map +1 -0
- package/dist/api/common.js +109 -0
- package/dist/api/common.js.map +1 -0
- package/dist/api/configuration.d.ts +99 -0
- package/dist/api/configuration.d.ts.map +1 -0
- package/dist/api/configuration.js +49 -0
- package/dist/api/configuration.js.map +1 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +33 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.d.ts +34 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.js +16 -0
- package/dist/api/models/api-v1-documents-documents-post-request1.js.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.d.ts +17 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.js +16 -0
- package/dist/api/models/api-v1-documents-documents-post201-response.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts +18 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts +17 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts.map +1 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.js +16 -0
- package/dist/api/models/api-v1-documents-folders-id-get200-response.js.map +1 -0
- package/dist/api/models/bulk-upload-mutation.d.ts +34 -0
- package/dist/api/models/bulk-upload-mutation.d.ts.map +1 -0
- package/dist/api/models/bulk-upload-mutation.js +16 -0
- package/dist/api/models/bulk-upload-mutation.js.map +1 -0
- package/dist/api/models/bulk-upload.d.ts +91 -0
- package/dist/api/models/bulk-upload.d.ts.map +1 -0
- package/dist/api/models/bulk-upload.js +23 -0
- package/dist/api/models/bulk-upload.js.map +1 -0
- package/dist/api/models/contact-mutation.d.ts +30 -0
- package/dist/api/models/contact-mutation.d.ts.map +1 -0
- package/dist/api/models/contact-mutation.js +16 -0
- package/dist/api/models/contact-mutation.js.map +1 -0
- package/dist/api/models/contact.d.ts +54 -0
- package/dist/api/models/contact.d.ts.map +1 -0
- package/dist/api/models/contact.js +16 -0
- package/dist/api/models/contact.js.map +1 -0
- package/dist/api/models/document-document-type.d.ts +19 -0
- package/dist/api/models/document-document-type.d.ts.map +1 -0
- package/dist/api/models/document-document-type.js +16 -0
- package/dist/api/models/document-document-type.js.map +1 -0
- package/dist/api/models/document-domain.d.ts +19 -0
- package/dist/api/models/document-domain.d.ts.map +1 -0
- package/dist/api/models/document-domain.js +16 -0
- package/dist/api/models/document-domain.js.map +1 -0
- package/dist/api/models/document-folder.d.ts +19 -0
- package/dist/api/models/document-folder.d.ts.map +1 -0
- package/dist/api/models/document-folder.js +16 -0
- package/dist/api/models/document-folder.js.map +1 -0
- package/dist/api/models/document-mutation.d.ts +50 -0
- package/dist/api/models/document-mutation.d.ts.map +1 -0
- package/dist/api/models/document-mutation.js +16 -0
- package/dist/api/models/document-mutation.js.map +1 -0
- package/dist/api/models/document.d.ts +73 -0
- package/dist/api/models/document.d.ts.map +1 -0
- package/dist/api/models/document.js +16 -0
- package/dist/api/models/document.js.map +1 -0
- package/dist/api/models/folder-mutation.d.ts +38 -0
- package/dist/api/models/folder-mutation.d.ts.map +1 -0
- package/dist/api/models/folder-mutation.js +16 -0
- package/dist/api/models/folder-mutation.js.map +1 -0
- package/dist/api/models/folder-parent.d.ts +19 -0
- package/dist/api/models/folder-parent.d.ts.map +1 -0
- package/dist/api/models/folder-parent.js +16 -0
- package/dist/api/models/folder-parent.js.map +1 -0
- package/dist/api/models/folder.d.ts +65 -0
- package/dist/api/models/folder.d.ts.map +1 -0
- package/dist/api/models/folder.js +16 -0
- package/dist/api/models/folder.js.map +1 -0
- package/dist/api/models/group-mutation.d.ts +26 -0
- package/dist/api/models/group-mutation.d.ts.map +1 -0
- package/dist/api/models/group-mutation.js +16 -0
- package/dist/api/models/group-mutation.js.map +1 -0
- package/dist/api/models/group.d.ts +38 -0
- package/dist/api/models/group.d.ts.map +1 -0
- package/dist/api/models/group.js +16 -0
- package/dist/api/models/group.js.map +1 -0
- package/dist/api/models/index.d.ts +35 -0
- package/dist/api/models/index.d.ts.map +1 -0
- package/dist/api/models/index.js +51 -0
- package/dist/api/models/index.js.map +1 -0
- package/dist/api/models/model-error.d.ts +26 -0
- package/dist/api/models/model-error.d.ts.map +1 -0
- package/dist/api/models/model-error.js +16 -0
- package/dist/api/models/model-error.js.map +1 -0
- package/dist/api/models/oauth-revoke-post200-response.d.ts +15 -0
- package/dist/api/models/oauth-revoke-post200-response.d.ts.map +1 -0
- package/dist/api/models/oauth-revoke-post200-response.js +16 -0
- package/dist/api/models/oauth-revoke-post200-response.js.map +1 -0
- package/dist/api/models/permission-actor.d.ts +20 -0
- package/dist/api/models/permission-actor.d.ts.map +1 -0
- package/dist/api/models/permission-actor.js +16 -0
- package/dist/api/models/permission-actor.js.map +1 -0
- package/dist/api/models/permission-mutation.d.ts +44 -0
- package/dist/api/models/permission-mutation.d.ts.map +1 -0
- package/dist/api/models/permission-mutation.js +22 -0
- package/dist/api/models/permission-mutation.js.map +1 -0
- package/dist/api/models/permission-permissible.d.ts +20 -0
- package/dist/api/models/permission-permissible.d.ts.map +1 -0
- package/dist/api/models/permission-permissible.js +16 -0
- package/dist/api/models/permission-permissible.js.map +1 -0
- package/dist/api/models/permission.d.ts +60 -0
- package/dist/api/models/permission.d.ts.map +1 -0
- package/dist/api/models/permission.js +22 -0
- package/dist/api/models/permission.js.map +1 -0
- package/dist/api/models/token-response.d.ts +41 -0
- package/dist/api/models/token-response.d.ts.map +1 -0
- package/dist/api/models/token-response.js +16 -0
- package/dist/api/models/token-response.js.map +1 -0
- package/dist/api/models/user.d.ts +18 -0
- package/dist/api/models/user.d.ts.map +1 -0
- package/dist/api/models/user.js +16 -0
- package/dist/api/models/user.js.map +1 -0
- package/dist/api/models/workspace-mutation-settings-validation.d.ts +26 -0
- package/dist/api/models/workspace-mutation-settings-validation.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation-settings-validation.js +16 -0
- package/dist/api/models/workspace-mutation-settings-validation.js.map +1 -0
- package/dist/api/models/workspace-mutation-settings.d.ts +60 -0
- package/dist/api/models/workspace-mutation-settings.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation-settings.js +16 -0
- package/dist/api/models/workspace-mutation-settings.js.map +1 -0
- package/dist/api/models/workspace-mutation.d.ts +44 -0
- package/dist/api/models/workspace-mutation.d.ts.map +1 -0
- package/dist/api/models/workspace-mutation.js +16 -0
- package/dist/api/models/workspace-mutation.js.map +1 -0
- package/dist/api/models/workspace-settings-validation.d.ts +26 -0
- package/dist/api/models/workspace-settings-validation.d.ts.map +1 -0
- package/dist/api/models/workspace-settings-validation.js +16 -0
- package/dist/api/models/workspace-settings-validation.js.map +1 -0
- package/dist/api/models/workspace-settings.d.ts +60 -0
- package/dist/api/models/workspace-settings.d.ts.map +1 -0
- package/dist/api/models/workspace-settings.js +16 -0
- package/dist/api/models/workspace-settings.js.map +1 -0
- package/dist/api/models/workspace.d.ts +62 -0
- package/dist/api/models/workspace.d.ts.map +1 -0
- package/dist/api/models/workspace.js +16 -0
- package/dist/api/models/workspace.js.map +1 -0
- package/dist/cli/handlers/command-handlers.d.ts +29 -0
- package/dist/cli/handlers/command-handlers.d.ts.map +1 -0
- package/dist/cli/handlers/command-handlers.js +261 -0
- package/dist/cli/handlers/command-handlers.js.map +1 -0
- package/dist/cli/handlers/engine-handlers.d.ts +15 -0
- package/dist/cli/handlers/engine-handlers.d.ts.map +1 -0
- package/dist/cli/handlers/engine-handlers.js +174 -0
- package/dist/cli/handlers/engine-handlers.js.map +1 -0
- package/dist/cli/interactive.d.ts +15 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +234 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli.js +31 -739
- package/dist/cli.js.map +1 -1
- package/dist/commands/export.d.ts +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.js +1 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/index.d.ts +27 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -20
- package/dist/index.js.map +1 -1
- package/dist/services/hubdoc-api.d.ts +5 -0
- package/dist/services/hubdoc-api.d.ts.map +1 -1
- package/dist/services/hubdoc-api.js +48 -26
- package/dist/services/hubdoc-api.js.map +1 -1
- package/dist/services/hubdoc-export.d.ts +1 -1
- package/dist/services/hubdoc-export.d.ts.map +1 -1
- package/dist/services/hubdoc-export.js +1 -1
- package/dist/services/hubdoc-export.js.map +1 -1
- package/dist/services/oauth-token-service.d.ts +27 -14
- package/dist/services/oauth-token-service.d.ts.map +1 -1
- package/dist/services/oauth-token-service.js +147 -80
- package/dist/services/oauth-token-service.js.map +1 -1
- package/dist/services/plugin-import.d.ts +2 -2
- package/dist/services/plugin-import.d.ts.map +1 -1
- package/dist/services/plugin-import.js +2 -2
- package/dist/services/plugin-import.js.map +1 -1
- package/dist/services/plugin-manager.d.ts +1 -1
- package/dist/services/plugin-manager.d.ts.map +1 -1
- package/dist/services/plugin-manager.js +2 -2
- package/dist/services/plugin-manager.js.map +1 -1
- package/dist/types/index.d.ts +12 -37
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +30 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +187 -40
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/csv.d.ts +1 -0
- package/dist/utils/csv.d.ts.map +1 -1
- package/dist/utils/csv.js +21 -0
- package/dist/utils/csv.js.map +1 -1
- package/package.json +23 -6
- package/.env.example +0 -23
- package/BAUTECH_HubDoc_Import.pptx +0 -0
- package/CHANGELOG.md +0 -127
- package/DEMO-DOCUMENTATION.html +0 -356
- package/DEMO-DOCUMENTATION.md +0 -411
- package/EXPORT-DOCUMENTATION.md +0 -333
- package/HUBDOC-API-V2.md +0 -248
- package/INSTALL.md +0 -175
- package/PACKAGING.md +0 -206
- package/PLUGINS.md +0 -328
- package/PRESENTATION-CLIENT.md +0 -100
- package/README-hubdoc-tool.md +0 -369
- package/README-npm.md +0 -238
- package/TESTING.md +0 -129
- package/config-examples/README.md +0 -36
- package/config-examples/alfresco-config.example.json +0 -8
- package/config-examples/azure-blob-config.example.json +0 -7
- package/config-examples/box-config.example.json +0 -5
- package/config-examples/nuxeo-config.example.json +0 -8
- package/config-examples/opentext-config.example.json +0 -7
- package/config-examples/s3-config.example.json +0 -8
- package/config-examples/sharepoint-config.example.json +0 -7
- package/demo/README.md +0 -199
- package/demo/demo-script.md +0 -284
- package/demo/generate-sample-csv.js +0 -351
- package/demo/mapping_bautech_15k.csv +0 -1
- package/demo/simulate-import.js +0 -273
- package/dist/commands/export-v2.d.ts +0 -45
- package/dist/commands/export-v2.d.ts.map +0 -1
- package/dist/commands/export-v2.js +0 -369
- package/dist/commands/export-v2.js.map +0 -1
- package/dist/commands/import-v2.d.ts +0 -32
- package/dist/commands/import-v2.d.ts.map +0 -1
- package/dist/commands/import-v2.js +0 -331
- package/dist/commands/import-v2.js.map +0 -1
- package/dist/services/hubdoc-api-v2.d.ts +0 -150
- package/dist/services/hubdoc-api-v2.d.ts.map +0 -1
- package/dist/services/hubdoc-api-v2.js +0 -418
- package/dist/services/hubdoc-api-v2.js.map +0 -1
- package/dist/services/hubdoc-client.d.ts +0 -246
- package/dist/services/hubdoc-client.d.ts.map +0 -1
- package/dist/services/hubdoc-client.js +0 -714
- package/dist/services/hubdoc-client.js.map +0 -1
- package/dist/services/hubdoc-export-service.d.ts +0 -90
- package/dist/services/hubdoc-export-service.d.ts.map +0 -1
- package/dist/services/hubdoc-export-service.js +0 -443
- package/dist/services/hubdoc-export-service.js.map +0 -1
- package/dist/services/hubdoc-export-v2.d.ts +0 -77
- package/dist/services/hubdoc-export-v2.d.ts.map +0 -1
- package/dist/services/hubdoc-export-v2.js +0 -329
- package/dist/services/hubdoc-export-v2.js.map +0 -1
- package/dist/services/hubdoc-import-service.d.ts +0 -64
- package/dist/services/hubdoc-import-service.d.ts.map +0 -1
- package/dist/services/hubdoc-import-service.js +0 -374
- package/dist/services/hubdoc-import-service.js.map +0 -1
- package/docs/README.md +0 -65
- package/docs/connectors/alfresco.md +0 -211
- package/docs/connectors/aws-s3.md +0 -187
- package/docs/connectors/azure-blob.md +0 -195
- package/docs/connectors/box.md +0 -115
- package/docs/connectors/nuxeo.md +0 -214
- package/docs/connectors/opentext.md +0 -234
- package/docs/connectors/sharepoint.md +0 -207
- package/documentation.html +0 -273
- package/jest.config.js +0 -15
- package/plugins/core/README.md +0 -122
- package/plugins/core/TESTING.md +0 -155
- package/plugins/core/plugin.json +0 -26
- package/plugins/dropbox/plugin.json +0 -12
- package/plugins/filesystem/plugin.json +0 -12
- package/plugins/googledrive/plugin.json +0 -12
- package/plugins/onedrive/TESTING.md +0 -197
- package/plugins/onedrive/plugin.json +0 -12
- package/scripts/build-windows-installer.ps1 +0 -132
- package/scripts/build-windows-installer.sh +0 -106
- package/scripts/prepare-publish.js +0 -62
- package/scripts/restore-package.js +0 -29
package/demo/simulate-import.js
DELETED
|
@@ -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
|