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.
Files changed (49) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/defaults/templates/files/LargeFilesOnly.json +11 -0
  3. package/lib/commands/hardis/git/pull-requests/extract.js +1 -1
  4. package/lib/commands/hardis/git/pull-requests/extract.js.map +1 -1
  5. package/lib/commands/hardis/lint/access.js +1 -1
  6. package/lib/commands/hardis/lint/access.js.map +1 -1
  7. package/lib/commands/hardis/lint/metadatastatus.js +1 -1
  8. package/lib/commands/hardis/lint/metadatastatus.js.map +1 -1
  9. package/lib/commands/hardis/lint/missingattributes.js +1 -1
  10. package/lib/commands/hardis/lint/missingattributes.js.map +1 -1
  11. package/lib/commands/hardis/lint/unusedmetadatas.js +1 -1
  12. package/lib/commands/hardis/lint/unusedmetadatas.js.map +1 -1
  13. package/lib/commands/hardis/misc/servicenow-report.js +1 -1
  14. package/lib/commands/hardis/misc/servicenow-report.js.map +1 -1
  15. package/lib/commands/hardis/org/configure/files.js +2 -0
  16. package/lib/commands/hardis/org/configure/files.js.map +1 -1
  17. package/lib/commands/hardis/org/diagnose/audittrail.js +1 -1
  18. package/lib/commands/hardis/org/diagnose/audittrail.js.map +1 -1
  19. package/lib/commands/hardis/org/diagnose/legacyapi.js +2 -2
  20. package/lib/commands/hardis/org/diagnose/legacyapi.js.map +1 -1
  21. package/lib/commands/hardis/org/diagnose/licenses.js +1 -1
  22. package/lib/commands/hardis/org/diagnose/licenses.js.map +1 -1
  23. package/lib/commands/hardis/org/diagnose/releaseupdates.js +1 -1
  24. package/lib/commands/hardis/org/diagnose/releaseupdates.js.map +1 -1
  25. package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.js +32 -3
  26. package/lib/commands/hardis/org/diagnose/unsecure-connected-apps.js.map +1 -1
  27. package/lib/commands/hardis/org/diagnose/unused-apex-classes.js +1 -1
  28. package/lib/commands/hardis/org/diagnose/unused-apex-classes.js.map +1 -1
  29. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js +1 -1
  30. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js.map +1 -1
  31. package/lib/commands/hardis/org/files/export.js +2 -1
  32. package/lib/commands/hardis/org/files/export.js.map +1 -1
  33. package/lib/commands/hardis/org/monitor/backup.js +1 -1
  34. package/lib/commands/hardis/org/monitor/backup.js.map +1 -1
  35. package/lib/commands/hardis/org/monitor/limits.js +1 -1
  36. package/lib/commands/hardis/org/monitor/limits.js.map +1 -1
  37. package/lib/commands/hardis/org/multi-org-query.js +1 -1
  38. package/lib/commands/hardis/org/multi-org-query.js.map +1 -1
  39. package/lib/commands/hardis/project/audit/callincallout.js +4 -1
  40. package/lib/commands/hardis/project/audit/callincallout.js.map +1 -1
  41. package/lib/commands/hardis/project/audit/remotesites.js +4 -1
  42. package/lib/commands/hardis/project/audit/remotesites.js.map +1 -1
  43. package/lib/common/utils/filesUtils.d.ts +4 -1
  44. package/lib/common/utils/filesUtils.js +105 -51
  45. package/lib/common/utils/filesUtils.js.map +1 -1
  46. package/lib/common/utils/index.js +6 -2
  47. package/lib/common/utils/index.js.map +1 -1
  48. package/oclif.manifest.json +1064 -1064
  49. 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":"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"}
1
+ {"version":3,"file":"remotesites.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/project/audit/remotesites.ts"],"names":[],"mappings":"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"}
@@ -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
- return {
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
- return {
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
- try {
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);