sfdx-hardis 6.4.2 → 6.4.4
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/CHANGELOG.md +13 -1
- package/defaults/templates/files/LargeFilesOnly.json +11 -0
- package/lib/commands/hardis/git/pull-requests/extract.js +1 -1
- package/lib/commands/hardis/git/pull-requests/extract.js.map +1 -1
- package/lib/commands/hardis/lint/access.js +1 -1
- package/lib/commands/hardis/lint/access.js.map +1 -1
- package/lib/commands/hardis/lint/metadatastatus.js +1 -1
- package/lib/commands/hardis/lint/metadatastatus.js.map +1 -1
- package/lib/commands/hardis/lint/missingattributes.js +1 -1
- package/lib/commands/hardis/lint/missingattributes.js.map +1 -1
- package/lib/commands/hardis/lint/unusedmetadatas.js +1 -1
- package/lib/commands/hardis/lint/unusedmetadatas.js.map +1 -1
- package/lib/commands/hardis/misc/servicenow-report.js +1 -1
- package/lib/commands/hardis/misc/servicenow-report.js.map +1 -1
- package/lib/commands/hardis/org/configure/files.js +2 -0
- package/lib/commands/hardis/org/configure/files.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/audittrail.js +1 -1
- package/lib/commands/hardis/org/diagnose/audittrail.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/legacyapi.js +2 -2
- package/lib/commands/hardis/org/diagnose/legacyapi.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/licenses.js +1 -1
- package/lib/commands/hardis/org/diagnose/licenses.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/releaseupdates.js +1 -1
- package/lib/commands/hardis/org/diagnose/releaseupdates.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.js +32 -3
- package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/unused-apex-classes.js +1 -1
- package/lib/commands/hardis/org/diagnose/unused-apex-classes.js.map +1 -1
- package/lib/commands/hardis/org/diagnose/unused-connected-apps.js +1 -1
- package/lib/commands/hardis/org/diagnose/unused-connected-apps.js.map +1 -1
- package/lib/commands/hardis/org/files/export.js +2 -1
- package/lib/commands/hardis/org/files/export.js.map +1 -1
- package/lib/commands/hardis/org/monitor/backup.js +1 -1
- package/lib/commands/hardis/org/monitor/backup.js.map +1 -1
- package/lib/commands/hardis/org/monitor/limits.js +1 -1
- package/lib/commands/hardis/org/monitor/limits.js.map +1 -1
- package/lib/commands/hardis/org/multi-org-query.js +1 -1
- package/lib/commands/hardis/org/multi-org-query.js.map +1 -1
- package/lib/commands/hardis/project/audit/callincallout.js +4 -1
- package/lib/commands/hardis/project/audit/callincallout.js.map +1 -1
- package/lib/commands/hardis/project/audit/remotesites.js +4 -1
- package/lib/commands/hardis/project/audit/remotesites.js.map +1 -1
- package/lib/common/utils/filesUtils.d.ts +4 -1
- package/lib/common/utils/filesUtils.js +105 -51
- package/lib/common/utils/filesUtils.js.map +1 -1
- package/lib/common/utils/index.js +6 -2
- package/lib/common/utils/index.js.map +1 -1
- package/oclif.manifest.json +1064 -1064
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callincallout.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/callincallout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"callincallout.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/callincallout.ts"],"names":[],"mappings":"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"}
|
|
@@ -126,7 +126,10 @@ The command's technical implementation involves:
|
|
|
126
126
|
{ key: 'active', header: 'Active' },
|
|
127
127
|
{ key: 'description', header: 'Description' },
|
|
128
128
|
];
|
|
129
|
-
const reportFiles = await generateReports(resultSorted, columns, this
|
|
129
|
+
const reportFiles = await generateReports(resultSorted, columns, this, {
|
|
130
|
+
logFileName: 'remote-sites-audit',
|
|
131
|
+
logLabel: 'Remote Sites Audit',
|
|
132
|
+
});
|
|
130
133
|
// Return an object to be displayed with --json
|
|
131
134
|
return {
|
|
132
135
|
outputString: 'Processed callIns and callOuts audit',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remotesites.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/remotesites.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,CAAC,MAAM,OAAO,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAEhF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAc;IAC9C,MAAM,CAAC,KAAK,GAAG,oBAAoB,CAAC;IAEpC,MAAM,CAAC,WAAW,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BrC,CAAC;IAEO,MAAM,CAAC,QAAQ,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAEnE,yCAAyC;IAElC,MAAM,CAAC,KAAK,GAAQ;QACzB,uCAAuC;QACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;SAC9C,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;SAC9C,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,WAAW,EAAE,+DAA+D;SAC7E,CAAC;KACH,CAAC;IAEF,uGAAuG;IAChG,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IAErC,sBAAsB;IAEZ,YAAY,GAAU,EAAE,CAAC;IAE5B,KAAK,CAAC,GAAG;QACd,MAAM,OAAO,GAAG,uCAAuC,CAAC;QACxD,MAAM,QAAQ,GAAG;YACf;gBACE,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE;oBACN,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE;oBAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iCAAiC,EAAE;oBAC5D;wBACE,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,wCAAwC;qBAChD;iBACF;aACF;SACF,CAAC;QACF,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,uBAAuB,CAAC,MAAM,QAAQ,CAAC,CAAC;QACzE,gBAAgB;QAChB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,gDAAgD;YAChD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,mBAAmB,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC9E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,MAAM,GAAU,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;YACxD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;gBAClF,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACjF,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC1C,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACjE,MAAM,EAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAS,EAAE,MAAM,IAAI,kBAAkB;aACnG,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE;YACrC,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC;YAC3D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;SAC5C,CAAC,CAAC;QAEH,mBAAmB;QACnB,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9D,UAAU,CAAC,IAAI,EACb,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC;YACrB,OAAO,IAAI,CAAC,MAAM,CAAC;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;QAEF,+BAA+B;QAC/B,MAAM,OAAO,GAAG;YACd,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE;YACvC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/B,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;YAC7B,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE;SAC9C,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"remotesites.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/remotesites.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,CAAC,MAAM,OAAO,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAEhF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAc;IAC9C,MAAM,CAAC,KAAK,GAAG,oBAAoB,CAAC;IAEpC,MAAM,CAAC,WAAW,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BrC,CAAC;IAEO,MAAM,CAAC,QAAQ,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAEnE,yCAAyC;IAElC,MAAM,CAAC,KAAK,GAAQ;QACzB,uCAAuC;QACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;SAC9C,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;SAC9C,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,WAAW,EAAE,+DAA+D;SAC7E,CAAC;KACH,CAAC;IAEF,uGAAuG;IAChG,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IAErC,sBAAsB;IAEZ,YAAY,GAAU,EAAE,CAAC;IAE5B,KAAK,CAAC,GAAG;QACd,MAAM,OAAO,GAAG,uCAAuC,CAAC;QACxD,MAAM,QAAQ,GAAG;YACf;gBACE,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE;oBACN,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE;oBAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iCAAiC,EAAE;oBAC5D;wBACE,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,wCAAwC;qBAChD;iBACF;aACF;SACF,CAAC;QACF,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,uBAAuB,CAAC,MAAM,QAAQ,CAAC,CAAC;QACzE,gBAAgB;QAChB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,gDAAgD;YAChD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,mBAAmB,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC9E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,MAAM,GAAU,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;YACxD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;gBAClF,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACjF,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC1C,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACjE,MAAM,EAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAS,EAAE,MAAM,IAAI,kBAAkB;aACnG,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE;YACrC,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC;YAC3D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;SAC5C,CAAC,CAAC;QAEH,mBAAmB;QACnB,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9D,UAAU,CAAC,IAAI,EACb,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC;YACrB,OAAO,IAAI,CAAC,MAAM,CAAC;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;QAEF,+BAA+B;QAC/B,MAAM,OAAO,GAAG;YACd,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE;YACvC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/B,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;YAC7B,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE;SAC9C,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrE,WAAW,EAAE,oBAAoB;YACjC,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,CAAC;QAEH,+CAA+C;QAC/C,OAAO;YACL,YAAY,EAAE,sCAAsC;YACpD,MAAM,EAAE,YAAY;YACpB,WAAW;SACZ,CAAC;IACJ,CAAC"}
|
|
@@ -26,6 +26,7 @@ export declare class FilesExporter {
|
|
|
26
26
|
private filesErrors;
|
|
27
27
|
private filesIgnoredType;
|
|
28
28
|
private filesIgnoredExisting;
|
|
29
|
+
private filesIgnoredSize;
|
|
29
30
|
private apiUsedBefore;
|
|
30
31
|
private apiLimit;
|
|
31
32
|
constructor(filesPath: string, conn: Connection, options: {
|
|
@@ -40,6 +41,7 @@ export declare class FilesExporter {
|
|
|
40
41
|
filesErrors: number;
|
|
41
42
|
filesIgnoredType: number;
|
|
42
43
|
filesIgnoredExisting: number;
|
|
44
|
+
filesIgnoredSize: number;
|
|
43
45
|
totalSoqlRequests: number;
|
|
44
46
|
totalParentRecords: number;
|
|
45
47
|
parentRecordsWithFiles: number;
|
|
@@ -122,6 +124,7 @@ export declare function getFilesWorkspaceDetail(filesWorkspace: string): Promise
|
|
|
122
124
|
outputFileNameFormat: any;
|
|
123
125
|
overwriteParentRecords: any;
|
|
124
126
|
overwriteFiles: any;
|
|
127
|
+
fileSizeMin: any;
|
|
125
128
|
} | null>;
|
|
126
129
|
export declare function promptFilesExportConfiguration(filesExportConfig: any, override?: boolean): Promise<any>;
|
|
127
130
|
export declare function countLinesInFile(file: string): Promise<unknown>;
|
|
@@ -150,7 +153,7 @@ export declare function generateReportPath(fileNamePrefix: string, outputFile: s
|
|
|
150
153
|
* @param {string} outputPath - The path where the CSV file will be written.
|
|
151
154
|
* @returns {Promise<void>} - A Promise that resolves when the operation is complete.
|
|
152
155
|
*/
|
|
153
|
-
export declare function generateCsvFile(data: any[], outputPath: string, options
|
|
156
|
+
export declare function generateCsvFile(data: any[], outputPath: string, options: {
|
|
154
157
|
fileTitle?: string;
|
|
155
158
|
csvFileTitle?: string;
|
|
156
159
|
xlsFileTitle?: string;
|
|
@@ -43,6 +43,7 @@ export class FilesExporter {
|
|
|
43
43
|
filesErrors = 0;
|
|
44
44
|
filesIgnoredType = 0;
|
|
45
45
|
filesIgnoredExisting = 0;
|
|
46
|
+
filesIgnoredSize = 0;
|
|
46
47
|
apiUsedBefore = 0;
|
|
47
48
|
apiLimit = 0;
|
|
48
49
|
constructor(filesPath, conn, options, commandThis) {
|
|
@@ -281,7 +282,7 @@ export class FilesExporter {
|
|
|
281
282
|
const batch = records.slice(i, i + attachmentBatchSize);
|
|
282
283
|
// Request all Attachment related to all records of the batch using REST API
|
|
283
284
|
const parentIdIn = batch.map((record) => `'${record.Id}'`).join(',');
|
|
284
|
-
const attachmentQuery = `SELECT Id, Name, ContentType, ParentId FROM Attachment WHERE ParentId IN (${parentIdIn})`;
|
|
285
|
+
const attachmentQuery = `SELECT Id, Name, ContentType, ParentId, BodyLength FROM Attachment WHERE ParentId IN (${parentIdIn})`;
|
|
285
286
|
this.totalSoqlRequests++;
|
|
286
287
|
const attachments = await this.conn.query(attachmentQuery);
|
|
287
288
|
actualFilesInChunk += attachments.records.length; // Count actual files discovered
|
|
@@ -323,7 +324,7 @@ export class FilesExporter {
|
|
|
323
324
|
// Log the progression of contentDocIdBatch
|
|
324
325
|
uxLog("action", this, c.cyan(`Processing ContentDocumentId chunk #${Math.ceil((j + 1) / contentVersionBatchSize)} on ${Math.ceil(contentDocIdIn.length / contentVersionBatchSize)}`));
|
|
325
326
|
// Request all ContentVersion related to all records of the batch
|
|
326
|
-
const contentVersionSoql = `SELECT Id,ContentDocumentId,Description,FileExtension,FileType,PathOnClient,Title FROM ContentVersion WHERE ContentDocumentId IN (${contentDocIdBatch}) AND IsLatest = true`;
|
|
327
|
+
const contentVersionSoql = `SELECT Id,ContentDocumentId,Description,FileExtension,FileType,PathOnClient,Title,ContentSize FROM ContentVersion WHERE ContentDocumentId IN (${contentDocIdBatch}) AND IsLatest = true`;
|
|
327
328
|
this.totalSoqlRequests++;
|
|
328
329
|
const contentVersions = await bulkQueryByChunks(contentVersionSoql, this.conn, this.parentRecordsChunkSize);
|
|
329
330
|
// ContentDocument object can be linked to multiple other objects even with same type (for example: same attachment can be linked to multiple EmailMessage objects).
|
|
@@ -374,7 +375,7 @@ export class FilesExporter {
|
|
|
374
375
|
// Initialize CSV log file with headers
|
|
375
376
|
async initializeCsvLog() {
|
|
376
377
|
await fs.ensureDir(path.dirname(this.logFile));
|
|
377
|
-
const headers = 'Status,Folder,File Name,Extension,File Size (KB),Error Detail\n';
|
|
378
|
+
const headers = 'Status,Folder,File Name,Extension,File Size (KB),Error Detail,ContentDocument Id,ContentVersion Id,Attachment Id\n';
|
|
378
379
|
await fs.writeFile(this.logFile, headers, 'utf8');
|
|
379
380
|
uxLog("log", this, c.grey(`CSV log file initialized: ${this.logFile}`));
|
|
380
381
|
WebSocketClient.sendReportFileMessage(this.logFile, "Exported files report (CSV)", 'report');
|
|
@@ -391,12 +392,12 @@ export class FilesExporter {
|
|
|
391
392
|
return { fileName, extension, folderPath };
|
|
392
393
|
}
|
|
393
394
|
// Helper method to log skipped files
|
|
394
|
-
async logSkippedFile(outputFile, errorDetail) {
|
|
395
|
+
async logSkippedFile(outputFile, errorDetail, contentDocumentId = '', contentVersionId = '', attachmentId = '') {
|
|
395
396
|
const { fileName, extension, folderPath } = this.extractFileInfo(outputFile);
|
|
396
|
-
await this.writeCsvLogEntry('skipped', folderPath, fileName, extension, 0, errorDetail);
|
|
397
|
+
await this.writeCsvLogEntry('skipped', folderPath, fileName, extension, 0, errorDetail, contentDocumentId, contentVersionId, attachmentId);
|
|
397
398
|
}
|
|
398
399
|
// Write a CSV entry for each file processed (fileSize in KB)
|
|
399
|
-
async writeCsvLogEntry(status, folder, fileName, extension, fileSizeKB, errorDetail = '') {
|
|
400
|
+
async writeCsvLogEntry(status, folder, fileName, extension, fileSizeKB, errorDetail = '', contentDocumentId = '', contentVersionId = '', attachmentId = '') {
|
|
400
401
|
try {
|
|
401
402
|
// Escape CSV values to handle commas, quotes, and newlines
|
|
402
403
|
const escapeCsvValue = (value) => {
|
|
@@ -412,7 +413,10 @@ export class FilesExporter {
|
|
|
412
413
|
escapeCsvValue(fileName),
|
|
413
414
|
escapeCsvValue(extension),
|
|
414
415
|
escapeCsvValue(fileSizeKB),
|
|
415
|
-
escapeCsvValue(errorDetail)
|
|
416
|
+
escapeCsvValue(errorDetail),
|
|
417
|
+
escapeCsvValue(contentDocumentId),
|
|
418
|
+
escapeCsvValue(contentVersionId),
|
|
419
|
+
escapeCsvValue(attachmentId)
|
|
416
420
|
].join(',') + '\n';
|
|
417
421
|
await fs.appendFile(this.logFile, csvLine, 'utf8');
|
|
418
422
|
}
|
|
@@ -420,7 +424,7 @@ export class FilesExporter {
|
|
|
420
424
|
uxLog("warning", this, c.yellow(`Error writing to CSV log: ${e.message}`));
|
|
421
425
|
}
|
|
422
426
|
}
|
|
423
|
-
async downloadFile(fetchUrl, outputFile) {
|
|
427
|
+
async downloadFile(fetchUrl, outputFile, contentDocumentId = '', contentVersionId = '', attachmentId = '') {
|
|
424
428
|
const downloadResult = await new FileDownloader(fetchUrl, { conn: this.conn, outputFile: outputFile, label: 'file' }).download();
|
|
425
429
|
// Extract file information for CSV logging
|
|
426
430
|
const { fileName, extension, folderPath } = this.extractFileInfo(outputFile);
|
|
@@ -444,17 +448,30 @@ export class FilesExporter {
|
|
|
444
448
|
if (downloadResult.success) {
|
|
445
449
|
uxLog("success", this, c.grey(`Downloaded ${fileDisplay}`));
|
|
446
450
|
this.filesDownloaded++;
|
|
447
|
-
// Write success entry to CSV log
|
|
448
|
-
await this.writeCsvLogEntry('success', folderPath, fileName, extension, fileSizeKB);
|
|
451
|
+
// Write success entry to CSV log with Salesforce IDs
|
|
452
|
+
await this.writeCsvLogEntry('success', folderPath, fileName, extension, fileSizeKB, '', contentDocumentId, contentVersionId, attachmentId);
|
|
449
453
|
}
|
|
450
454
|
else {
|
|
451
455
|
uxLog("warning", this, c.red(`Error ${fileDisplay}`));
|
|
452
456
|
this.filesErrors++;
|
|
453
|
-
// Write failed entry to CSV log
|
|
454
|
-
await this.writeCsvLogEntry('failed', folderPath, fileName, extension, fileSizeKB, errorDetail);
|
|
457
|
+
// Write failed entry to CSV log with Salesforce IDs
|
|
458
|
+
await this.writeCsvLogEntry('failed', folderPath, fileName, extension, fileSizeKB, errorDetail, contentDocumentId, contentVersionId, attachmentId);
|
|
455
459
|
}
|
|
456
460
|
}
|
|
457
461
|
async downloadAttachmentFile(attachment, records) {
|
|
462
|
+
// Check file size filter (BodyLength is in bytes)
|
|
463
|
+
const fileSizeKB = attachment.BodyLength ? Math.round(attachment.BodyLength / 1024) : 0;
|
|
464
|
+
if (this.dtl.fileSizeMin && this.dtl.fileSizeMin > 0 && fileSizeKB < this.dtl.fileSizeMin) {
|
|
465
|
+
uxLog("log", this, c.grey(`Skipped - ${attachment.Name} - File size (${fileSizeKB} KB) below minimum (${this.dtl.fileSizeMin} KB)`));
|
|
466
|
+
this.filesIgnoredSize++;
|
|
467
|
+
// Log skipped file to CSV
|
|
468
|
+
const parentAttachment = records.filter((record) => record.Id === attachment.ParentId)[0];
|
|
469
|
+
const attachmentParentFolderName = (parentAttachment[this.dtl.outputFolderNameField] || parentAttachment.Id).replace(/[/\\?%*:|"<>]/g, '-');
|
|
470
|
+
const parentRecordFolderForFiles = path.resolve(path.join(this.exportedFilesFolder, attachmentParentFolderName));
|
|
471
|
+
const outputFile = path.join(parentRecordFolderForFiles, attachment.Name.replace(/[/\\?%*:|"<>]/g, '-'));
|
|
472
|
+
await this.logSkippedFile(outputFile, `File size (${fileSizeKB} KB) below minimum (${this.dtl.fileSizeMin} KB)`, '', '', attachment.Id);
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
458
475
|
// Retrieve initial record to build output files folder name
|
|
459
476
|
const parentAttachment = records.filter((record) => record.Id === attachment.ParentId)[0];
|
|
460
477
|
// Build record output files folder (if folder name contains slashes or antislashes, replace them by spaces)
|
|
@@ -466,9 +483,22 @@ export class FilesExporter {
|
|
|
466
483
|
await fs.ensureDir(parentRecordFolderForFiles);
|
|
467
484
|
// Download file locally
|
|
468
485
|
const fetchUrl = `${this.conn.instanceUrl}/services/data/v${getApiVersion()}/sobjects/Attachment/${attachment.Id}/Body`;
|
|
469
|
-
await this.downloadFile(fetchUrl, outputFile);
|
|
486
|
+
await this.downloadFile(fetchUrl, outputFile, '', '', attachment.Id);
|
|
470
487
|
}
|
|
471
488
|
async downloadContentVersionFile(contentVersion, records, contentDocumentLink) {
|
|
489
|
+
// Check file size filter (ContentSize is in bytes)
|
|
490
|
+
const fileSizeKB = contentVersion.ContentSize ? Math.round(contentVersion.ContentSize / 1024) : 0;
|
|
491
|
+
if (this.dtl.fileSizeMin && this.dtl.fileSizeMin > 0 && fileSizeKB < this.dtl.fileSizeMin) {
|
|
492
|
+
uxLog("log", this, c.grey(`Skipped - ${contentVersion.Title} - File size (${fileSizeKB} KB) below minimum (${this.dtl.fileSizeMin} KB)`));
|
|
493
|
+
this.filesIgnoredSize++;
|
|
494
|
+
// Log skipped file to CSV
|
|
495
|
+
const parentRecord = records.filter((record) => record.Id === contentDocumentLink.LinkedEntityId)[0];
|
|
496
|
+
const parentFolderName = (parentRecord[this.dtl.outputFolderNameField] || parentRecord.Id).replace(/[/\\?%*:|"<>]/g, '-');
|
|
497
|
+
const parentRecordFolderForFiles = path.resolve(path.join(this.exportedFilesFolder, parentFolderName));
|
|
498
|
+
const outputFile = path.join(parentRecordFolderForFiles, contentVersion.Title.replace(/[/\\?%*:|"<>]/g, '-'));
|
|
499
|
+
await this.logSkippedFile(outputFile, `File size (${fileSizeKB} KB) below minimum (${this.dtl.fileSizeMin} KB)`, contentVersion.ContentDocumentId, contentVersion.Id);
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
472
502
|
// Retrieve initial record to build output files folder name
|
|
473
503
|
const parentRecord = records.filter((record) => record.Id === contentDocumentLink.LinkedEntityId)[0];
|
|
474
504
|
// Build record output files folder (if folder name contains slashes or antislashes, replace them by spaces)
|
|
@@ -497,7 +527,7 @@ export class FilesExporter {
|
|
|
497
527
|
uxLog("log", this, c.grey(`Skipped - ${outputFile.replace(this.exportedFilesFolder, '')} - File type ignored`));
|
|
498
528
|
this.filesIgnoredType++;
|
|
499
529
|
// Log skipped file to CSV
|
|
500
|
-
await this.logSkippedFile(outputFile, 'File type ignored');
|
|
530
|
+
await this.logSkippedFile(outputFile, 'File type ignored', contentVersion.ContentDocumentId, contentVersion.Id);
|
|
501
531
|
return;
|
|
502
532
|
}
|
|
503
533
|
// Check file overwrite
|
|
@@ -505,14 +535,14 @@ export class FilesExporter {
|
|
|
505
535
|
uxLog("warning", this, c.yellow(`Skipped - ${outputFile.replace(this.exportedFilesFolder, '')} - File already existing`));
|
|
506
536
|
this.filesIgnoredExisting++;
|
|
507
537
|
// Log skipped file to CSV
|
|
508
|
-
await this.logSkippedFile(outputFile, 'File already exists');
|
|
538
|
+
await this.logSkippedFile(outputFile, 'File already exists', contentVersion.ContentDocumentId, contentVersion.Id);
|
|
509
539
|
return;
|
|
510
540
|
}
|
|
511
541
|
// Create directory if not existing
|
|
512
542
|
await fs.ensureDir(parentRecordFolderForFiles);
|
|
513
543
|
// Download file locally
|
|
514
544
|
const fetchUrl = `${this.conn.instanceUrl}/services/data/v${getApiVersion()}/sobjects/ContentVersion/${contentVersion.Id}/VersionData`;
|
|
515
|
-
await this.downloadFile(fetchUrl, outputFile);
|
|
545
|
+
await this.downloadFile(fetchUrl, outputFile, contentVersion.ContentDocumentId, contentVersion.Id);
|
|
516
546
|
}
|
|
517
547
|
// Build stats & result
|
|
518
548
|
async buildResult() {
|
|
@@ -520,12 +550,13 @@ export class FilesExporter {
|
|
|
520
550
|
const apiCallsRemaining = connAny?.limitInfo?.apiUsage?.used
|
|
521
551
|
? (connAny?.limitInfo?.apiUsage?.limit || 0) - (connAny?.limitInfo?.apiUsage?.used || 0)
|
|
522
552
|
: null;
|
|
523
|
-
|
|
553
|
+
const result = {
|
|
524
554
|
stats: {
|
|
525
555
|
filesDownloaded: this.filesDownloaded,
|
|
526
556
|
filesErrors: this.filesErrors,
|
|
527
557
|
filesIgnoredType: this.filesIgnoredType,
|
|
528
558
|
filesIgnoredExisting: this.filesIgnoredExisting,
|
|
559
|
+
filesIgnoredSize: this.filesIgnoredSize,
|
|
529
560
|
totalSoqlRequests: this.totalSoqlRequests,
|
|
530
561
|
totalParentRecords: this.totalParentRecords,
|
|
531
562
|
parentRecordsWithFiles: this.parentRecordsWithFiles,
|
|
@@ -537,6 +568,8 @@ export class FilesExporter {
|
|
|
537
568
|
},
|
|
538
569
|
logFile: this.logFile
|
|
539
570
|
};
|
|
571
|
+
await createXlsxFromCsv(this.logFile, { fileTitle: "Exported files report" }, result);
|
|
572
|
+
return result;
|
|
540
573
|
}
|
|
541
574
|
}
|
|
542
575
|
export class FilesImporter {
|
|
@@ -572,7 +605,7 @@ export class FilesImporter {
|
|
|
572
605
|
// Initialize CSV log file with headers
|
|
573
606
|
async initializeCsvLog() {
|
|
574
607
|
await fs.ensureDir(path.dirname(this.logFile));
|
|
575
|
-
const headers = 'Status,Folder,File Name,Extension,File Size (KB),Error Detail\n';
|
|
608
|
+
const headers = 'Status,Folder,File Name,Extension,File Size (KB),Error Detail,ContentVersion Id\n';
|
|
576
609
|
await fs.writeFile(this.logFile, headers, 'utf8');
|
|
577
610
|
uxLog("log", this.commandThis, c.grey(`CSV log file initialized: ${this.logFile}`));
|
|
578
611
|
WebSocketClient.sendReportFileMessage(this.logFile, "Imported files report (CSV)", 'report');
|
|
@@ -584,7 +617,7 @@ export class FilesImporter {
|
|
|
584
617
|
return { fileName, extension, folderPath: folderName };
|
|
585
618
|
}
|
|
586
619
|
// Write a CSV entry for each file processed (fileSize in KB)
|
|
587
|
-
async writeCsvLogEntry(status, folder, fileName, extension, fileSizeKB, errorDetail = '') {
|
|
620
|
+
async writeCsvLogEntry(status, folder, fileName, extension, fileSizeKB, errorDetail = '', contentVersionId = '') {
|
|
588
621
|
try {
|
|
589
622
|
// Escape CSV values to handle commas, quotes, and newlines
|
|
590
623
|
const escapeCsvValue = (value) => {
|
|
@@ -600,7 +633,8 @@ export class FilesImporter {
|
|
|
600
633
|
escapeCsvValue(fileName),
|
|
601
634
|
escapeCsvValue(extension),
|
|
602
635
|
escapeCsvValue(fileSizeKB),
|
|
603
|
-
escapeCsvValue(errorDetail)
|
|
636
|
+
escapeCsvValue(errorDetail),
|
|
637
|
+
escapeCsvValue(contentVersionId)
|
|
604
638
|
].join(',') + '\n';
|
|
605
639
|
await fs.appendFile(this.logFile, csvLine, 'utf8');
|
|
606
640
|
}
|
|
@@ -650,7 +684,7 @@ export class FilesImporter {
|
|
|
650
684
|
const { fileName, extension } = this.extractFileInfo(file, recordFolder);
|
|
651
685
|
const filePath = path.join(recordFolderPath, file);
|
|
652
686
|
const fileSizeKB = fs.existsSync(filePath) ? Math.round(fs.statSync(filePath).size / 1024) : 0;
|
|
653
|
-
await this.writeCsvLogEntry('skipped', recordFolder, fileName, extension, fileSizeKB, 'Parent record not found');
|
|
687
|
+
await this.writeCsvLogEntry('skipped', recordFolder, fileName, extension, fileSizeKB, 'Parent record not found', '');
|
|
654
688
|
this.filesSkipped++;
|
|
655
689
|
processedFiles++;
|
|
656
690
|
// Update progress
|
|
@@ -691,23 +725,27 @@ export class FilesImporter {
|
|
|
691
725
|
const insertResult = await this.conn.sobject('ContentVersion').create(contentVersionParams);
|
|
692
726
|
if (Array.isArray(insertResult) && insertResult.length === 0) {
|
|
693
727
|
uxLog("error", this.commandThis, c.red(`Unable to upload file ${file}`));
|
|
694
|
-
await this.writeCsvLogEntry('failed', recordFolder, fileName, extension, fileSizeKB, 'Upload failed');
|
|
728
|
+
await this.writeCsvLogEntry('failed', recordFolder, fileName, extension, fileSizeKB, 'Upload failed', '');
|
|
695
729
|
this.filesErrors++;
|
|
696
730
|
}
|
|
697
731
|
else if (Array.isArray(insertResult) && !insertResult[0].success) {
|
|
698
732
|
uxLog("error", this.commandThis, c.red(`Unable to upload file ${file}`));
|
|
699
|
-
await this.writeCsvLogEntry('failed', recordFolder, fileName, extension, fileSizeKB, insertResult[0].errors?.join(', ') || 'Upload failed');
|
|
733
|
+
await this.writeCsvLogEntry('failed', recordFolder, fileName, extension, fileSizeKB, insertResult[0].errors?.join(', ') || 'Upload failed', '');
|
|
700
734
|
this.filesErrors++;
|
|
701
735
|
}
|
|
702
736
|
else {
|
|
737
|
+
// Extract ContentVersion ID from successful insert result
|
|
738
|
+
const contentVersionId = Array.isArray(insertResult) && insertResult.length > 0
|
|
739
|
+
? insertResult[0].id
|
|
740
|
+
: insertResult.id || '';
|
|
703
741
|
if (isOverwrite) {
|
|
704
742
|
uxLog("success", this.commandThis, c.grey(`Overwritten ${file}`));
|
|
705
|
-
await this.writeCsvLogEntry('overwritten', recordFolder, fileName, extension, fileSizeKB);
|
|
743
|
+
await this.writeCsvLogEntry('overwritten', recordFolder, fileName, extension, fileSizeKB, '', contentVersionId);
|
|
706
744
|
this.filesOverwritten++;
|
|
707
745
|
}
|
|
708
746
|
else {
|
|
709
747
|
uxLog("success", this.commandThis, c.grey(`Uploaded ${file}`));
|
|
710
|
-
await this.writeCsvLogEntry('success', recordFolder, fileName, extension, fileSizeKB);
|
|
748
|
+
await this.writeCsvLogEntry('success', recordFolder, fileName, extension, fileSizeKB, '', contentVersionId);
|
|
711
749
|
this.filesUploaded++;
|
|
712
750
|
}
|
|
713
751
|
}
|
|
@@ -715,7 +753,7 @@ export class FilesImporter {
|
|
|
715
753
|
catch (e) {
|
|
716
754
|
const errorDetail = e.message;
|
|
717
755
|
uxLog("error", this.commandThis, c.red(`Unable to upload file ${file}: ${errorDetail}`));
|
|
718
|
-
await this.writeCsvLogEntry('failed', recordFolder, fileName, extension, fileSizeKB, errorDetail);
|
|
756
|
+
await this.writeCsvLogEntry('failed', recordFolder, fileName, extension, fileSizeKB, errorDetail, '');
|
|
719
757
|
this.filesErrors++;
|
|
720
758
|
}
|
|
721
759
|
processedFiles++;
|
|
@@ -734,7 +772,7 @@ export class FilesImporter {
|
|
|
734
772
|
const apiCallsRemaining = connAny?.limitInfo?.apiUsage?.used
|
|
735
773
|
? (connAny?.limitInfo?.apiUsage?.limit || 0) - (connAny?.limitInfo?.apiUsage?.used || 0)
|
|
736
774
|
: null;
|
|
737
|
-
|
|
775
|
+
const result = {
|
|
738
776
|
stats: {
|
|
739
777
|
filesUploaded: this.filesUploaded,
|
|
740
778
|
filesOverwritten: this.filesOverwritten,
|
|
@@ -749,6 +787,8 @@ export class FilesImporter {
|
|
|
749
787
|
},
|
|
750
788
|
logFile: this.logFile
|
|
751
789
|
};
|
|
790
|
+
await createXlsxFromCsv(this.logFile, { fileTitle: "Imported files report" }, result);
|
|
791
|
+
return result;
|
|
752
792
|
}
|
|
753
793
|
// Calculate API consumption
|
|
754
794
|
async calculateApiConsumption(totalFilesNumber) {
|
|
@@ -823,6 +863,7 @@ export async function getFilesWorkspaceDetail(filesWorkspace) {
|
|
|
823
863
|
const outputFileNameFormat = exportFileJson.outputFileNameFormat || 'title';
|
|
824
864
|
const overwriteParentRecords = exportFileJson.overwriteParentRecords === false ? false : exportFileJson.overwriteParentRecords || true;
|
|
825
865
|
const overwriteFiles = exportFileJson.overwriteFiles || false;
|
|
866
|
+
const fileSizeMin = exportFileJson.fileSizeMin || 0;
|
|
826
867
|
return {
|
|
827
868
|
full_label: `[${folderName}]${folderName != hardisLabel ? `: ${hardisLabel}` : ''}`,
|
|
828
869
|
label: hardisLabel,
|
|
@@ -833,6 +874,7 @@ export async function getFilesWorkspaceDetail(filesWorkspace) {
|
|
|
833
874
|
outputFileNameFormat: outputFileNameFormat,
|
|
834
875
|
overwriteParentRecords: overwriteParentRecords,
|
|
835
876
|
overwriteFiles: overwriteFiles,
|
|
877
|
+
fileSizeMin: fileSizeMin,
|
|
836
878
|
};
|
|
837
879
|
}
|
|
838
880
|
export async function promptFilesExportConfiguration(filesExportConfig, override = false) {
|
|
@@ -906,6 +948,15 @@ export async function promptFilesExportConfiguration(filesExportConfig, override
|
|
|
906
948
|
description: 'Replace existing local files with newly downloaded versions',
|
|
907
949
|
initial: filesExportConfig.overwriteFiles,
|
|
908
950
|
},
|
|
951
|
+
{
|
|
952
|
+
type: 'number',
|
|
953
|
+
name: 'fileSizeMin',
|
|
954
|
+
message: 'Please input the minimum file size in KB (0 = no minimum)',
|
|
955
|
+
description: 'Only files with size greater than or equal to this value will be downloaded (in kilobytes)',
|
|
956
|
+
placeholder: 'Ex: 10',
|
|
957
|
+
initial: filesExportConfig.fileSizeMin || 0,
|
|
958
|
+
min: 0,
|
|
959
|
+
},
|
|
909
960
|
]);
|
|
910
961
|
const resp = await prompts(questions);
|
|
911
962
|
const filesConfig = Object.assign(filesExportConfig, {
|
|
@@ -917,6 +968,7 @@ export async function promptFilesExportConfiguration(filesExportConfig, override
|
|
|
917
968
|
outputFileNameFormat: resp.outputFileNameFormat,
|
|
918
969
|
overwriteParentRecords: resp.overwriteParentRecords,
|
|
919
970
|
overwriteFiles: resp.overwriteFiles,
|
|
971
|
+
fileSizeMin: resp.fileSizeMin,
|
|
920
972
|
});
|
|
921
973
|
return filesConfig;
|
|
922
974
|
}
|
|
@@ -996,30 +1048,7 @@ export async function generateCsvFile(data, outputPath, options) {
|
|
|
996
1048
|
const csvFileTitle = options?.fileTitle ? `${options.fileTitle} (CSV)` : options?.csvFileTitle ?? "Report (CSV)";
|
|
997
1049
|
WebSocketClient.sendReportFileMessage(outputPath, csvFileTitle, "report");
|
|
998
1050
|
if (data.length > 0 && !options?.noExcel) {
|
|
999
|
-
|
|
1000
|
-
// Generate mirror XLSX file
|
|
1001
|
-
const xlsDirName = path.join(path.dirname(outputPath), 'xls');
|
|
1002
|
-
const xslFileName = path.basename(outputPath).replace('.csv', '.xlsx');
|
|
1003
|
-
const xslxFile = path.join(xlsDirName, xslFileName);
|
|
1004
|
-
await fs.ensureDir(xlsDirName);
|
|
1005
|
-
await csvToXls(outputPath, xslxFile);
|
|
1006
|
-
uxLog("action", this, c.cyan(c.italic(`Please see detailed XLSX log in ${c.bold(xslxFile)}`)));
|
|
1007
|
-
const xlsFileTitle = options?.fileTitle ? `${options.fileTitle} (XLSX)` : options?.xlsFileTitle ?? "Report (XLSX)";
|
|
1008
|
-
WebSocketClient.sendReportFileMessage(xslxFile, xlsFileTitle, "report");
|
|
1009
|
-
result.xlsxFile = xslxFile;
|
|
1010
|
-
if (!isCI && !(process.env.NO_OPEN === 'true') && !WebSocketClient.isAliveWithLwcUI()) {
|
|
1011
|
-
try {
|
|
1012
|
-
uxLog("other", this, c.italic(c.grey(`Opening XLSX file ${c.bold(xslxFile)}... (define NO_OPEN=true to disable this)`)));
|
|
1013
|
-
await open(xslxFile, { wait: false });
|
|
1014
|
-
}
|
|
1015
|
-
catch (e) {
|
|
1016
|
-
uxLog("warning", this, c.yellow('Error while opening XLSX file:\n' + e.message + '\n' + e.stack));
|
|
1017
|
-
}
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
catch (e2) {
|
|
1021
|
-
uxLog("warning", this, c.yellow('Error while generating XLSX log file:\n' + e2.message + '\n' + e2.stack));
|
|
1022
|
-
}
|
|
1051
|
+
await createXlsxFromCsv(outputPath, options, result);
|
|
1023
1052
|
}
|
|
1024
1053
|
else {
|
|
1025
1054
|
uxLog("other", this, c.grey(`No XLS file generated as ${outputPath} is empty`));
|
|
@@ -1030,6 +1059,31 @@ export async function generateCsvFile(data, outputPath, options) {
|
|
|
1030
1059
|
}
|
|
1031
1060
|
return result;
|
|
1032
1061
|
}
|
|
1062
|
+
async function createXlsxFromCsv(outputPath, options, result) {
|
|
1063
|
+
try {
|
|
1064
|
+
const xlsDirName = path.join(path.dirname(outputPath), 'xls');
|
|
1065
|
+
const xslFileName = path.basename(outputPath).replace('.csv', '.xlsx');
|
|
1066
|
+
const xslxFile = path.join(xlsDirName, xslFileName);
|
|
1067
|
+
await fs.ensureDir(xlsDirName);
|
|
1068
|
+
await csvToXls(outputPath, xslxFile);
|
|
1069
|
+
uxLog("action", this, c.cyan(c.italic(`Please see detailed XLSX log in ${c.bold(xslxFile)}`)));
|
|
1070
|
+
const xlsFileTitle = options?.fileTitle ? `${options.fileTitle} (XLSX)` : options?.xlsFileTitle ?? "Report (XLSX)";
|
|
1071
|
+
WebSocketClient.sendReportFileMessage(xslxFile, xlsFileTitle, "report");
|
|
1072
|
+
result.xlsxFile = xslxFile;
|
|
1073
|
+
if (!isCI && !(process.env.NO_OPEN === 'true') && !WebSocketClient.isAliveWithLwcUI()) {
|
|
1074
|
+
try {
|
|
1075
|
+
uxLog("other", this, c.italic(c.grey(`Opening XLSX file ${c.bold(xslxFile)}... (define NO_OPEN=true to disable this)`)));
|
|
1076
|
+
await open(xslxFile, { wait: false });
|
|
1077
|
+
}
|
|
1078
|
+
catch (e) {
|
|
1079
|
+
uxLog("warning", this, c.yellow('Error while opening XLSX file:\n' + e.message + '\n' + e.stack));
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
catch (e2) {
|
|
1084
|
+
uxLog("warning", this, c.yellow('Error while generating XLSX log file:\n' + e2.message + '\n' + e2.stack));
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1033
1087
|
async function csvToXls(csvFile, xslxFile) {
|
|
1034
1088
|
const workbook = new ExcelJS.Workbook();
|
|
1035
1089
|
const worksheet = await workbook.csv.readFile(csvFile);
|