sfdx-hardis 6.0.7-beta202508191748.0 → 6.0.7-beta202508202323.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.
@@ -4407,6 +4407,135 @@
4407
4407
  "ws:work:hardis"
4408
4408
  ]
4409
4409
  },
4410
+ "hardis:git:pull-requests:extract": {
4411
+ "aliases": [],
4412
+ "args": {},
4413
+ "description": "\n## Command Behavior\n\n**Extracts pull request information from your Git server based on specified filtering criteria.**\n\nThis command provides a powerful way to query and retrieve details about pull requests (or merge requests, depending on your Git provider) in your repository. It's highly useful for reporting, auditing, and analyzing development workflows.\n\nKey functionalities include:\n\n- **Target Branch Filtering:** You can filter pull requests by their target branch using the `--target-branch` flag. If not specified, the command will prompt you to select one.\n- **Status Filtering:** Filter pull requests by their status: `open`, `merged`, or `abandoned` using the `--status` flag. An interactive prompt is provided if no status is specified.\n- **Minimum Date Filtering:** Use the `--min-date` flag to retrieve pull requests created or updated after a specific date.\n- **CSV Output:** The extracted pull request data is generated into a CSV file, which can be used for further analysis in spreadsheet software.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves interacting with a Git provider's API:\n\n- **Git Provider Abstraction:** It uses the `GitProvider.getInstance(true)` to abstract away the specifics of different Git platforms (e.g., GitHub, GitLab, Azure DevOps). This ensures the command can work across various environments.\n- **API Calls:** The `gitProvider.listPullRequests()` method is called with a `prConstraint` object that encapsulates the filtering criteria (target branch, minimum date, status).\n- **Interactive Prompts:** The `prompts` library is used to interactively gather input from the user for the target branch and pull request status if they are not provided as command-line flags.\n- **Date Handling:** The `moment` library is used to parse and handle date inputs for the `--min-date` flag.\n- **CSV Generation:** The `generateCsvFile` utility is responsible for converting the retrieved pull request data into a CSV format, and `generateReportPath` determines the output file location.\n- **Error Handling:** It includes error handling for cases where a Git provider cannot be identified.\n</details>\n",
4414
+ "examples": [
4415
+ "$ sf hardis:git:pull-requests:extract",
4416
+ "$ sf hardis:git:pull-requests:extract --target-branch main --status merged"
4417
+ ],
4418
+ "flags": {
4419
+ "json": {
4420
+ "description": "Format output as json.",
4421
+ "helpGroup": "GLOBAL",
4422
+ "name": "json",
4423
+ "allowNo": false,
4424
+ "type": "boolean"
4425
+ },
4426
+ "flags-dir": {
4427
+ "helpGroup": "GLOBAL",
4428
+ "name": "flags-dir",
4429
+ "summary": "Import flag values from a directory.",
4430
+ "hasDynamicHelp": false,
4431
+ "multiple": false,
4432
+ "type": "option"
4433
+ },
4434
+ "target-branch": {
4435
+ "char": "t",
4436
+ "description": "Target branch of PRs",
4437
+ "name": "target-branch",
4438
+ "hasDynamicHelp": false,
4439
+ "multiple": false,
4440
+ "type": "option"
4441
+ },
4442
+ "status": {
4443
+ "char": "x",
4444
+ "description": "Status of the PR",
4445
+ "name": "status",
4446
+ "hasDynamicHelp": false,
4447
+ "multiple": false,
4448
+ "options": [
4449
+ "open",
4450
+ "merged",
4451
+ "abandoned"
4452
+ ],
4453
+ "type": "option"
4454
+ },
4455
+ "min-date": {
4456
+ "char": "m",
4457
+ "description": "Minimum date for PR",
4458
+ "name": "min-date",
4459
+ "hasDynamicHelp": false,
4460
+ "multiple": false,
4461
+ "type": "option"
4462
+ },
4463
+ "outputfile": {
4464
+ "char": "f",
4465
+ "description": "Force the path and name of output report file. Must end with .csv",
4466
+ "name": "outputfile",
4467
+ "hasDynamicHelp": false,
4468
+ "multiple": false,
4469
+ "type": "option"
4470
+ },
4471
+ "debug": {
4472
+ "char": "d",
4473
+ "description": "Activate debug mode (more logs)",
4474
+ "name": "debug",
4475
+ "allowNo": false,
4476
+ "type": "boolean"
4477
+ },
4478
+ "websocket": {
4479
+ "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
4480
+ "name": "websocket",
4481
+ "hasDynamicHelp": false,
4482
+ "multiple": false,
4483
+ "type": "option"
4484
+ },
4485
+ "skipauth": {
4486
+ "description": "Skip authentication check when a default username is required",
4487
+ "name": "skipauth",
4488
+ "allowNo": false,
4489
+ "type": "boolean"
4490
+ }
4491
+ },
4492
+ "hasDynamicHelp": false,
4493
+ "hiddenAliases": [],
4494
+ "id": "hardis:git:pull-requests:extract",
4495
+ "pluginAlias": "sfdx-hardis",
4496
+ "pluginName": "sfdx-hardis",
4497
+ "pluginType": "core",
4498
+ "strict": true,
4499
+ "enableJsonFlag": true,
4500
+ "title": "Extract pull requests",
4501
+ "requiresProject": true,
4502
+ "isESM": true,
4503
+ "relativePath": [
4504
+ "lib",
4505
+ "commands",
4506
+ "hardis",
4507
+ "git",
4508
+ "pull-requests",
4509
+ "extract.js"
4510
+ ],
4511
+ "aliasPermutations": [],
4512
+ "permutations": [
4513
+ "hardis:git:pull-requests:extract",
4514
+ "git:hardis:pull-requests:extract",
4515
+ "git:pull-requests:hardis:extract",
4516
+ "git:pull-requests:extract:hardis",
4517
+ "hardis:pull-requests:git:extract",
4518
+ "pull-requests:hardis:git:extract",
4519
+ "pull-requests:git:hardis:extract",
4520
+ "pull-requests:git:extract:hardis",
4521
+ "hardis:pull-requests:extract:git",
4522
+ "pull-requests:hardis:extract:git",
4523
+ "pull-requests:extract:hardis:git",
4524
+ "pull-requests:extract:git:hardis",
4525
+ "hardis:git:extract:pull-requests",
4526
+ "git:hardis:extract:pull-requests",
4527
+ "git:extract:hardis:pull-requests",
4528
+ "git:extract:pull-requests:hardis",
4529
+ "hardis:extract:git:pull-requests",
4530
+ "extract:hardis:git:pull-requests",
4531
+ "extract:git:hardis:pull-requests",
4532
+ "extract:git:pull-requests:hardis",
4533
+ "hardis:extract:pull-requests:git",
4534
+ "extract:hardis:pull-requests:git",
4535
+ "extract:pull-requests:hardis:git",
4536
+ "extract:pull-requests:git:hardis"
4537
+ ]
4538
+ },
4410
4539
  "hardis:doc:extract:permsetgroups": {
4411
4540
  "aliases": [],
4412
4541
  "args": {},
@@ -4597,135 +4726,6 @@
4597
4726
  "generate:plugin:doc:hardis"
4598
4727
  ]
4599
4728
  },
4600
- "hardis:git:pull-requests:extract": {
4601
- "aliases": [],
4602
- "args": {},
4603
- "description": "\n## Command Behavior\n\n**Extracts pull request information from your Git server based on specified filtering criteria.**\n\nThis command provides a powerful way to query and retrieve details about pull requests (or merge requests, depending on your Git provider) in your repository. It's highly useful for reporting, auditing, and analyzing development workflows.\n\nKey functionalities include:\n\n- **Target Branch Filtering:** You can filter pull requests by their target branch using the `--target-branch` flag. If not specified, the command will prompt you to select one.\n- **Status Filtering:** Filter pull requests by their status: `open`, `merged`, or `abandoned` using the `--status` flag. An interactive prompt is provided if no status is specified.\n- **Minimum Date Filtering:** Use the `--min-date` flag to retrieve pull requests created or updated after a specific date.\n- **CSV Output:** The extracted pull request data is generated into a CSV file, which can be used for further analysis in spreadsheet software.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves interacting with a Git provider's API:\n\n- **Git Provider Abstraction:** It uses the `GitProvider.getInstance(true)` to abstract away the specifics of different Git platforms (e.g., GitHub, GitLab, Azure DevOps). This ensures the command can work across various environments.\n- **API Calls:** The `gitProvider.listPullRequests()` method is called with a `prConstraint` object that encapsulates the filtering criteria (target branch, minimum date, status).\n- **Interactive Prompts:** The `prompts` library is used to interactively gather input from the user for the target branch and pull request status if they are not provided as command-line flags.\n- **Date Handling:** The `moment` library is used to parse and handle date inputs for the `--min-date` flag.\n- **CSV Generation:** The `generateCsvFile` utility is responsible for converting the retrieved pull request data into a CSV format, and `generateReportPath` determines the output file location.\n- **Error Handling:** It includes error handling for cases where a Git provider cannot be identified.\n</details>\n",
4604
- "examples": [
4605
- "$ sf hardis:git:pull-requests:extract",
4606
- "$ sf hardis:git:pull-requests:extract --target-branch main --status merged"
4607
- ],
4608
- "flags": {
4609
- "json": {
4610
- "description": "Format output as json.",
4611
- "helpGroup": "GLOBAL",
4612
- "name": "json",
4613
- "allowNo": false,
4614
- "type": "boolean"
4615
- },
4616
- "flags-dir": {
4617
- "helpGroup": "GLOBAL",
4618
- "name": "flags-dir",
4619
- "summary": "Import flag values from a directory.",
4620
- "hasDynamicHelp": false,
4621
- "multiple": false,
4622
- "type": "option"
4623
- },
4624
- "target-branch": {
4625
- "char": "t",
4626
- "description": "Target branch of PRs",
4627
- "name": "target-branch",
4628
- "hasDynamicHelp": false,
4629
- "multiple": false,
4630
- "type": "option"
4631
- },
4632
- "status": {
4633
- "char": "x",
4634
- "description": "Status of the PR",
4635
- "name": "status",
4636
- "hasDynamicHelp": false,
4637
- "multiple": false,
4638
- "options": [
4639
- "open",
4640
- "merged",
4641
- "abandoned"
4642
- ],
4643
- "type": "option"
4644
- },
4645
- "min-date": {
4646
- "char": "m",
4647
- "description": "Minimum date for PR",
4648
- "name": "min-date",
4649
- "hasDynamicHelp": false,
4650
- "multiple": false,
4651
- "type": "option"
4652
- },
4653
- "outputfile": {
4654
- "char": "f",
4655
- "description": "Force the path and name of output report file. Must end with .csv",
4656
- "name": "outputfile",
4657
- "hasDynamicHelp": false,
4658
- "multiple": false,
4659
- "type": "option"
4660
- },
4661
- "debug": {
4662
- "char": "d",
4663
- "description": "Activate debug mode (more logs)",
4664
- "name": "debug",
4665
- "allowNo": false,
4666
- "type": "boolean"
4667
- },
4668
- "websocket": {
4669
- "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
4670
- "name": "websocket",
4671
- "hasDynamicHelp": false,
4672
- "multiple": false,
4673
- "type": "option"
4674
- },
4675
- "skipauth": {
4676
- "description": "Skip authentication check when a default username is required",
4677
- "name": "skipauth",
4678
- "allowNo": false,
4679
- "type": "boolean"
4680
- }
4681
- },
4682
- "hasDynamicHelp": false,
4683
- "hiddenAliases": [],
4684
- "id": "hardis:git:pull-requests:extract",
4685
- "pluginAlias": "sfdx-hardis",
4686
- "pluginName": "sfdx-hardis",
4687
- "pluginType": "core",
4688
- "strict": true,
4689
- "enableJsonFlag": true,
4690
- "title": "Extract pull requests",
4691
- "requiresProject": true,
4692
- "isESM": true,
4693
- "relativePath": [
4694
- "lib",
4695
- "commands",
4696
- "hardis",
4697
- "git",
4698
- "pull-requests",
4699
- "extract.js"
4700
- ],
4701
- "aliasPermutations": [],
4702
- "permutations": [
4703
- "hardis:git:pull-requests:extract",
4704
- "git:hardis:pull-requests:extract",
4705
- "git:pull-requests:hardis:extract",
4706
- "git:pull-requests:extract:hardis",
4707
- "hardis:pull-requests:git:extract",
4708
- "pull-requests:hardis:git:extract",
4709
- "pull-requests:git:hardis:extract",
4710
- "pull-requests:git:extract:hardis",
4711
- "hardis:pull-requests:extract:git",
4712
- "pull-requests:hardis:extract:git",
4713
- "pull-requests:extract:hardis:git",
4714
- "pull-requests:extract:git:hardis",
4715
- "hardis:git:extract:pull-requests",
4716
- "git:hardis:extract:pull-requests",
4717
- "git:extract:hardis:pull-requests",
4718
- "git:extract:pull-requests:hardis",
4719
- "hardis:extract:git:pull-requests",
4720
- "extract:hardis:git:pull-requests",
4721
- "extract:git:hardis:pull-requests",
4722
- "extract:git:pull-requests:hardis",
4723
- "hardis:extract:pull-requests:git",
4724
- "extract:hardis:pull-requests:git",
4725
- "extract:pull-requests:hardis:git",
4726
- "extract:pull-requests:git:hardis"
4727
- ]
4728
- },
4729
4729
  "hardis:org:community:update": {
4730
4730
  "aliases": [],
4731
4731
  "args": {},
@@ -5751,6 +5751,121 @@
5751
5751
  "import:files:org:hardis"
5752
5752
  ]
5753
5753
  },
5754
+ "hardis:org:fix:listviewmine": {
5755
+ "aliases": [],
5756
+ "args": {},
5757
+ "description": "Fix listviews whose scope Mine has been replaced by Everything\n\n[![Invalid scope:Mine, not allowed ? Deploy your ListViews anyway !](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-invalid-scope-mine.jpg)](https://nicolas.vuillamy.fr/invalid-scope-mine-not-allowed-deploy-your-listviews-anyway-443aceca8ac7)\n\nList of ListViews can be:\n\n- read from .sfdx-hardis.yml file in property **listViewsToSetToMine**\n- sent in argument listviews\n\nNote: property **listViewsToSetToMine** can be auto-generated by command hardis:work:save if .sfdx-hardis.yml contains the following configuration\n\n```yaml\nautoCleanTypes:\n - listViewsMine\n```\n\n- Example of sfdx-hardis.yml property `listViewsToSetToMine`:\n\n```yaml\nlistViewsToSetToMine:\n - \"force-app/main/default/objects/Operation__c/listViews/MyCurrentOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Operation__c/listViews/MyFinalizedOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/Default_Opportunity_Pipeline.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MyCurrentSubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MySubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Account/listViews/MyActivePartners.listView-meta.xml\"\n```\n\n- If manually written, this could also be:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to run this command from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n",
5758
+ "examples": [
5759
+ "$ sf hardis:org:fix:listviewmine",
5760
+ "$ sf hardis:org:fix:listviewmine --listviews Opportunity:MySubscriptions,Account:MyActivePartners"
5761
+ ],
5762
+ "flags": {
5763
+ "json": {
5764
+ "description": "Format output as json.",
5765
+ "helpGroup": "GLOBAL",
5766
+ "name": "json",
5767
+ "allowNo": false,
5768
+ "type": "boolean"
5769
+ },
5770
+ "flags-dir": {
5771
+ "helpGroup": "GLOBAL",
5772
+ "name": "flags-dir",
5773
+ "summary": "Import flag values from a directory.",
5774
+ "hasDynamicHelp": false,
5775
+ "multiple": false,
5776
+ "type": "option"
5777
+ },
5778
+ "listviews": {
5779
+ "char": "l",
5780
+ "description": "Comma-separated list of listviews following format Object:ListViewName\nExample: Contact:MyContacts,Contact:MyActiveContacts,Opportunity:MYClosedOpportunities",
5781
+ "name": "listviews",
5782
+ "hasDynamicHelp": false,
5783
+ "multiple": false,
5784
+ "type": "option"
5785
+ },
5786
+ "debug": {
5787
+ "char": "d",
5788
+ "description": "Activate debug mode (more logs)",
5789
+ "name": "debug",
5790
+ "allowNo": false,
5791
+ "type": "boolean"
5792
+ },
5793
+ "websocket": {
5794
+ "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
5795
+ "name": "websocket",
5796
+ "hasDynamicHelp": false,
5797
+ "multiple": false,
5798
+ "type": "option"
5799
+ },
5800
+ "skipauth": {
5801
+ "description": "Skip authentication check when a default username is required",
5802
+ "name": "skipauth",
5803
+ "allowNo": false,
5804
+ "type": "boolean"
5805
+ },
5806
+ "target-org": {
5807
+ "aliases": [
5808
+ "targetusername",
5809
+ "u"
5810
+ ],
5811
+ "char": "o",
5812
+ "deprecateAliases": true,
5813
+ "name": "target-org",
5814
+ "noCacheDefault": true,
5815
+ "required": true,
5816
+ "summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
5817
+ "hasDynamicHelp": true,
5818
+ "multiple": false,
5819
+ "type": "option"
5820
+ }
5821
+ },
5822
+ "hasDynamicHelp": true,
5823
+ "hiddenAliases": [],
5824
+ "id": "hardis:org:fix:listviewmine",
5825
+ "pluginAlias": "sfdx-hardis",
5826
+ "pluginName": "sfdx-hardis",
5827
+ "pluginType": "core",
5828
+ "strict": true,
5829
+ "enableJsonFlag": true,
5830
+ "title": "Fix listviews with ",
5831
+ "requiresProject": true,
5832
+ "isESM": true,
5833
+ "relativePath": [
5834
+ "lib",
5835
+ "commands",
5836
+ "hardis",
5837
+ "org",
5838
+ "fix",
5839
+ "listviewmine.js"
5840
+ ],
5841
+ "aliasPermutations": [],
5842
+ "permutations": [
5843
+ "hardis:org:fix:listviewmine",
5844
+ "org:hardis:fix:listviewmine",
5845
+ "org:fix:hardis:listviewmine",
5846
+ "org:fix:listviewmine:hardis",
5847
+ "hardis:fix:org:listviewmine",
5848
+ "fix:hardis:org:listviewmine",
5849
+ "fix:org:hardis:listviewmine",
5850
+ "fix:org:listviewmine:hardis",
5851
+ "hardis:fix:listviewmine:org",
5852
+ "fix:hardis:listviewmine:org",
5853
+ "fix:listviewmine:hardis:org",
5854
+ "fix:listviewmine:org:hardis",
5855
+ "hardis:org:listviewmine:fix",
5856
+ "org:hardis:listviewmine:fix",
5857
+ "org:listviewmine:hardis:fix",
5858
+ "org:listviewmine:fix:hardis",
5859
+ "hardis:listviewmine:org:fix",
5860
+ "listviewmine:hardis:org:fix",
5861
+ "listviewmine:org:hardis:fix",
5862
+ "listviewmine:org:fix:hardis",
5863
+ "hardis:listviewmine:fix:org",
5864
+ "listviewmine:hardis:fix:org",
5865
+ "listviewmine:fix:hardis:org",
5866
+ "listviewmine:fix:org:hardis"
5867
+ ]
5868
+ },
5754
5869
  "hardis:org:diagnose:audittrail": {
5755
5870
  "aliases": [],
5756
5871
  "args": {},
@@ -6900,121 +7015,6 @@
6900
7015
  "unusedusers:diagnose:org:hardis"
6901
7016
  ]
6902
7017
  },
6903
- "hardis:org:fix:listviewmine": {
6904
- "aliases": [],
6905
- "args": {},
6906
- "description": "Fix listviews whose scope Mine has been replaced by Everything\n\n[![Invalid scope:Mine, not allowed ? Deploy your ListViews anyway !](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-invalid-scope-mine.jpg)](https://nicolas.vuillamy.fr/invalid-scope-mine-not-allowed-deploy-your-listviews-anyway-443aceca8ac7)\n\nList of ListViews can be:\n\n- read from .sfdx-hardis.yml file in property **listViewsToSetToMine**\n- sent in argument listviews\n\nNote: property **listViewsToSetToMine** can be auto-generated by command hardis:work:save if .sfdx-hardis.yml contains the following configuration\n\n```yaml\nautoCleanTypes:\n - listViewsMine\n```\n\n- Example of sfdx-hardis.yml property `listViewsToSetToMine`:\n\n```yaml\nlistViewsToSetToMine:\n - \"force-app/main/default/objects/Operation__c/listViews/MyCurrentOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Operation__c/listViews/MyFinalizedOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/Default_Opportunity_Pipeline.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MyCurrentSubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MySubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Account/listViews/MyActivePartners.listView-meta.xml\"\n```\n\n- If manually written, this could also be:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to run this command from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n",
6907
- "examples": [
6908
- "$ sf hardis:org:fix:listviewmine",
6909
- "$ sf hardis:org:fix:listviewmine --listviews Opportunity:MySubscriptions,Account:MyActivePartners"
6910
- ],
6911
- "flags": {
6912
- "json": {
6913
- "description": "Format output as json.",
6914
- "helpGroup": "GLOBAL",
6915
- "name": "json",
6916
- "allowNo": false,
6917
- "type": "boolean"
6918
- },
6919
- "flags-dir": {
6920
- "helpGroup": "GLOBAL",
6921
- "name": "flags-dir",
6922
- "summary": "Import flag values from a directory.",
6923
- "hasDynamicHelp": false,
6924
- "multiple": false,
6925
- "type": "option"
6926
- },
6927
- "listviews": {
6928
- "char": "l",
6929
- "description": "Comma-separated list of listviews following format Object:ListViewName\nExample: Contact:MyContacts,Contact:MyActiveContacts,Opportunity:MYClosedOpportunities",
6930
- "name": "listviews",
6931
- "hasDynamicHelp": false,
6932
- "multiple": false,
6933
- "type": "option"
6934
- },
6935
- "debug": {
6936
- "char": "d",
6937
- "description": "Activate debug mode (more logs)",
6938
- "name": "debug",
6939
- "allowNo": false,
6940
- "type": "boolean"
6941
- },
6942
- "websocket": {
6943
- "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
6944
- "name": "websocket",
6945
- "hasDynamicHelp": false,
6946
- "multiple": false,
6947
- "type": "option"
6948
- },
6949
- "skipauth": {
6950
- "description": "Skip authentication check when a default username is required",
6951
- "name": "skipauth",
6952
- "allowNo": false,
6953
- "type": "boolean"
6954
- },
6955
- "target-org": {
6956
- "aliases": [
6957
- "targetusername",
6958
- "u"
6959
- ],
6960
- "char": "o",
6961
- "deprecateAliases": true,
6962
- "name": "target-org",
6963
- "noCacheDefault": true,
6964
- "required": true,
6965
- "summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
6966
- "hasDynamicHelp": true,
6967
- "multiple": false,
6968
- "type": "option"
6969
- }
6970
- },
6971
- "hasDynamicHelp": true,
6972
- "hiddenAliases": [],
6973
- "id": "hardis:org:fix:listviewmine",
6974
- "pluginAlias": "sfdx-hardis",
6975
- "pluginName": "sfdx-hardis",
6976
- "pluginType": "core",
6977
- "strict": true,
6978
- "enableJsonFlag": true,
6979
- "title": "Fix listviews with ",
6980
- "requiresProject": true,
6981
- "isESM": true,
6982
- "relativePath": [
6983
- "lib",
6984
- "commands",
6985
- "hardis",
6986
- "org",
6987
- "fix",
6988
- "listviewmine.js"
6989
- ],
6990
- "aliasPermutations": [],
6991
- "permutations": [
6992
- "hardis:org:fix:listviewmine",
6993
- "org:hardis:fix:listviewmine",
6994
- "org:fix:hardis:listviewmine",
6995
- "org:fix:listviewmine:hardis",
6996
- "hardis:fix:org:listviewmine",
6997
- "fix:hardis:org:listviewmine",
6998
- "fix:org:hardis:listviewmine",
6999
- "fix:org:listviewmine:hardis",
7000
- "hardis:fix:listviewmine:org",
7001
- "fix:hardis:listviewmine:org",
7002
- "fix:listviewmine:hardis:org",
7003
- "fix:listviewmine:org:hardis",
7004
- "hardis:org:listviewmine:fix",
7005
- "org:hardis:listviewmine:fix",
7006
- "org:listviewmine:hardis:fix",
7007
- "org:listviewmine:fix:hardis",
7008
- "hardis:listviewmine:org:fix",
7009
- "listviewmine:hardis:org:fix",
7010
- "listviewmine:org:hardis:fix",
7011
- "listviewmine:org:fix:hardis",
7012
- "hardis:listviewmine:fix:org",
7013
- "listviewmine:hardis:fix:org",
7014
- "listviewmine:fix:hardis:org",
7015
- "listviewmine:fix:org:hardis"
7016
- ]
7017
- },
7018
7018
  "hardis:org:generate:packagexmlfull": {
7019
7019
  "aliases": [],
7020
7020
  "args": {},
@@ -9642,6 +9642,109 @@
9642
9642
  "auth:configure:project:hardis"
9643
9643
  ]
9644
9644
  },
9645
+ "hardis:project:convert:profilestopermsets": {
9646
+ "aliases": [],
9647
+ "args": {},
9648
+ "description": "\n## Command Behavior\n\n**Converts existing Salesforce Profiles into Permission Sets, facilitating a more granular and recommended security model.**\n\nThis command helps in migrating permissions from Profiles to Permission Sets, which is a best practice for managing user access in Salesforce. It creates a new Permission Set for each specified Profile, adopting a naming convention of `PS_PROFILENAME`.\n\nKey functionalities:\n\n- **Profile to Permission Set Conversion:** Automatically extracts permissions from a Profile and creates a corresponding Permission Set.\n- **Naming Convention:** New Permission Sets are named with a `PS_` prefix followed by the Profile name (e.g., `PS_Standard_User`).\n- **Exclusion Filter:** Allows you to exclude specific Profiles from the conversion process using the `--except` flag.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **External Plugin Integration:** It relies on the `shane-sfdx-plugins` (specifically the `sf shane:profile:convert` command) to perform the actual conversion.\n- **File System Scan:** It reads the contents of the `force-app/main/default/profiles` directory to identify all available Profile metadata files.\n- **Command Execution:** For each identified Profile (that is not excluded), it constructs and executes the `sf shane:profile:convert` command with the appropriate Profile name and desired Permission Set name.\n- **Error Handling:** Includes basic error handling for the external command execution.\n</details>\n",
9649
+ "examples": [
9650
+ "$ sf hardis:project:convert:profilestopermsets"
9651
+ ],
9652
+ "flags": {
9653
+ "json": {
9654
+ "description": "Format output as json.",
9655
+ "helpGroup": "GLOBAL",
9656
+ "name": "json",
9657
+ "allowNo": false,
9658
+ "type": "boolean"
9659
+ },
9660
+ "flags-dir": {
9661
+ "helpGroup": "GLOBAL",
9662
+ "name": "flags-dir",
9663
+ "summary": "Import flag values from a directory.",
9664
+ "hasDynamicHelp": false,
9665
+ "multiple": false,
9666
+ "type": "option"
9667
+ },
9668
+ "except": {
9669
+ "char": "e",
9670
+ "description": "List of filters",
9671
+ "name": "except",
9672
+ "default": [],
9673
+ "hasDynamicHelp": false,
9674
+ "multiple": true,
9675
+ "type": "option"
9676
+ },
9677
+ "debug": {
9678
+ "char": "d",
9679
+ "description": "Activate debug mode (more logs)",
9680
+ "name": "debug",
9681
+ "allowNo": false,
9682
+ "type": "boolean"
9683
+ },
9684
+ "websocket": {
9685
+ "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
9686
+ "name": "websocket",
9687
+ "hasDynamicHelp": false,
9688
+ "multiple": false,
9689
+ "type": "option"
9690
+ },
9691
+ "skipauth": {
9692
+ "description": "Skip authentication check when a default username is required",
9693
+ "name": "skipauth",
9694
+ "allowNo": false,
9695
+ "type": "boolean"
9696
+ }
9697
+ },
9698
+ "hasDynamicHelp": false,
9699
+ "hiddenAliases": [],
9700
+ "id": "hardis:project:convert:profilestopermsets",
9701
+ "pluginAlias": "sfdx-hardis",
9702
+ "pluginName": "sfdx-hardis",
9703
+ "pluginType": "core",
9704
+ "strict": true,
9705
+ "enableJsonFlag": true,
9706
+ "title": "Convert Profiles into Permission Sets",
9707
+ "requiresProject": true,
9708
+ "requiresSfdxPlugins": [
9709
+ "shane-sfdx-plugins"
9710
+ ],
9711
+ "isESM": true,
9712
+ "relativePath": [
9713
+ "lib",
9714
+ "commands",
9715
+ "hardis",
9716
+ "project",
9717
+ "convert",
9718
+ "profilestopermsets.js"
9719
+ ],
9720
+ "aliasPermutations": [],
9721
+ "permutations": [
9722
+ "hardis:project:convert:profilestopermsets",
9723
+ "project:hardis:convert:profilestopermsets",
9724
+ "project:convert:hardis:profilestopermsets",
9725
+ "project:convert:profilestopermsets:hardis",
9726
+ "hardis:convert:project:profilestopermsets",
9727
+ "convert:hardis:project:profilestopermsets",
9728
+ "convert:project:hardis:profilestopermsets",
9729
+ "convert:project:profilestopermsets:hardis",
9730
+ "hardis:convert:profilestopermsets:project",
9731
+ "convert:hardis:profilestopermsets:project",
9732
+ "convert:profilestopermsets:hardis:project",
9733
+ "convert:profilestopermsets:project:hardis",
9734
+ "hardis:project:profilestopermsets:convert",
9735
+ "project:hardis:profilestopermsets:convert",
9736
+ "project:profilestopermsets:hardis:convert",
9737
+ "project:profilestopermsets:convert:hardis",
9738
+ "hardis:profilestopermsets:project:convert",
9739
+ "profilestopermsets:hardis:project:convert",
9740
+ "profilestopermsets:project:hardis:convert",
9741
+ "profilestopermsets:project:convert:hardis",
9742
+ "hardis:profilestopermsets:convert:project",
9743
+ "profilestopermsets:hardis:convert:project",
9744
+ "profilestopermsets:convert:hardis:project",
9745
+ "profilestopermsets:convert:project:hardis"
9746
+ ]
9747
+ },
9645
9748
  "hardis:project:clean:emptyitems": {
9646
9749
  "aliases": [],
9647
9750
  "args": {},
@@ -11127,12 +11230,12 @@
11127
11230
  "xml:clean:project:hardis"
11128
11231
  ]
11129
11232
  },
11130
- "hardis:project:convert:profilestopermsets": {
11233
+ "hardis:project:fix:profiletabs": {
11131
11234
  "aliases": [],
11132
11235
  "args": {},
11133
- "description": "\n## Command Behavior\n\n**Converts existing Salesforce Profiles into Permission Sets, facilitating a more granular and recommended security model.**\n\nThis command helps in migrating permissions from Profiles to Permission Sets, which is a best practice for managing user access in Salesforce. It creates a new Permission Set for each specified Profile, adopting a naming convention of `PS_PROFILENAME`.\n\nKey functionalities:\n\n- **Profile to Permission Set Conversion:** Automatically extracts permissions from a Profile and creates a corresponding Permission Set.\n- **Naming Convention:** New Permission Sets are named with a `PS_` prefix followed by the Profile name (e.g., `PS_Standard_User`).\n- **Exclusion Filter:** Allows you to exclude specific Profiles from the conversion process using the `--except` flag.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **External Plugin Integration:** It relies on the `shane-sfdx-plugins` (specifically the `sf shane:profile:convert` command) to perform the actual conversion.\n- **File System Scan:** It reads the contents of the `force-app/main/default/profiles` directory to identify all available Profile metadata files.\n- **Command Execution:** For each identified Profile (that is not excluded), it constructs and executes the `sf shane:profile:convert` command with the appropriate Profile name and desired Permission Set name.\n- **Error Handling:** Includes basic error handling for the external command execution.\n</details>\n",
11236
+ "description": "\n## Command Behavior\n\n**Interactively updates tab visibility settings in Salesforce profiles, addressing a common issue where tab visibilities are not correctly retrieved by `sf project retrieve start`.**\n\nThis command provides a user-friendly interface to manage tab settings within your profile XML files, ensuring that your local project accurately reflects the intended tab configurations in your Salesforce org.\n\nKey functionalities:\n\n- **Interactive Tab Selection:** Displays a multi-select menu of all available tabs in your org, allowing you to choose which tabs to update.\n- **Visibility Control:** Lets you set the visibility for the selected tabs to either `DefaultOn` (Visible) or `Hidden`.\n- **Profile Selection:** Presents a multi-select menu of all .profile-meta.xml files in your project, allowing you to apply the tab visibility changes to specific profiles.\n- **XML Updates:** Modifies the <tabVisibilities> section of the selected profile XML files to reflect the chosen tab settings. If a tab visibility setting already exists for a selected tab, it will be updated; otherwise, a new one will be added.\n- **Sorted Output:** The <tabVisibilities> in the updated profile XML files are sorted alphabetically for consistency and readability.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Queries (Tooling API):** It queries the `TabDefinition` object using `soqlQueryTooling` to retrieve a list of all available tabs in the target org.\n- **File Discovery:** Uses `glob` to find all .profile-meta.xml files within the specified project path.\n- **Interactive Prompts:** Leverages the `prompts` library to create interactive menus for selecting tabs, visibility settings, and profiles.\n- **XML Parsing and Manipulation:** Uses `parseXmlFile` to read the content of profile XML files and `writeXmlFile` to write the modified content back. It manipulates the `tabVisibilities` array within the parsed XML to add or update tab settings.\n- **Array Sorting:** Employs the `sort-array` library to sort the `tabVisibilities` alphabetically by tab name.\n- **Logging:** Provides feedback to the user about which profiles have been updated and a summary of the changes.\n</details>\n",
11134
11237
  "examples": [
11135
- "$ sf hardis:project:convert:profilestopermsets"
11238
+ "$ sf hardis:project:fix:profiletabs"
11136
11239
  ],
11137
11240
  "flags": {
11138
11241
  "json": {
@@ -11150,13 +11253,13 @@
11150
11253
  "multiple": false,
11151
11254
  "type": "option"
11152
11255
  },
11153
- "except": {
11154
- "char": "e",
11155
- "description": "List of filters",
11156
- "name": "except",
11157
- "default": [],
11256
+ "path": {
11257
+ "char": "p",
11258
+ "description": "Root folder",
11259
+ "name": "path",
11260
+ "default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
11158
11261
  "hasDynamicHelp": false,
11159
- "multiple": true,
11262
+ "multiple": false,
11160
11263
  "type": "option"
11161
11264
  },
11162
11265
  "debug": {
@@ -11178,56 +11281,168 @@
11178
11281
  "name": "skipauth",
11179
11282
  "allowNo": false,
11180
11283
  "type": "boolean"
11284
+ },
11285
+ "target-org": {
11286
+ "aliases": [
11287
+ "targetusername",
11288
+ "u"
11289
+ ],
11290
+ "char": "o",
11291
+ "deprecateAliases": true,
11292
+ "name": "target-org",
11293
+ "noCacheDefault": true,
11294
+ "required": true,
11295
+ "summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
11296
+ "hasDynamicHelp": true,
11297
+ "multiple": false,
11298
+ "type": "option"
11181
11299
  }
11182
11300
  },
11183
- "hasDynamicHelp": false,
11301
+ "hasDynamicHelp": true,
11184
11302
  "hiddenAliases": [],
11185
- "id": "hardis:project:convert:profilestopermsets",
11303
+ "id": "hardis:project:fix:profiletabs",
11186
11304
  "pluginAlias": "sfdx-hardis",
11187
11305
  "pluginName": "sfdx-hardis",
11188
11306
  "pluginType": "core",
11189
11307
  "strict": true,
11190
11308
  "enableJsonFlag": true,
11191
- "title": "Convert Profiles into Permission Sets",
11309
+ "title": "Fix profiles to add tabs that are not retrieved by SF CLI",
11192
11310
  "requiresProject": true,
11193
- "requiresSfdxPlugins": [
11194
- "shane-sfdx-plugins"
11195
- ],
11196
11311
  "isESM": true,
11197
11312
  "relativePath": [
11198
11313
  "lib",
11199
11314
  "commands",
11200
11315
  "hardis",
11201
11316
  "project",
11202
- "convert",
11203
- "profilestopermsets.js"
11317
+ "fix",
11318
+ "profiletabs.js"
11204
11319
  ],
11205
11320
  "aliasPermutations": [],
11206
11321
  "permutations": [
11207
- "hardis:project:convert:profilestopermsets",
11208
- "project:hardis:convert:profilestopermsets",
11209
- "project:convert:hardis:profilestopermsets",
11210
- "project:convert:profilestopermsets:hardis",
11211
- "hardis:convert:project:profilestopermsets",
11212
- "convert:hardis:project:profilestopermsets",
11213
- "convert:project:hardis:profilestopermsets",
11214
- "convert:project:profilestopermsets:hardis",
11215
- "hardis:convert:profilestopermsets:project",
11216
- "convert:hardis:profilestopermsets:project",
11217
- "convert:profilestopermsets:hardis:project",
11218
- "convert:profilestopermsets:project:hardis",
11219
- "hardis:project:profilestopermsets:convert",
11220
- "project:hardis:profilestopermsets:convert",
11221
- "project:profilestopermsets:hardis:convert",
11222
- "project:profilestopermsets:convert:hardis",
11223
- "hardis:profilestopermsets:project:convert",
11224
- "profilestopermsets:hardis:project:convert",
11225
- "profilestopermsets:project:hardis:convert",
11226
- "profilestopermsets:project:convert:hardis",
11227
- "hardis:profilestopermsets:convert:project",
11228
- "profilestopermsets:hardis:convert:project",
11229
- "profilestopermsets:convert:hardis:project",
11230
- "profilestopermsets:convert:project:hardis"
11322
+ "hardis:project:fix:profiletabs",
11323
+ "project:hardis:fix:profiletabs",
11324
+ "project:fix:hardis:profiletabs",
11325
+ "project:fix:profiletabs:hardis",
11326
+ "hardis:fix:project:profiletabs",
11327
+ "fix:hardis:project:profiletabs",
11328
+ "fix:project:hardis:profiletabs",
11329
+ "fix:project:profiletabs:hardis",
11330
+ "hardis:fix:profiletabs:project",
11331
+ "fix:hardis:profiletabs:project",
11332
+ "fix:profiletabs:hardis:project",
11333
+ "fix:profiletabs:project:hardis",
11334
+ "hardis:project:profiletabs:fix",
11335
+ "project:hardis:profiletabs:fix",
11336
+ "project:profiletabs:hardis:fix",
11337
+ "project:profiletabs:fix:hardis",
11338
+ "hardis:profiletabs:project:fix",
11339
+ "profiletabs:hardis:project:fix",
11340
+ "profiletabs:project:hardis:fix",
11341
+ "profiletabs:project:fix:hardis",
11342
+ "hardis:profiletabs:fix:project",
11343
+ "profiletabs:hardis:fix:project",
11344
+ "profiletabs:fix:hardis:project",
11345
+ "profiletabs:fix:project:hardis"
11346
+ ]
11347
+ },
11348
+ "hardis:project:fix:v53flexipages": {
11349
+ "aliases": [],
11350
+ "args": {},
11351
+ "description": "\n## Command Behavior\n\n**Fixes Salesforce FlexiPages for compatibility with API Version 53.0 (Winter '22 release) by adding missing identifiers to component instances.**\n\nSalesforce introduced a change in API Version 53.0 that requires `identifier` tags within `componentInstance` and `fieldInstance` elements in FlexiPage metadata. If these identifiers are missing, deployments to orgs with API version 53.0 or higher will fail. This command automates the process of adding these missing identifiers, ensuring your FlexiPages remain deployable.\n\nKey functionalities:\n\n- **Targeted FlexiPage Processing:** Scans all .flexipage-meta.xml files within the specified root folder (defaults to current working directory).\n- **Identifier Injection:** Inserts a unique `identifier` tag (e.g., `SFDX_HARDIS_REPLACEMENT_ID`) into `componentInstance` and `fieldInstance` elements that lack one.\n\n**Important Note:** After running this command, ensure you update your `apiVersion` to `53.0` (or higher) in your `package.xml` and `sfdx-project.json` files.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **File Discovery:** Uses `glob` to find all .flexipage-meta.xml files.\n- **Content Reading:** Reads the XML content of each FlexiPage file.\n- **Regular Expression Replacement:** Employs a set of regular expressions to identify specific XML patterns (componentName.../componentName.../componentInstance, componentName.../componentName.../visibilityRule, fieldItem.../fieldItem.../fieldInstance) that are missing the `identifier` tag.\n- **Dynamic ID Generation:** For each match, it generates a unique identifier (e.g., `sfdxHardisIdX`) and injects it into the XML structure.\n- **File Writing:** If changes are made, the modified XML content is written back to the FlexiPage file using `fs.writeFile`.\n- **Logging:** Provides messages about which FlexiPages are being processed and a summary of the total number of identifiers added.\n</details>\n",
11352
+ "examples": [
11353
+ "$ sf hardis:project:fix:v53flexipages"
11354
+ ],
11355
+ "flags": {
11356
+ "json": {
11357
+ "description": "Format output as json.",
11358
+ "helpGroup": "GLOBAL",
11359
+ "name": "json",
11360
+ "allowNo": false,
11361
+ "type": "boolean"
11362
+ },
11363
+ "flags-dir": {
11364
+ "helpGroup": "GLOBAL",
11365
+ "name": "flags-dir",
11366
+ "summary": "Import flag values from a directory.",
11367
+ "hasDynamicHelp": false,
11368
+ "multiple": false,
11369
+ "type": "option"
11370
+ },
11371
+ "path": {
11372
+ "char": "p",
11373
+ "description": "Root folder",
11374
+ "name": "path",
11375
+ "default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
11376
+ "hasDynamicHelp": false,
11377
+ "multiple": false,
11378
+ "type": "option"
11379
+ },
11380
+ "debug": {
11381
+ "char": "d",
11382
+ "description": "Activate debug mode (more logs)",
11383
+ "name": "debug",
11384
+ "allowNo": false,
11385
+ "type": "boolean"
11386
+ },
11387
+ "websocket": {
11388
+ "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
11389
+ "name": "websocket",
11390
+ "hasDynamicHelp": false,
11391
+ "multiple": false,
11392
+ "type": "option"
11393
+ },
11394
+ "skipauth": {
11395
+ "description": "Skip authentication check when a default username is required",
11396
+ "name": "skipauth",
11397
+ "allowNo": false,
11398
+ "type": "boolean"
11399
+ }
11400
+ },
11401
+ "hasDynamicHelp": false,
11402
+ "hiddenAliases": [],
11403
+ "id": "hardis:project:fix:v53flexipages",
11404
+ "pluginAlias": "sfdx-hardis",
11405
+ "pluginName": "sfdx-hardis",
11406
+ "pluginType": "core",
11407
+ "strict": true,
11408
+ "enableJsonFlag": true,
11409
+ "title": "Fix flexipages for v53",
11410
+ "requiresProject": true,
11411
+ "isESM": true,
11412
+ "relativePath": [
11413
+ "lib",
11414
+ "commands",
11415
+ "hardis",
11416
+ "project",
11417
+ "fix",
11418
+ "v53flexipages.js"
11419
+ ],
11420
+ "aliasPermutations": [],
11421
+ "permutations": [
11422
+ "hardis:project:fix:v53flexipages",
11423
+ "project:hardis:fix:v53flexipages",
11424
+ "project:fix:hardis:v53flexipages",
11425
+ "project:fix:v53flexipages:hardis",
11426
+ "hardis:fix:project:v53flexipages",
11427
+ "fix:hardis:project:v53flexipages",
11428
+ "fix:project:hardis:v53flexipages",
11429
+ "fix:project:v53flexipages:hardis",
11430
+ "hardis:fix:v53flexipages:project",
11431
+ "fix:hardis:v53flexipages:project",
11432
+ "fix:v53flexipages:hardis:project",
11433
+ "fix:v53flexipages:project:hardis",
11434
+ "hardis:project:v53flexipages:fix",
11435
+ "project:hardis:v53flexipages:fix",
11436
+ "project:v53flexipages:hardis:fix",
11437
+ "project:v53flexipages:fix:hardis",
11438
+ "hardis:v53flexipages:project:fix",
11439
+ "v53flexipages:hardis:project:fix",
11440
+ "v53flexipages:project:hardis:fix",
11441
+ "v53flexipages:project:fix:hardis",
11442
+ "hardis:v53flexipages:fix:project",
11443
+ "v53flexipages:hardis:fix:project",
11444
+ "v53flexipages:fix:hardis:project",
11445
+ "v53flexipages:fix:project:hardis"
11231
11446
  ]
11232
11447
  },
11233
11448
  "hardis:project:deploy:notify": {
@@ -12405,221 +12620,6 @@
12405
12620
  "validate:deploy:project:hardis"
12406
12621
  ]
12407
12622
  },
12408
- "hardis:project:fix:profiletabs": {
12409
- "aliases": [],
12410
- "args": {},
12411
- "description": "\n## Command Behavior\n\n**Interactively updates tab visibility settings in Salesforce profiles, addressing a common issue where tab visibilities are not correctly retrieved by `sf project retrieve start`.**\n\nThis command provides a user-friendly interface to manage tab settings within your profile XML files, ensuring that your local project accurately reflects the intended tab configurations in your Salesforce org.\n\nKey functionalities:\n\n- **Interactive Tab Selection:** Displays a multi-select menu of all available tabs in your org, allowing you to choose which tabs to update.\n- **Visibility Control:** Lets you set the visibility for the selected tabs to either `DefaultOn` (Visible) or `Hidden`.\n- **Profile Selection:** Presents a multi-select menu of all .profile-meta.xml files in your project, allowing you to apply the tab visibility changes to specific profiles.\n- **XML Updates:** Modifies the <tabVisibilities> section of the selected profile XML files to reflect the chosen tab settings. If a tab visibility setting already exists for a selected tab, it will be updated; otherwise, a new one will be added.\n- **Sorted Output:** The <tabVisibilities> in the updated profile XML files are sorted alphabetically for consistency and readability.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Queries (Tooling API):** It queries the `TabDefinition` object using `soqlQueryTooling` to retrieve a list of all available tabs in the target org.\n- **File Discovery:** Uses `glob` to find all .profile-meta.xml files within the specified project path.\n- **Interactive Prompts:** Leverages the `prompts` library to create interactive menus for selecting tabs, visibility settings, and profiles.\n- **XML Parsing and Manipulation:** Uses `parseXmlFile` to read the content of profile XML files and `writeXmlFile` to write the modified content back. It manipulates the `tabVisibilities` array within the parsed XML to add or update tab settings.\n- **Array Sorting:** Employs the `sort-array` library to sort the `tabVisibilities` alphabetically by tab name.\n- **Logging:** Provides feedback to the user about which profiles have been updated and a summary of the changes.\n</details>\n",
12412
- "examples": [
12413
- "$ sf hardis:project:fix:profiletabs"
12414
- ],
12415
- "flags": {
12416
- "json": {
12417
- "description": "Format output as json.",
12418
- "helpGroup": "GLOBAL",
12419
- "name": "json",
12420
- "allowNo": false,
12421
- "type": "boolean"
12422
- },
12423
- "flags-dir": {
12424
- "helpGroup": "GLOBAL",
12425
- "name": "flags-dir",
12426
- "summary": "Import flag values from a directory.",
12427
- "hasDynamicHelp": false,
12428
- "multiple": false,
12429
- "type": "option"
12430
- },
12431
- "path": {
12432
- "char": "p",
12433
- "description": "Root folder",
12434
- "name": "path",
12435
- "default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
12436
- "hasDynamicHelp": false,
12437
- "multiple": false,
12438
- "type": "option"
12439
- },
12440
- "debug": {
12441
- "char": "d",
12442
- "description": "Activate debug mode (more logs)",
12443
- "name": "debug",
12444
- "allowNo": false,
12445
- "type": "boolean"
12446
- },
12447
- "websocket": {
12448
- "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
12449
- "name": "websocket",
12450
- "hasDynamicHelp": false,
12451
- "multiple": false,
12452
- "type": "option"
12453
- },
12454
- "skipauth": {
12455
- "description": "Skip authentication check when a default username is required",
12456
- "name": "skipauth",
12457
- "allowNo": false,
12458
- "type": "boolean"
12459
- },
12460
- "target-org": {
12461
- "aliases": [
12462
- "targetusername",
12463
- "u"
12464
- ],
12465
- "char": "o",
12466
- "deprecateAliases": true,
12467
- "name": "target-org",
12468
- "noCacheDefault": true,
12469
- "required": true,
12470
- "summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
12471
- "hasDynamicHelp": true,
12472
- "multiple": false,
12473
- "type": "option"
12474
- }
12475
- },
12476
- "hasDynamicHelp": true,
12477
- "hiddenAliases": [],
12478
- "id": "hardis:project:fix:profiletabs",
12479
- "pluginAlias": "sfdx-hardis",
12480
- "pluginName": "sfdx-hardis",
12481
- "pluginType": "core",
12482
- "strict": true,
12483
- "enableJsonFlag": true,
12484
- "title": "Fix profiles to add tabs that are not retrieved by SF CLI",
12485
- "requiresProject": true,
12486
- "isESM": true,
12487
- "relativePath": [
12488
- "lib",
12489
- "commands",
12490
- "hardis",
12491
- "project",
12492
- "fix",
12493
- "profiletabs.js"
12494
- ],
12495
- "aliasPermutations": [],
12496
- "permutations": [
12497
- "hardis:project:fix:profiletabs",
12498
- "project:hardis:fix:profiletabs",
12499
- "project:fix:hardis:profiletabs",
12500
- "project:fix:profiletabs:hardis",
12501
- "hardis:fix:project:profiletabs",
12502
- "fix:hardis:project:profiletabs",
12503
- "fix:project:hardis:profiletabs",
12504
- "fix:project:profiletabs:hardis",
12505
- "hardis:fix:profiletabs:project",
12506
- "fix:hardis:profiletabs:project",
12507
- "fix:profiletabs:hardis:project",
12508
- "fix:profiletabs:project:hardis",
12509
- "hardis:project:profiletabs:fix",
12510
- "project:hardis:profiletabs:fix",
12511
- "project:profiletabs:hardis:fix",
12512
- "project:profiletabs:fix:hardis",
12513
- "hardis:profiletabs:project:fix",
12514
- "profiletabs:hardis:project:fix",
12515
- "profiletabs:project:hardis:fix",
12516
- "profiletabs:project:fix:hardis",
12517
- "hardis:profiletabs:fix:project",
12518
- "profiletabs:hardis:fix:project",
12519
- "profiletabs:fix:hardis:project",
12520
- "profiletabs:fix:project:hardis"
12521
- ]
12522
- },
12523
- "hardis:project:fix:v53flexipages": {
12524
- "aliases": [],
12525
- "args": {},
12526
- "description": "\n## Command Behavior\n\n**Fixes Salesforce FlexiPages for compatibility with API Version 53.0 (Winter '22 release) by adding missing identifiers to component instances.**\n\nSalesforce introduced a change in API Version 53.0 that requires `identifier` tags within `componentInstance` and `fieldInstance` elements in FlexiPage metadata. If these identifiers are missing, deployments to orgs with API version 53.0 or higher will fail. This command automates the process of adding these missing identifiers, ensuring your FlexiPages remain deployable.\n\nKey functionalities:\n\n- **Targeted FlexiPage Processing:** Scans all .flexipage-meta.xml files within the specified root folder (defaults to current working directory).\n- **Identifier Injection:** Inserts a unique `identifier` tag (e.g., `SFDX_HARDIS_REPLACEMENT_ID`) into `componentInstance` and `fieldInstance` elements that lack one.\n\n**Important Note:** After running this command, ensure you update your `apiVersion` to `53.0` (or higher) in your `package.xml` and `sfdx-project.json` files.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **File Discovery:** Uses `glob` to find all .flexipage-meta.xml files.\n- **Content Reading:** Reads the XML content of each FlexiPage file.\n- **Regular Expression Replacement:** Employs a set of regular expressions to identify specific XML patterns (componentName.../componentName.../componentInstance, componentName.../componentName.../visibilityRule, fieldItem.../fieldItem.../fieldInstance) that are missing the `identifier` tag.\n- **Dynamic ID Generation:** For each match, it generates a unique identifier (e.g., `sfdxHardisIdX`) and injects it into the XML structure.\n- **File Writing:** If changes are made, the modified XML content is written back to the FlexiPage file using `fs.writeFile`.\n- **Logging:** Provides messages about which FlexiPages are being processed and a summary of the total number of identifiers added.\n</details>\n",
12527
- "examples": [
12528
- "$ sf hardis:project:fix:v53flexipages"
12529
- ],
12530
- "flags": {
12531
- "json": {
12532
- "description": "Format output as json.",
12533
- "helpGroup": "GLOBAL",
12534
- "name": "json",
12535
- "allowNo": false,
12536
- "type": "boolean"
12537
- },
12538
- "flags-dir": {
12539
- "helpGroup": "GLOBAL",
12540
- "name": "flags-dir",
12541
- "summary": "Import flag values from a directory.",
12542
- "hasDynamicHelp": false,
12543
- "multiple": false,
12544
- "type": "option"
12545
- },
12546
- "path": {
12547
- "char": "p",
12548
- "description": "Root folder",
12549
- "name": "path",
12550
- "default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
12551
- "hasDynamicHelp": false,
12552
- "multiple": false,
12553
- "type": "option"
12554
- },
12555
- "debug": {
12556
- "char": "d",
12557
- "description": "Activate debug mode (more logs)",
12558
- "name": "debug",
12559
- "allowNo": false,
12560
- "type": "boolean"
12561
- },
12562
- "websocket": {
12563
- "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
12564
- "name": "websocket",
12565
- "hasDynamicHelp": false,
12566
- "multiple": false,
12567
- "type": "option"
12568
- },
12569
- "skipauth": {
12570
- "description": "Skip authentication check when a default username is required",
12571
- "name": "skipauth",
12572
- "allowNo": false,
12573
- "type": "boolean"
12574
- }
12575
- },
12576
- "hasDynamicHelp": false,
12577
- "hiddenAliases": [],
12578
- "id": "hardis:project:fix:v53flexipages",
12579
- "pluginAlias": "sfdx-hardis",
12580
- "pluginName": "sfdx-hardis",
12581
- "pluginType": "core",
12582
- "strict": true,
12583
- "enableJsonFlag": true,
12584
- "title": "Fix flexipages for v53",
12585
- "requiresProject": true,
12586
- "isESM": true,
12587
- "relativePath": [
12588
- "lib",
12589
- "commands",
12590
- "hardis",
12591
- "project",
12592
- "fix",
12593
- "v53flexipages.js"
12594
- ],
12595
- "aliasPermutations": [],
12596
- "permutations": [
12597
- "hardis:project:fix:v53flexipages",
12598
- "project:hardis:fix:v53flexipages",
12599
- "project:fix:hardis:v53flexipages",
12600
- "project:fix:v53flexipages:hardis",
12601
- "hardis:fix:project:v53flexipages",
12602
- "fix:hardis:project:v53flexipages",
12603
- "fix:project:hardis:v53flexipages",
12604
- "fix:project:v53flexipages:hardis",
12605
- "hardis:fix:v53flexipages:project",
12606
- "fix:hardis:v53flexipages:project",
12607
- "fix:v53flexipages:hardis:project",
12608
- "fix:v53flexipages:project:hardis",
12609
- "hardis:project:v53flexipages:fix",
12610
- "project:hardis:v53flexipages:fix",
12611
- "project:v53flexipages:hardis:fix",
12612
- "project:v53flexipages:fix:hardis",
12613
- "hardis:v53flexipages:project:fix",
12614
- "v53flexipages:hardis:project:fix",
12615
- "v53flexipages:project:hardis:fix",
12616
- "v53flexipages:project:fix:hardis",
12617
- "hardis:v53flexipages:fix:project",
12618
- "v53flexipages:hardis:fix:project",
12619
- "v53flexipages:fix:hardis:project",
12620
- "v53flexipages:fix:project:hardis"
12621
- ]
12622
- },
12623
12623
  "hardis:project:generate:bypass": {
12624
12624
  "aliases": [],
12625
12625
  "args": {},
@@ -15102,5 +15102,5 @@
15102
15102
  ]
15103
15103
  }
15104
15104
  },
15105
- "version": "6.0.7-beta202508191748.0"
15105
+ "version": "6.0.7-beta202508202323.0"
15106
15106
  }