diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 30efb2e..d4b0459 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,5 +1,5 @@ # Unique name for this workflow -name: Rollup Release Status +name: Round Robin Release Status on: push: diff --git a/.gitignore b/.gitignore index 0bce180..0a4980a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ debug.log DEVHUB_SFDX_URL.txt tests/apex **/main/default/ -coverage/ \ No newline at end of file +coverage/ +.vscode \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2443585 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +sfdx-project.json \ No newline at end of file diff --git a/README.md b/README.md index 0ed8122..d2c39a3 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,87 @@ [![Round Robin Release status](https://github.com/jamessimone/salesforce-round-robin/actions/workflows/deploy.yml/badge.svg?branch=main)](https://github.com/jamessimone/salesforce-round-robin/actions/workflows/deploy.yml 'Click to view deployment pipeline history') [![License](https://img.shields.io/npm/l/scanner.svg)](https://github.com/jamessimone/salesforce-round-robin/blob/main/package.json) -Easy, configurable round robin assigner! \ No newline at end of file +## Deployment + + + Deploy to Salesforce + + + + Deploy to Salesforce Sandbox + + +
+
+ +Between Assignment Rules and OmniChannel, there are plenty of out-of-the-box options for how records get owners assigned to them in Salesforce. As always, there are also many things that require customization. As it has frequently been the case that a "round robin" assignment be part of companies' business rules, Salesforce Round Robin aims to easily add support for round robin-type assignments to both Flow and Apex. + +Here are some of the benefits to using this package: + +- Ease of setup. All you have to supply (via Flow or Apex) is which records qualify to be part of the round robin (e.g. which records are part of the "ownership pool") and the records you'd like to have owners assigned +- Speed and transactional safety - there are many pitfalls with naive round robin implementations, but the biggest one is unfair assignment (where some owners receive more records than others). This skew is typically caused by the tracking for how owners have been assigned getting out of date with how many records each person has already received. This package takes advantage of Salesforce's Platform Cache to offer truly fair assignment. + +## Round Robin Assignment From Flow + +Something to be aware of when using Flow as the starting point - until Apex Invocable actions are supported from the "before create/update" part of Flow, one should be aware of the possibility for recursion when making use of the bundled invocable action with Record-Triggered Flows. Put simply - because this action can only be run _after_ create/update presently, any _other_ parts of your Flow(s) may run twice. + +Here's a basic look at what a simple Record Triggered Flow would look like using the action: + +![Simple record-triggered flow](./media/round-robin-record-triggered-flow.png) + +And then the configuration for the action: + +![Setting the invocable properties](./media/round-robin-inside-action.png) + +### Invocable Properties To Set + +- `Object for "Records to round robin" (Input)` - for Record-Triggered Flows, this should correspond to the object the flow is for. For anything else, this should correspond to the SObject name of the record collection you're looking to pass in +- `Alternative to query: API name of class that implements RoundRobinAssigner.IAssignmentRepo` (optional) - for Flow developers working with Apex (or with Apex developers), you may have more complicated business rules for which Users or other records qualify to be used in the assignment than the Query property can provide you with. For advanced users only! +- `Owner Field API Name - defaults to OwnerId` (optional) - which field are you looking to assign to? Not all objects have `OwnerId` as a field (the detail side of M/D relationships, for instance). Use the field's API Name for these cases. +- `Query Id Field - defaults to Id if not supplied` (optional) - used in conjunction with the `Query To Retrieve Possible Assignees` property, below. If you are using the round robin assigner to assign lookup fields _other_ than `OwnerId`, this allows you to override which field is pulled off of the records that the `Query To Retrieve Possible Assignees` returns. +- `Query To Retrieve Possible Assignees` (optional) - either this or `Alternative to query ...` must be provided! This query will pull back records - like Users - and grab their `Id` field (or the field stipulated using the `Query Id Field ...` property) that should be included in the "ownership pool" for the given round robin. +- `Records To Round Robin` (optional, but should always be supplied) - set this equal to a collection variable that is either the output of a `Get Records` call, contains `$Record` in a Record-Triggered flow, etc ... +- `Update records - defaults to false` (optional) - by default, the collection supplied via the `Records To Round Robin` property aren't updated; set this to `{!$GlobalConstant.True}` to have the action update your records with their newly assigned owners + +## Round Robin Assignment From Apex + +You have quite a few options when it comes to performing round robin assignments from Apex. I would _highly recommend_ performing round robin assignments in the `BEFORE_UPDATE` Apex trigger context so that owners are assigned prior to being committed to the database. + +Here are a few ways that you can perform assignments: + +- You can re-use the static method `FlowRoundRobinAssigner.assign` by creating synthetic `FlowRoundRobinAssigner.FlowInput` records +- You can call use the bundled `QueryAssigner`: + + ```java + // in a Trigger/ trigger handler class + RoundRobinAssigner.IAssignmentRepo queryRepo = new QueryAssigner('SELECT Id FROM User WHERE Some_Condition__c = true', 'Id'); + RoundRobinAssigner.Details assignmentDetails = new RoundRobinAssigner.Details(); + assignmentDetails.assignmentType = 'this is the cache key'; + new RoundRobinAssigner(queryRepo, assignmentDetails).assignOwners(someListOfSObjectsToBeAssigned); + ``` + +- Or you can supply an implementation of `RoundRobinAssigner.IAssignmentRepo` that retrieves the records that qualify for the ownership pool via the `getAssignmentIds` method: + +```java +// inside RoundRobinAssigner: +public interface IAssignmentRepo { + // note that the provided implementations of IAssignmentRepo + // don't make use of the "assignmentType" argument passed here, + // but this helps to decouple your logic for returning assignment Ids + // in the event that you want to provide a single implementation that + // can respond to multiple assignment types! + List getAssignmentIds(String assignmentType); +} +``` + +The `assignmentType` property that comes from the invocable action (`FlowRoundRobinAssigner`) is always the `Object Type.Field Name`; so something like `Lead.OwnerId` for a typical Lead round robin. + +Note that the records are _not_ updated by default in `RoundRobinAssigner`; if you are updating a related list of records (where updating them in a `BEFORE_UPDATED` context wouldn't just persist the updated ownership values by default), you should call `update` or `Database.update` on the records after calling the assigner. + +## Additional Details & Architectural Notes + +Again, this package employs the usage of Platform Cache to ensure fairness across competing transactions. This means that Platform Cache must be _enabled_ in your org in order to successfully install the round robin package. By default, it creates a 1 MB partition within your org cache. That should be plenty for most use-cases; if you have a ton of _different_ round robin assignments you may need to bump that amount up in: + +- Setup -> Platform Cache -> Click "Edit" on the `RoundRobinCache` record -> Bump the amount to 2 under the `Provider Free` section diff --git a/core/classes/AbstractCacheRepo.cls b/core/classes/AbstractCacheRepo.cls index 1949a36..4b751cc 100644 --- a/core/classes/AbstractCacheRepo.cls +++ b/core/classes/AbstractCacheRepo.cls @@ -4,7 +4,7 @@ public abstract class AbstractCacheRepo implements Cache.CacheBuilder { } public void updateCache(Object cachedItem) { - this.getPartition().put(this.getCacheKey(), cachedItem); + this.getPartition()?.put(this.getCacheKey(), cachedItem); } protected abstract String getCachePartitionName(); @@ -12,8 +12,14 @@ public abstract class AbstractCacheRepo implements Cache.CacheBuilder { protected abstract Object populateCache(); protected Object getFromCache() { - Cache.OrgPartition partition = this.getPartition(); - return partition.get(this.getCacheBuilder(), this.getCacheKey()); + Object cachedItem = this.getPartition()?.get(this.getCacheBuilder(), this.getCacheKey()); + if (cachedItem == null) { + // the item is only null when there's an issue with the packaging org not properly + // creating the cache partition; in this case, we "know" what the value will be + // and can manually load it + cachedItem = this.populateCache(); + } + return cachedItem; } protected virtual Type getCacheBuilder() { @@ -23,13 +29,14 @@ public abstract class AbstractCacheRepo implements Cache.CacheBuilder { return Type.forName(className); } - private Cache.OrgPartition getPartition() { +@SuppressWarnings('PMD.EmptyCatchBlock') +private Cache.OrgPartition getPartition() { Cache.OrgPartition partition; try { - Cache.OrgPartition.validatePartitionName(this.getCachePartitionName()); partition = Cache.Org.getPartition(this.getCachePartitionName()); } catch (cache.Org.OrgCacheException orgCacheEx) { - partition = new Cache.OrgPartition(this.getCachePartitionName()); + // do nothing - there seem to be some timing dependencies on when + // it's possible to use Platform Cache while packaging. } return partition; } diff --git a/core/classes/FlowRoundRobinAssigner.cls b/core/classes/FlowRoundRobinAssigner.cls index 6751331..ed63b86 100644 --- a/core/classes/FlowRoundRobinAssigner.cls +++ b/core/classes/FlowRoundRobinAssigner.cls @@ -1,7 +1,10 @@ global without sharing class FlowRoundRobinAssigner { @TestVisible - RoundRobinAssigner.IAssignmentRepo stubAssignmentRepo; + private static RoundRobinAssigner.IAssignmentRepo stubAssignmentRepo; + @TestVisible + private static Boolean hasBeenUpdated = false; + private static final Set PROCESSED_RECORD_IDS = new Set(); private static final FlowRoundRobinAssigner SELF = new FlowRoundRobinAssigner(); global class FlowInput { @@ -22,18 +25,40 @@ global without sharing class FlowRoundRobinAssigner { @InvocableMethod(category='Round Robin' label='Round robin records') global static void assign(List flowInputs) { for (FlowInput input : flowInputs) { - if (input.recordsToRoundRobin.isEmpty() == false) { - SELF.validateInput(input); - RoundRobinAssigner.IAssignmentRepo assignmentRepo = SELF.getAssignmentRepo(input); - RoundRobinAssigner.Details assignmentDetails = SELF.getAssignmentDetails(input); - new RoundRobinAssigner(assignmentRepo, assignmentDetails).assignOwners(input.recordsToRoundRobin); + if (input.recordsToRoundRobin?.isEmpty() == false) { + SELF.trackAssignedIds(input); + SELF.roundRobin(input); } } } + private void roundRobin(FlowInput input) { + this.validateInput(input); + RoundRobinAssigner.IAssignmentRepo assignmentRepo = this.getAssignmentRepo(input); + RoundRobinAssigner.Details assignmentDetails = this.getAssignmentDetails(input); + new RoundRobinAssigner(assignmentRepo, assignmentDetails).assignOwners(input.recordsToRoundRobin); + if (input.updateRecords) { + update input.recordsToRoundRobin; + hasBeenUpdated = true; + } + } + private void validateInput(FlowInput input) { if (String.isBlank(input.queryToRetrieveAssignees) && String.isBlank(input.assignmentRepoClassName)) { - throw new IllegalArgumentException('Query To Retrieve Possible Assignees or API name of class implementing RoundRobinAssigner.IAssignment repo is required!'); + throw new IllegalArgumentException( + 'Query To Retrieve Possible Assignees or API name of class implementing RoundRobinAssigner.IAssignment repo is required!' + ); + } + } + + private void trackAssignedIds(FlowInput input) { + for (Integer reverseIndex = input.recordsToRoundRobin.size() - 1; reverseIndex >= 0; reverseIndex--) { + SObject record = input.recordsToRoundRobin[reverseIndex]; + if (record.Id != null && PROCESSED_RECORD_IDS.contains(record.Id)) { + input.recordsToRoundRobin.remove(reverseIndex); + } else if (record.Id != null) { + PROCESSED_RECORD_IDS.add(record.Id); + } } } @@ -55,19 +80,4 @@ global without sharing class FlowRoundRobinAssigner { details.ownerField = input.ownerFieldApiName; return details; } - - private without sharing class QueryAssigner implements RoundRobinAssigner.IAssignmentRepo { - private final List validAssignmentIds; - public QueryAssigner(String query, String assignmentFieldName) { - Set assignmentIds = new Set(); - List matchingRecords = Database.query(query); - for (SObject matchingRecord : matchingRecords) { - assignmentIds.add((Id) matchingRecord.get(assignmentFieldName)); - } - this.validAssignmentIds = new List(assignmentIds); - } - public List getAssignmentIds(String assignmentType) { - return this.validAssignmentIds; - } - } } diff --git a/core/classes/FlowRoundRobinAssignerTests.cls b/core/classes/FlowRoundRobinAssignerTests.cls index 2de15fb..7f74ab9 100644 --- a/core/classes/FlowRoundRobinAssignerTests.cls +++ b/core/classes/FlowRoundRobinAssignerTests.cls @@ -49,6 +49,7 @@ private class FlowRoundRobinAssignerTests { static void updatesRecordsWhenFlagIsPassed() { ContactPointAddress cpa = new ContactPointAddress(Name = 'updatesRecordsWhenFlagIsPassed'); insert cpa; + cpa.OwnerId = null; FlowRoundRobinAssigner.FlowInput input = new FlowRoundRobinAssigner.FlowInput(); input.updateRecords = true; @@ -57,6 +58,7 @@ private class FlowRoundRobinAssignerTests { FlowRoundRobinAssigner.assign(new List{ input }); - System.assertEquals(UserInfo.getUserId(), [SELECT OwnerId FROM ContactPointAddress WHERE Id = :cpa.Id].OwnerId); + System.assertEquals(true, FlowRoundRobinAssigner.hasBeenUpdated); + System.assertEquals(UserInfo.getUserId(), cpa.OwnerId); } } diff --git a/core/classes/QueryAssigner.cls b/core/classes/QueryAssigner.cls new file mode 100644 index 0000000..925150c --- /dev/null +++ b/core/classes/QueryAssigner.cls @@ -0,0 +1,16 @@ +public without sharing class QueryAssigner implements RoundRobinAssigner.IAssignmentRepo { + private final List validAssignmentIds; + + public QueryAssigner(String query, String assignmentFieldName) { + Set assignmentIds = new Set(); + List matchingRecords = Database.query(query); + for (SObject matchingRecord : matchingRecords) { + assignmentIds.add((Id) matchingRecord.get(assignmentFieldName)); + } + this.validAssignmentIds = new List(assignmentIds); + } + + public List getAssignmentIds(String assignmentType) { + return this.validAssignmentIds; + } +} diff --git a/core/classes/QueryAssigner.cls-meta.xml b/core/classes/QueryAssigner.cls-meta.xml new file mode 100644 index 0000000..40d6793 --- /dev/null +++ b/core/classes/QueryAssigner.cls-meta.xml @@ -0,0 +1,5 @@ + + + 54.0 + Active + diff --git a/core/classes/RoundRobinAssigner.cls b/core/classes/RoundRobinAssigner.cls index ef89ee1..347cc3c 100644 --- a/core/classes/RoundRobinAssigner.cls +++ b/core/classes/RoundRobinAssigner.cls @@ -54,6 +54,9 @@ public without sharing class RoundRobinAssigner implements IThreadSafeCacheVisit } private Integer getNextAssignmentIndex(List assignmentIds, RoundRobin__c cachedAssignment) { + if (cachedAssignment.Index__c == null && assignmentIds.isEmpty() == false) { + return 0; + } Integer currentAssignmentIndex = SENTINEL_INDEX; for (Integer index = 0; index < assignmentIds.size(); index++) { Id assignmentId = assignmentIds[index]; diff --git a/core/classes/RoundRobinRepository.cls b/core/classes/RoundRobinRepository.cls index 6e5612d..1adbade 100644 --- a/core/classes/RoundRobinRepository.cls +++ b/core/classes/RoundRobinRepository.cls @@ -1,6 +1,6 @@ public without sharing class RoundRobinRepository extends AbstractCacheRepo { private static Map CACHED_ASSIGNMENTS; - private static final String SENTINEL_USER_INDEX = getSentinelIndex(); + private static final String SENTINEL_OWNER_INDEX = getSentinelIndex(); @SuppressWarnings('PMD.ApexCRUDViolation') public void accept(IThreadSafeCacheVisitor visitor, List records) { @@ -10,8 +10,6 @@ public without sharing class RoundRobinRepository extends AbstractCacheRepo { this.forceRefreshCache(); this.accept(visitor, records); } - currentAssignment.LastUpdated__c = System.now(); - upsert currentAssignment; } /** AbstractCacheRepo overrides */ @@ -48,21 +46,40 @@ public without sharing class RoundRobinRepository extends AbstractCacheRepo { this.updateCache(CACHED_ASSIGNMENTS); } - private Boolean commitUpdatedAssignment(RoundRobin__c updatedAssignment) { + @SuppressWarnings('PMD.ApexCRUDViolation') + private Boolean commitUpdatedAssignment(RoundRobin__c assignment) { Boolean wasCommitSuccessful = true; Map currentCache = this.getCachedAssignments(); if ( - currentCache.containsKey(updatedAssignment.Name) && - currentCache.get(updatedAssignment.Name).LastUpdated__c > CACHED_ASSIGNMENTS.get(updatedAssignment.Name).LastUpdated__c + currentCache.containsKey(assignment.Name) && + currentCache.get(assignment.Name).LastUpdated__c > CACHED_ASSIGNMENTS.get(assignment.Name).LastUpdated__c ) { - updatedAssignment = currentCache.get(updatedAssignment.Name); + assignment = currentCache.get(assignment.Name); wasCommitSuccessful = false; } else { - updatedAssignment.LastUpdated__c = System.now(); - upsert updatedAssignment; + assignment.LastUpdated__c = System.now(); + /** + * integration tests with after save Flows have shown something unfortunate: + * though the second (recursive) call to the assigner is spawned in a second transaction + * the RoundRobin__c.getAll() still doesn't contain the Id of the inserted record (for the times where the assignment + * is being run for the first time). + * That means that we can't just call "upsert", and instead have to do this goofy + * song and dance to ensure the Id is appended correctly + */ + if (assignment.Id == null) { + List existingAssignments = [SELECT Id FROM RoundRobin__c WHERE Name = :assignment.Name]; + if (existingAssignments.isEmpty() == false) { + assignment.Id = existingAssignments[0].Id; + } + } + if (assignment.Id != null) { + update assignment; + } else { + insert assignment; + } } - CACHED_ASSIGNMENTS.put(updatedAssignment.Name, updatedAssignment); + CACHED_ASSIGNMENTS.put(assignment.Name, assignment); return wasCommitSuccessful; } @@ -77,7 +94,7 @@ public without sharing class RoundRobinRepository extends AbstractCacheRepo { Name = assignmentType, // some sentinel value LastUpdated__c = Datetime.newInstanceGmt(1970, 1, 1), - Index__c = SENTINEL_USER_INDEX + Index__c = SENTINEL_OWNER_INDEX ) ); } @@ -87,6 +104,6 @@ public without sharing class RoundRobinRepository extends AbstractCacheRepo { } private static String getSentinelIndex() { - return User.SObjectType.getDescribe().getKeyPrefix() + '0'.repeat(12); + return null; } } diff --git a/core/classes/RoundRobinRepositoryTests.cls b/core/classes/RoundRobinRepositoryTests.cls index 439301c..737c51f 100644 --- a/core/classes/RoundRobinRepositoryTests.cls +++ b/core/classes/RoundRobinRepositoryTests.cls @@ -17,13 +17,29 @@ private class RoundRobinRepositoryTests { ); } + @IsTest + static void avoidsRecursiveUpdateIssues() { + Datetime someTimeAgo = System.now().addDays(-3); + upsert new RoundRobin__c(LastUpdated__c = someTimeAgo, Name = cacheKey); + RoundRobinRepository repo = new RoundRobinRepository(); + + Lead firstLead = new Lead(); + Lead secondLead = new Lead(); + + repo.accept(new VisitorMock(), new List{ firstLead }); + repo.accept(new VisitorMock(), new List{ secondLead }); + + RoundRobin__c updatedAssignment = [SELECT Id, Index__c FROM RoundRobin__c]; + System.assertEquals(UserInfo.getUserId(), updatedAssignment.Index__c); + } + private class VisitorMock implements IThreadSafeCacheVisitor { public String getVisitKey() { return cacheKey; } @SuppressWarnings('PMD.EmptyStatementBlock') public void visitRecords(List records, SObject currentCacheRecord) { - // no-op + currentCacheRecord.put('Index__c', UserInfo.getUserId()); } } } diff --git a/integration-tests/classes/RoundRobinFlowIntegrationTests.cls b/integration-tests/classes/RoundRobinFlowIntegrationTests.cls new file mode 100644 index 0000000..1d4f83b --- /dev/null +++ b/integration-tests/classes/RoundRobinFlowIntegrationTests.cls @@ -0,0 +1,23 @@ +@IsTest +private class RoundRobinFlowIntegrationTests { + @IsTest + static void successfullyRoundRobinsFromFlow() { + User existingUser = [ + SELECT Id, LastName, Email, Alias, TimeZoneSidKey, LocaleSidKey, EmailEncodingKey, ProfileId, LanguageLocaleKey, Username + FROM User + WHERE Id = :UserInfo.getUserId() + ]; + User roundRobinUser = existingUser.clone(); + roundRobinUser.FirstName = null; + roundRobinUser.Username = 'roundRobin@test.com'; + // "roundRobinUser" is hard-coded into the query in flow + roundRobinUser.LastName = 'roundRobinUser'; + insert roundRobinUser; + + Lead lead = new Lead(LastName = 'Test Assignment', Company = 'Test'); + insert lead; + + lead = [SELECT Id, OwnerId FROM Lead]; + System.assertEquals(roundRobinUser.Id, lead.OwnerId); + } +} diff --git a/integration-tests/classes/RoundRobinFlowIntegrationTests.cls-meta.xml b/integration-tests/classes/RoundRobinFlowIntegrationTests.cls-meta.xml new file mode 100644 index 0000000..e7009f9 --- /dev/null +++ b/integration-tests/classes/RoundRobinFlowIntegrationTests.cls-meta.xml @@ -0,0 +1,5 @@ + + + 54.0 + Active + \ No newline at end of file diff --git a/integration-tests/flows/Round_Robin_Assign_Leads.flow-meta.xml b/integration-tests/flows/Round_Robin_Assign_Leads.flow-meta.xml new file mode 100644 index 0000000..d7e6285 --- /dev/null +++ b/integration-tests/flows/Round_Robin_Assign_Leads.flow-meta.xml @@ -0,0 +1,92 @@ + + + + Round_Robin_Assign_Owners + + 176 + 455 + FlowRoundRobinAssigner + apex + + T__recordsToRoundRobin + Lead + + CurrentTransaction + + queryToRetrieveAssignees + + SELECT Id FROM User Where Name = 'roundRobinUser' + + + + recordsToRoundRobin + + Leads + + + + updateRecords + + true + + + + 54.0 + + Add_Current_Record_to_Collection + + 176 + 335 + + Leads + Add + + $Record + + + + Round_Robin_Assign_Owners + + + Round Robin Assign Leads {!$Flow.CurrentDateTime} + + + BuilderType + + LightningFlowBuilder + + + + CanvasMode + + AUTO_LAYOUT_CANVAS + + + + OriginBuilderType + + LightningFlowBuilder + + + AutoLaunchedFlow + + 50 + 0 + + Add_Current_Record_to_Collection + + Lead + CreateAndUpdate + RecordAfterSave + + Active + + The leads that will enter the round robin assignment + Leads + SObject + true + true + false + Lead + + diff --git a/media/deploy-package-to-prod.png b/media/deploy-package-to-prod.png new file mode 100644 index 0000000..f3b8ae4 Binary files /dev/null and b/media/deploy-package-to-prod.png differ diff --git a/media/deploy-package-to-sandbox.png b/media/deploy-package-to-sandbox.png new file mode 100644 index 0000000..aedf768 Binary files /dev/null and b/media/deploy-package-to-sandbox.png differ diff --git a/media/round-robin-inside-action.png b/media/round-robin-inside-action.png new file mode 100644 index 0000000..16e8306 Binary files /dev/null and b/media/round-robin-inside-action.png differ diff --git a/media/round-robin-record-triggered-flow.png b/media/round-robin-record-triggered-flow.png new file mode 100644 index 0000000..e9727ff Binary files /dev/null and b/media/round-robin-record-triggered-flow.png differ diff --git a/package-lock.json b/package-lock.json index 214e203..cb931d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,9 @@ } }, "@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -147,9 +147,9 @@ } }, "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", "dev": true }, "@babel/template": { @@ -164,18 +164,18 @@ } }, "@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@babel/generator": "^7.17.3", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", + "@babel/parser": "^7.17.3", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -569,15 +569,15 @@ "dev": true }, "@oclif/parser": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", - "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.7.tgz", + "integrity": "sha512-b11xBmIUK+LuuwVGJpFs4LwQN2xj2cBWj2c4z1FtiXGrJ85h9xV6q+k136Hw0tGg1jQoRXuvuBnqQ7es7vO9/Q==", "dev": true, "requires": { - "@oclif/errors": "^1.2.2", + "@oclif/errors": "^1.3.5", "@oclif/linewrap": "^1.0.0", "chalk": "^4.1.0", - "tslib": "^2.0.0" + "tslib": "^2.3.1" } }, "@oclif/plugin-autocomplete": { @@ -1722,9 +1722,9 @@ } }, "@salesforce/apex-node": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@salesforce/apex-node/-/apex-node-0.8.0.tgz", - "integrity": "sha512-9drAwKgLnAm0y0v5q0hU2FSHOdc6LzxDekb3Ufy13nxcx9OZ1gOL97qV9iRlGHLmZtAe94scc8IpZcs7HrcbVA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@salesforce/apex-node/-/apex-node-0.9.0.tgz", + "integrity": "sha512-I6vB43o9TpJ2qbbenvtPgYT87UArveV0BYMXO46FLSTgSFkE99u/SL8iHoySzhkKy4NhUMWZo/5sOUxkxbdRVQ==", "dev": true, "requires": { "@salesforce/core": "2.33.1", @@ -1856,9 +1856,9 @@ } }, "@salesforce/core": { - "version": "2.35.0", - "resolved": "https://registry.npmjs.org/@salesforce/core/-/core-2.35.0.tgz", - "integrity": "sha512-eqBZtaHn3s3FsASjsrZ8T9e/TE+aHuB2DkuKDEierDYW5cSVqJyZ0ccMi9QKI7oQuPO1UHhcUyWmyezkdEjYzg==", + "version": "2.35.3", + "resolved": "https://registry.npmjs.org/@salesforce/core/-/core-2.35.3.tgz", + "integrity": "sha512-F/Up8QQf7H8iKxQpGa4EZpViuNUzS+MSKaifbs+nBHs3ni0XZ2NMxB5Ai+C1vsbNNEeB1NoTPcOw/cpTm7WRRA==", "dev": true, "requires": { "@salesforce/bunyan": "^2.0.0", @@ -1906,9 +1906,9 @@ } }, "@salesforce/kit": { - "version": "1.5.32", - "resolved": "https://registry.npmjs.org/@salesforce/kit/-/kit-1.5.32.tgz", - "integrity": "sha512-5MIYLLx1Ee3eTcqEoqFXDCKXwtU8J5wo1QWyzb+BjReNGLVUuSc6Qi5JoCZtYGXeZpdBJmM3s9Y14QXr53ZmQw==", + "version": "1.5.33", + "resolved": "https://registry.npmjs.org/@salesforce/kit/-/kit-1.5.33.tgz", + "integrity": "sha512-CrrfalLDlr6dLyaON7HHu5GK+nwhz0Q3zYkBccMds20liRbGzozbUaX9uVZ6J1pDECaaPxtrZTpv1ljdKP2D6A==", "dev": true, "requires": { "@salesforce/ts-types": "^1.5.20", @@ -1927,9 +1927,9 @@ } }, "@salesforce/plugin-alias": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-alias/-/plugin-alias-1.2.0.tgz", - "integrity": "sha512-zxAe1R9HQlb9vlD4ijUk0+f859pqEn0SeqpvxUeRqxeGVgtMsf5UMe3sj+5uIzdfmlTE+7n6FNo4CMAQch8OWg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-alias/-/plugin-alias-1.2.1.tgz", + "integrity": "sha512-EJbnVawQ9oGe5M8mqmDoU2NFS1QdUOaoocqu9ZtPxCmu7BdphgaSboAwBnUIoXFyTyst/zDuxPhP0MSnBHBsmQ==", "dev": true, "requires": { "@oclif/config": "^1.18.1", @@ -1939,6 +1939,18 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2018,21 +2030,41 @@ } }, "@salesforce/plugin-apex": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-apex/-/plugin-apex-0.8.0.tgz", - "integrity": "sha512-QMryyGNnWyj3lf4wcz0eC2EMc6Znz3mbqenklOgC64SYnESvJvVB2JOJ9oA6Q2tr0Lmmk9dkO0ttQqPZCfMSRw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-apex/-/plugin-apex-0.9.0.tgz", + "integrity": "sha512-jrzIoj0bWmix03QwbgypO+7X1w8x55v5E5ZRzEjgPBD+VUuIIY7fCgOh70xjA3vDfXubVRKfnR5e2AuVF0PBeA==", "dev": true, "requires": { "@oclif/command": "^1", "@oclif/config": "^1", "@oclif/errors": "^1", - "@salesforce/apex-node": "0.8.0", + "@salesforce/apex-node": "0.9.0", "@salesforce/command": "4.2.0", "@salesforce/core": "2.33.1", "chalk": "^4.1.0", "tslib": "^1" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + } + } + }, "@salesforce/command": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.0.tgz", @@ -2165,6 +2197,18 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2243,18 +2287,42 @@ } } }, - "@salesforce/plugin-config": { - "version": "1.3.15", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-config/-/plugin-config-1.3.15.tgz", - "integrity": "sha512-M0rdwNZMSLV328rcKcXQKRidGOsYUaFQ2OB9kAP8B7Gr3/GryYz7qvqoEUNer/7/9Y3h6UWy5NJSXWGDq9AVGw==", + "@salesforce/plugin-community": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-community/-/plugin-community-1.1.4.tgz", + "integrity": "sha512-pmbnfOMe2G/vfZuoNWaoH3hZMQqcW2ge3CBYbmUe4wZRT+vjP8ZcTtJLZOMSYvLnFUycY5KRx3gnZlQLo3dsYQ==", "dev": true, "requires": { - "@oclif/config": "^1.18.1", - "@salesforce/command": "^4.2.0", - "@salesforce/core": "^2.31.0", + "@oclif/config": "^1", + "@salesforce/command": "^4.2.2", + "@salesforce/core": "^2.35.1", "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2273,15 +2341,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2291,6 +2350,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -2319,15 +2398,120 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + } + } + }, + "@salesforce/plugin-config": { + "version": "1.3.19", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-config/-/plugin-config-1.3.19.tgz", + "integrity": "sha512-vmx/4cbgw/PRSTLpGmHbBHP2huBUL4ucYhmK5F+m43KsUYUb23p85yTJgFnJvnt2n4thfxVeGoTsKr3POnX1fQ==", + "dev": true, + "requires": { + "@oclif/config": "^1.18.1", + "@salesforce/command": "^4.2.0", + "@salesforce/core": "^2.31.0", + "tslib": "^2" + }, + "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@salesforce/command": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", + "integrity": "sha512-2QEtPIMaeRyUEnLmPHJ1PhfKDJBupfQS5T4nG8rXpK2yOznBu48aPWaWCYErrxyC0bPa5eoFACeyPWz1k9QMog==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "@oclif/command": "^1.8.1", + "@oclif/errors": "^1.2.2", + "@oclif/parser": "3.8.6", + "@oclif/plugin-help": "^2.2.0", + "@oclif/test": "^1.2.4", + "@salesforce/core": "^2.35.0", + "@salesforce/kit": "^1.5.17", + "@salesforce/ts-types": "^1.5.20", + "chalk": "^2.4.2", + "cli-ux": "^4.9.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true } } }, @@ -2346,20 +2530,32 @@ } }, "@salesforce/plugin-data": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-data/-/plugin-data-0.6.8.tgz", - "integrity": "sha512-BdXM5/1hBVnAj1tnlXT5go8ji0KrB6+yonqH5vZ8LwjehzWTd0obMemwz9hjtX28UQuFSsJ+wPCM6j/HaJNRKw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-data/-/plugin-data-0.6.9.tgz", + "integrity": "sha512-c7BE93+YQJYvz2OuCFz/g4tIgoqrr21iW/RfxDo4KtlUrHUA9Qy/6a5VbCzhUdv6cIBUTbHJiJYylTb2GKTYGg==", "dev": true, "requires": { "@oclif/config": "^1", "@salesforce/command": "^4.2.0", - "@salesforce/core": "^2.31.0", + "@salesforce/core": "^2.33.1", "@salesforce/ts-types": "^1.5.20", "chalk": "^4.1.0", "csv-parse": "^4.16.3", "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2537,9 +2733,9 @@ } }, "@salesforce/plugin-info": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-info/-/plugin-info-1.2.0.tgz", - "integrity": "sha512-QQQmpxPP7CAYUxILhR/7JEIW2OkVE+VQ0RlQqCnT4iaEwL2wzDyy4QS/Ce/Era/JEvc2wWzvVUXPN9mO7VmEOg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-info/-/plugin-info-1.2.1.tgz", + "integrity": "sha512-e/nUuTLRa9AmDm+Uh+Cp0ql9OFeqi0FWj2ZR3VSMom3zVoOqPMk8VzqxyfzL8eqBEXFrCf7AbuOcl80texa9ig==", "dev": true, "requires": { "@oclif/config": "^1", @@ -2549,10 +2745,36 @@ "got": "^11.8.2", "marked": "^4.0.1", "marked-terminal": "^4.2.0", + "proxy-agent": "^5.0.0", + "proxy-from-env": "^1.1.0", "semver": "^7.3.5", "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2571,15 +2793,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2589,6 +2802,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -2642,15 +2875,6 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -2666,9 +2890,33 @@ "tslib": "^2" }, "dependencies": { - "@salesforce/command": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@salesforce/command": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", "integrity": "sha512-2QEtPIMaeRyUEnLmPHJ1PhfKDJBupfQS5T4nG8rXpK2yOznBu48aPWaWCYErrxyC0bPa5eoFACeyPWz1k9QMog==", "dev": true, "requires": { @@ -2684,15 +2932,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2702,6 +2941,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -2730,15 +2989,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -2756,6 +3006,30 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2774,15 +3048,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2792,6 +3057,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -2820,15 +3105,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -2844,6 +3120,30 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -2862,15 +3162,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2880,6 +3171,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -2908,22 +3219,13 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "@salesforce/plugin-source": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-source/-/plugin-source-1.8.9.tgz", - "integrity": "sha512-pPJcRewMh3bEx7yKgiQL4zLwWEjNl5aqI7gvHUkkHMTL+z3mudWKI+4CWfycRttleeRwhuaqDr5zzDmh/BLMbQ==", + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-source/-/plugin-source-1.8.12.tgz", + "integrity": "sha512-uunZ9zoms9vpPQrmXJaJ3mXIKNcqlWWQ2gycZ3irXRrg85g1M5sRrDeie+tnp8TX33TgMYVbQsdJKfjPtN4SDg==", "dev": true, "requires": { "@oclif/config": "^1.18.2", @@ -2937,6 +3239,18 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -3295,6 +3609,30 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -3313,15 +3651,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3331,6 +3660,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -3359,22 +3708,13 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "@salesforce/plugin-templates": { - "version": "53.3.0", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-templates/-/plugin-templates-53.3.0.tgz", - "integrity": "sha512-Bfc8a40Md/Z7K1dgG72feSge+b7A9sQatzhUmNI0TqMcQFjtN3frgdqLWUJvTBYyxhSsHs/eAdSM4+Wxn5J8Aw==", + "version": "53.6.0", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-templates/-/plugin-templates-53.6.0.tgz", + "integrity": "sha512-V2wrIbzocmU27hlsiI+pt9KjcHsYQEMnHfQNrxEXpiQgsj2Bv4XT1dMF+QpBhCwYA1jPizoCe0QMDVEN5w9I5g==", "dev": true, "requires": { "@oclif/command": "^1", @@ -3382,10 +3722,10 @@ "@oclif/errors": "^1", "@salesforce/command": "^4.2.1", "@salesforce/core": "^2.33.1", - "@salesforce/templates": "53.3.0", + "@salesforce/templates": "53.6.0", "tslib": "^1", "yeoman-environment": "2.4.0", - "yeoman-generator": "4.0.1" + "yeoman-generator": "^4.8.2" }, "dependencies": { "@nodelib/fs.stat": { @@ -3394,6 +3734,36 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -3418,15 +3788,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -3436,15 +3797,6 @@ "array-uniq": "^1.0.1" } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -3483,6 +3835,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "cli-cursor": { @@ -3605,15 +3977,6 @@ } } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3749,16 +4112,6 @@ } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -3801,42 +4154,6 @@ "mimic-fn": "^1.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -3852,28 +4169,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - } - }, - "read-pkg-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-5.0.0.tgz", - "integrity": "sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^5.0.0" - } - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -3881,16 +4176,7 @@ "dev": true, "requires": { "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" + "signal-exit": "^3.0.2" } }, "semver": { @@ -3924,15 +4210,6 @@ "ansi-regex": "^3.0.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -3949,12 +4226,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, "untildify": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", @@ -3983,50 +4254,6 @@ "text-table": "^0.2.0", "untildify": "^3.0.3" } - }, - "yeoman-generator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-4.0.1.tgz", - "integrity": "sha512-QFSHcJHfDwqNdcr5RPSCPLnRzVpPuDWb6By2Uz77YByqBqvR/r9QGBucCl58hs5QJl4NFgLFgIHZoNDCJP1byA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "chalk": "^2.4.2", - "cli-table": "^0.3.1", - "cross-spawn": "^6.0.5", - "dargs": "^6.1.0", - "dateformat": "^3.0.3", - "debug": "^4.1.1", - "detect-conflict": "^1.0.0", - "error": "^7.0.2", - "find-up": "^3.0.0", - "github-username": "^3.0.0", - "istextorbinary": "^2.5.1", - "lodash": "^4.17.11", - "make-dir": "^3.0.0", - "mem-fs-editor": "^6.0.0", - "minimist": "^1.2.0", - "pretty-bytes": "^5.2.0", - "read-chunk": "^3.2.0", - "read-pkg-up": "^5.0.0", - "rimraf": "^2.6.3", - "run-async": "^2.0.0", - "shelljs": "^0.8.3", - "text-table": "^0.2.0", - "through2": "^3.0.1", - "yeoman-environment": "^2.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - } - } } } }, @@ -4045,6 +4272,30 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -4063,15 +4314,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4081,6 +4323,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -4109,22 +4371,13 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "@salesforce/plugin-user": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@salesforce/plugin-user/-/plugin-user-1.7.0.tgz", - "integrity": "sha512-J0Ot++HMIpyMmZ02DM6NPJWqapw1UBXBu3MuK5rizUMVZQeqsIK5wi4ZyC6X6nsAKNQKbVXDN0avSC/cnUcAnQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@salesforce/plugin-user/-/plugin-user-1.7.1.tgz", + "integrity": "sha512-nM0j/AqtJYV9VH67DSQ/TkXlB3J1SxlngOH8byzyPWTAhbrNDFxo44Up7nsiLYyrdMrKrmJ3eOWjDm9rKRFUtA==", "dev": true, "requires": { "@oclif/config": "^1.18.1", @@ -4134,6 +4387,30 @@ "tslib": "^2" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -4152,15 +4429,6 @@ "cli-ux": "^4.9.3" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4170,6 +4438,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -4198,15 +4486,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -4262,9 +4541,9 @@ } }, "@salesforce/sfdx-scanner": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@salesforce/sfdx-scanner/-/sfdx-scanner-2.12.0.tgz", - "integrity": "sha512-0v7hA9c1y7DUUbbAAGA2ngr9cqQVUbiUgoaXCKoQYMFfEV2aSLft5MjAJ377lUNV8pjwPzeId2ndvIscNoZX/g==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@salesforce/sfdx-scanner/-/sfdx-scanner-2.13.0.tgz", + "integrity": "sha512-SGlDc4x4D2sGkKvmspg+7x2ZWHkOqg/AnunoXEWlA4ubDvM+VdralN8taJ8H/n3fESi7XEAYqge/nNZ9mo7T1g==", "dev": true, "requires": { "@lwc/eslint-plugin-lwc": "^0.10.0", @@ -4301,9 +4580,9 @@ } }, "@salesforce/source-deploy-retrieve": { - "version": "5.9.8", - "resolved": "https://registry.npmjs.org/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-5.9.8.tgz", - "integrity": "sha512-bNIepXK0ClrmZC2uHNpsw5M0GS8OSC4+Nqf5FnnNT+cZFz81RY/e99+I2GLQosWGySZaTxE+FBdJUe2JTYHpAQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-5.12.0.tgz", + "integrity": "sha512-TCVqEE+08XVxSERVNLrQI11hDs62BUaTQN/I9TovHz61EayChMa79/DERlEXdSM+gdsKYrbpsEMgpBZL20vuPg==", "dev": true, "requires": { "@salesforce/core": "^2.35.0", @@ -4319,9 +4598,9 @@ } }, "@salesforce/source-tracking": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@salesforce/source-tracking/-/source-tracking-1.0.2.tgz", - "integrity": "sha512-056b2Ia9JAJGv+W2ByOHLrkCP0zEjzpvT43IqE6HUYbSDqm1T1InFeCtLWy8S4uzlMtiUx34mKshkDoj8lIQQA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@salesforce/source-tracking/-/source-tracking-1.1.1.tgz", + "integrity": "sha512-yxtO3TikyTGhDoMQ/zBXvgzYnDKcZntOqozycEif4ZxKEjaa9ot04oOUTTtMa+E8X8SD2QOQXqJ1tcfDNX5ZkA==", "dev": true, "requires": { "@salesforce/core": "^2.33.1", @@ -4344,9 +4623,9 @@ } }, "@salesforce/templates": { - "version": "53.3.0", - "resolved": "https://registry.npmjs.org/@salesforce/templates/-/templates-53.3.0.tgz", - "integrity": "sha512-/jfqmN51KO0eF6vljVrAlrF8nprvsRRcYF+GhsU/lnmyRIaRXVdeymerAsEOLNU1O8vTA/JrzDwXh1ZGfYP7eQ==", + "version": "53.6.0", + "resolved": "https://registry.npmjs.org/@salesforce/templates/-/templates-53.6.0.tgz", + "integrity": "sha512-Qrpw+/i+WlOj1TkiayRaRGSF8S375VIS7qn0dpC8vqFdFujtPoafRbbQfxvGUDUJhbUiyg7zuzybP1lRcSCvrA==", "dev": true, "requires": { "@salesforce/core": "^2.33.1", @@ -4355,7 +4634,7 @@ "tar": "^6.1.10", "tslib": "^1", "yeoman-environment": "2.4.0", - "yeoman-generator": "4.0.1" + "yeoman-generator": "^4.8.2" }, "dependencies": { "@nodelib/fs.stat": { @@ -4388,15 +4667,6 @@ "array-uniq": "^1.0.1" } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -4557,15 +4827,6 @@ } } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4720,16 +4981,6 @@ } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -4778,42 +5029,6 @@ "mimic-fn": "^1.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -4829,28 +5044,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - } - }, - "read-pkg-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-5.0.0.tgz", - "integrity": "sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^5.0.0" - } - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -4861,15 +5054,6 @@ "signal-exit": "^3.0.2" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -4926,12 +5110,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, "untildify": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", @@ -4955,54 +5133,10 @@ "is-scoped": "^1.0.0", "lodash": "^4.17.10", "log-symbols": "^2.2.0", - "mem-fs": "^1.1.0", - "strip-ansi": "^4.0.0", - "text-table": "^0.2.0", - "untildify": "^3.0.3" - } - }, - "yeoman-generator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-4.0.1.tgz", - "integrity": "sha512-QFSHcJHfDwqNdcr5RPSCPLnRzVpPuDWb6By2Uz77YByqBqvR/r9QGBucCl58hs5QJl4NFgLFgIHZoNDCJP1byA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "chalk": "^2.4.2", - "cli-table": "^0.3.1", - "cross-spawn": "^6.0.5", - "dargs": "^6.1.0", - "dateformat": "^3.0.3", - "debug": "^4.1.1", - "detect-conflict": "^1.0.0", - "error": "^7.0.2", - "find-up": "^3.0.0", - "github-username": "^3.0.0", - "istextorbinary": "^2.5.1", - "lodash": "^4.17.11", - "make-dir": "^3.0.0", - "mem-fs-editor": "^6.0.0", - "minimist": "^1.2.0", - "pretty-bytes": "^5.2.0", - "read-chunk": "^3.2.0", - "read-pkg-up": "^5.0.0", - "rimraf": "^2.6.3", - "run-async": "^2.0.0", - "shelljs": "^0.8.3", - "text-table": "^0.2.0", - "through2": "^3.0.1", - "yeoman-environment": "^2.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - } + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.3" } } } @@ -5038,9 +5172,9 @@ "dev": true }, "@sindresorhus/is": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz", - "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, "@szmarczak/http-timer": { @@ -5052,6 +5186,12 @@ "defer-to-connect": "^2.0.0" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -5102,9 +5242,9 @@ "dev": true }, "@types/jsforce": { - "version": "1.9.40", - "resolved": "https://registry.npmjs.org/@types/jsforce/-/jsforce-1.9.40.tgz", - "integrity": "sha512-Zj53GKHjmrpbVmItS+XlenPFHtQAntADjt8g1zEs05dVfvfCHEty9NnlKTjwYA49BRNi4tD3S8TZb/gRgC0FyA==", + "version": "1.9.41", + "resolved": "https://registry.npmjs.org/@types/jsforce/-/jsforce-1.9.41.tgz", + "integrity": "sha512-J0dReK6EPGR98b4fAowqqQqFXH4DGtPxY2lLrZGcuCthrHYkYNrKnfGf2xM1jwiBC5CGdSEDmWEDwRwwmX25tA==", "dev": true, "requires": { "@types/node": "*" @@ -5126,9 +5266,9 @@ } }, "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "version": "4.14.179", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", + "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", "dev": true }, "@types/minimatch": { @@ -5147,9 +5287,9 @@ } }, "@types/node": { - "version": "17.0.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.16.tgz", - "integrity": "sha512-ydLaGVfQOQ6hI1xK2A5nVh8bl0OGoIfYMxPWHqqYe9bTkWCfqiVvZoh2I/QF2sNSkZzZyROBoTefIEI+PB6iIA==", + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true }, "@types/normalize-package-data": { @@ -5277,6 +5417,12 @@ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "adm-zip": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", @@ -5545,6 +5691,15 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -5829,6 +5984,12 @@ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "dev": true }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -6592,6 +6753,12 @@ "assert-plus": "^1.0.0" } }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "dev": true + }, "date-fns": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", @@ -6605,9 +6772,9 @@ "dev": true }, "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.8.tgz", + "integrity": "sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==", "dev": true }, "dayjs-plugin-utc": { @@ -6734,16 +6901,28 @@ } } }, + "degenerator": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", + "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "dev": true, + "requires": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.8" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "detect-conflict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", - "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "detect-newline": { @@ -7011,6 +7190,28 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "eslint": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", @@ -7729,6 +7930,12 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", + "dev": true + }, "filelist": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", @@ -7849,9 +8056,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", "dev": true }, "for-in": { @@ -7968,6 +8175,42 @@ } } }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -8022,6 +8265,20 @@ "get-intrinsic": "^1.1.1" } }, + "get-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", + "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "data-uri-to-buffer": "3", + "debug": "4", + "file-uri-to-path": "2", + "fs-extra": "^8.1.0", + "ftp": "^0.3.10" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -8590,12 +8847,36 @@ } } }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, "http-parser-js": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", "dev": true }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -8769,6 +9050,12 @@ "p-is-promise": "^1.1.0" } }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -9086,9 +9373,9 @@ "dev": true }, "isomorphic-git": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.11.2.tgz", - "integrity": "sha512-7gSW+dMftHYyDufoeLCOagxlN0KsAYvR/qddSke9pnPH8vwL4OwqQ2BvkG0O02OnEFqg1pZXyIzBPFBfOMYXUA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.12.1.tgz", + "integrity": "sha512-Osybppp9GZqaZte9iOSB110rIWpPnsRTAjNFRYXt3MbzA+Q6LUsi9JHcLg1rf32deN3PzLy/fUXE2icw3TX7JA==", "dev": true, "requires": { "async-lock": "^1.1.0", @@ -10163,9 +10450,9 @@ "dev": true }, "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -10385,6 +10672,12 @@ "dev": true, "optional": true }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true + }, "netrc-parser": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/netrc-parser/-/netrc-parser-3.1.6.tgz", @@ -12891,6 +13184,34 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "pac-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", + "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4", + "get-uri": "3", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "5", + "pac-resolver": "^5.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "5" + } + }, + "pac-resolver": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", + "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "dev": true, + "requires": { + "degenerator": "^3.0.1", + "ip": "^1.1.5", + "netmask": "^2.0.1" + } + }, "pad-component": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", @@ -13096,6 +13417,45 @@ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, + "proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", + "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "dev": true, + "requires": { + "agent-base": "^6.0.0", + "debug": "4", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^5.0.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -13147,6 +13507,18 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -13785,9 +14157,9 @@ "dev": true }, "salesforce-alm": { - "version": "53.7.6", - "resolved": "https://registry.npmjs.org/salesforce-alm/-/salesforce-alm-53.7.6.tgz", - "integrity": "sha512-R7wYIGd9kcldD6J6QXf4/tALf7N3rmG4+Qq00B9Q/JygwxpTZ9vSxxQh2smarp2l0h/IbPWcLkADloFpviATnw==", + "version": "53.10.2", + "resolved": "https://registry.npmjs.org/salesforce-alm/-/salesforce-alm-53.10.2.tgz", + "integrity": "sha512-xXnsnQXZs989XnIM7u1JN1b1oqhQb869U46SDJWUfnE/XHtzuvsTr7DNhYtmBIXsfk1aQ32SOs1YYuQYN39Efg==", "dev": true, "requires": { "@oclif/config": "^1.18.1", @@ -13829,6 +14201,39 @@ "xmldom-sfdx-encoding": "^0.1.30" }, "dependencies": { + "@oclif/parser": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz", + "integrity": "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw==", + "dev": true, + "requires": { + "@oclif/errors": "^1.2.2", + "@oclif/linewrap": "^1.0.0", + "chalk": "^4.1.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@salesforce/command": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@salesforce/command/-/command-4.2.2.tgz", @@ -13886,6 +14291,21 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -13902,6 +14322,17 @@ "dev": true, "requires": { "color-convert": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + } } }, "bluebird": { @@ -13931,6 +14362,17 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "clean-stack": { @@ -14027,21 +14469,6 @@ "escape-string-regexp": "4.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -14133,24 +14560,9 @@ } } } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true } } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", @@ -14254,21 +14666,6 @@ "ansi-regex": "^4.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -14376,10 +14773,16 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, "sfdx-cli": { - "version": "7.136.2", - "resolved": "https://registry.npmjs.org/sfdx-cli/-/sfdx-cli-7.136.2.tgz", - "integrity": "sha512-Z4J71UsAsTWD+uNOJUC1smS8FZnNtXj5UbqPWlb20u6bilD9YRYMX1tE2wF6RIjRHyzs2z+PyyAhR9mcijjR5g==", + "version": "7.139.0", + "resolved": "https://registry.npmjs.org/sfdx-cli/-/sfdx-cli-7.139.0.tgz", + "integrity": "sha512-gwWZwQ21RRJsGCtg5yf/NaMz6MJFh8OK4IEKa8jVSuN73wI5l/hjx/Zt68M7WzXb5dH1XCd7yyvlo3jpTgqgpQ==", "dev": true, "requires": { "@oclif/command": "^1.8.0", @@ -14395,27 +14798,28 @@ "@oclif/plugin-which": "^1.0.3", "@salesforce/kit": "^1.5.13", "@salesforce/lazy-require": "^0.4.0", - "@salesforce/plugin-alias": "1.2.0", - "@salesforce/plugin-apex": "0.8.0", + "@salesforce/plugin-alias": "1.2.1", + "@salesforce/plugin-apex": "0.9.0", "@salesforce/plugin-auth": "1.8.1", - "@salesforce/plugin-config": "1.3.15", + "@salesforce/plugin-community": "1.1.4", + "@salesforce/plugin-config": "1.3.19", "@salesforce/plugin-custom-metadata": "1.0.12", - "@salesforce/plugin-data": "0.6.8", - "@salesforce/plugin-generator": "^1.1.7", - "@salesforce/plugin-info": "1.2.0", + "@salesforce/plugin-data": "0.6.9", + "@salesforce/plugin-generator": "1.2.2", + "@salesforce/plugin-info": "1.2.1", "@salesforce/plugin-limits": "1.3.0", "@salesforce/plugin-org": "1.11.1", "@salesforce/plugin-schema": "1.1.0", - "@salesforce/plugin-source": "1.8.9", + "@salesforce/plugin-source": "1.8.12", "@salesforce/plugin-telemetry": "1.4.0", - "@salesforce/plugin-templates": "53.3.0", + "@salesforce/plugin-templates": "53.6.0", "@salesforce/plugin-trust": "^1.0.8", - "@salesforce/plugin-user": "1.7.0", + "@salesforce/plugin-user": "1.7.1", "@salesforce/require-analytics": "^0.9.16", "@salesforce/sfdx-plugin-lwc-test": "0.1.7", "@salesforce/ts-types": "^1.5.17", "debug": "^4.3.1", - "salesforce-alm": "53.7.6", + "salesforce-alm": "53.10.2", "shelljs": "^0.8.4", "tslib": "^2.1.0", "v8-compile-cache": "^2.2.0" @@ -14635,6 +15039,12 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -14757,6 +15167,27 @@ } } }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -14915,6 +15346,12 @@ } } }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, "stdout-stderr": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/stdout-stderr/-/stdout-stderr-0.1.13.tgz", @@ -15295,6 +15732,12 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -15455,6 +15898,12 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -15658,6 +16107,24 @@ "vinyl": "^2.0.1" } }, + "vm2": { + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz", + "integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + } + } + }, "wait-on": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", @@ -15858,6 +16325,12 @@ "integrity": "sha512-NOZCfMfwvCMBlSMBr971cnjmToNswV68A1CA3pnM0WGauo1BhWpTgSsj6Lbq8HNAI2OOdWktCSMLtaZU5wVBHA==", "dev": true }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -15886,9 +16359,9 @@ } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true }, "yarn": { diff --git a/package.json b/package.json index f904eb3..bacf026 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "salesforce-round-robin", "version": "0.0.1", - "description": "Round robin records in Salesforce (SFDC) in Flow & Apex", + "description": "Round robin records in Salesforce (SFDC) using Flow or Apex. Performant, fair, fast assignment with configurable user pools", "repository": { "type": "git", - "url": "https://github.com/jamessimone/apex-rollup" + "url": "https://github.com/jamessimone/salesforce-round-robin" }, "author": "james.simone", "license": "MIT", @@ -21,12 +21,12 @@ "flow" ], "scripts": { - "create:package:round:robin": "pwsh -Command \"&{ . ./scripts/generatePackage.ps1; Generate -PackageName '\"round-robin-assigner\"' -ReadmePath \"./README.md\" }\"", + "create:package:round:robin": "pwsh -Command \"&{ . ./scripts/generatePackage.ps1; Generate -PackageName '\"salesforce-round-robin\"' -ReadmePath \"./README.md\" }\"", "prepare": "sfdx plugins:link ./node_modules/@salesforce/sfdx-scanner", "prettier": "prettier", "scan": "sfdx scanner:run --pmdconfig config/pmd-ruleset.xml --target . --engine pmd --severity-threshold 3", "test": "npm run test:apex", - "test:apex": "sh ./scripts/runLocalTests.sh", + "test:apex": "sfdx force:apex:test:run -w 10", "test:lwc": "echo No LWCs so far!" } -} +} \ No newline at end of file diff --git a/scripts/build-and-promote-package.ps1 b/scripts/build-and-promote-package.ps1 new file mode 100644 index 0000000..d9a7e0c --- /dev/null +++ b/scripts/build-and-promote-package.ps1 @@ -0,0 +1,45 @@ +# This script is invoked by the Github Action on pull requests / merges to main +# It relies on two pieces of information being set manually in your sfdx-project.json: +# the versionDescription and versionNumber for the default package. Using those two pieces of information, +# this script generates a new package version Id per unique Action run, and promotes that package on merges to main +# it also updates the Ids referenced in the README, and bumps the package version number in the package.json file +$DebugPreference = 'Continue' +$ErrorActionPreference = 'Stop' +. .\scripts\generatePackage.ps1 + +function Get-Current-Git-Branch() { + Invoke-Expression 'git rev-parse --abbrev-ref HEAD' +} + +function Start-Package-Promotion { + Write-Debug "Beginning promote script" + + $allReadmes = Get-ChildItem -Exclude node_modules, .sfdx, tests | Get-ChildItem -Filter README.md -Recurse + foreach ($readme in $allReadmes) { + $readmePackageIdResults = (Select-String -Path $readme 'https:\/\/login.salesforce.com\/packaging\/installPackage.apexp\?p0=.{0,18}') + if ($readmePackageIdResults.Matches.Length -gt 0) { + $packageIdSplit = $readmePackageIdResults.Matches[0].Value.Split("=") + if ($packageIdSplit.Length -eq 2) { + $packageId = $packageIdSplit[1] + Write-Debug "Promoting $packageId from $readme" + npx sfdx force:package:version:promote -p $packageId -n + } + } + } + Write-Debug "Finished package promotion!" +} + +if(Test-Path ".\DEVHUB_SFDX_URL.txt") { + npx sfdx auth:sfdxurl:store -f ./DEVHUB_SFDX_URL.txt -a packaging-org + npx sfdx force:config:set defaultdevhubusername=packaging-org +} else { + throw 'No packaging auth info!' +} + +# Create/promote package version(s) +$currentBranch = Get-Current-Git-Branch +if ($currentBranch -eq "main") { + Start-Package-Promotion +} else { + Generate -packageName "salesforce-round-robin" -readmePath "./README.md" +} diff --git a/scripts/generatePackage.ps1 b/scripts/generatePackage.ps1 index cf47f36..0fe5a26 100644 --- a/scripts/generatePackage.ps1 +++ b/scripts/generatePackage.ps1 @@ -24,9 +24,13 @@ function Update-Package-Install-Links { function Get-Is-Version-Promoted { param ($versionNumber, $packageName) $promotedPackageVersions = (npx sfdx force:package:version:list --released --packages $packageName --json | ConvertFrom-Json).result | Select-Object -ExpandProperty Version - $isPackagePromoted = $promotedPackageVersions.Contains($versionNumber) - Write-Host "Is $versionNumber for $packageName promoted? $isPackagePromoted" -ForegroundColor Yellow - return $isPackagePromoted + if ($null -eq $promotedPackageVersions) { + return $false + } else { + $isPackagePromoted = $promotedPackageVersions.Contains($versionNumber) + Write-Host "Is $versionNumber for $packageName promoted? $isPackagePromoted" -ForegroundColor Yellow + return $isPackagePromoted + } } function Get-Package-JSON { @@ -54,7 +58,6 @@ function Get-Next-Package-Version() { } if ("salesforce-round-robin" -eq $packageName) { $versionNumberToWrite = $currentPackageVersion.Remove($currentPackageVersion.LastIndexOf(".0")) - Update-Logger-Class $versionNumberToWrite Write-Host "Bumping package.json version to: $versionNumberToWrite" -ForegroundColor Yellow $packageJson = Get-Package-JSON @@ -78,13 +81,13 @@ function Generate() { $currentPackage = ($sfdxProjectJson.packageDirectories | Select-Object | Where-Object -Property package -eq $packageName) Get-Next-Package-Version $currentPackage $packageName $currentPackageVersion = $currentPackage.versionNumber - $currentPackageName = $currentPackage.versionName Write-Host "Creating package version: $currentPackageVersion ..." -ForegroundColor White - $createPackageResult = npx sfdx force:package:version:create -p $packageName -w 30 -c -x -n $currentPackageVersion -a $currentPackageName --json | ConvertFrom-Json + $createPackageResult = npx sfdx force:package:version:create -p $packageName -w 30 -c -x --json | ConvertFrom-Json $currentPackageVersionId = $createPackageResult.result.SubscriberPackageVersionId if ($null -eq $currentPackageVersionId) { + Write-Host "Package create fail! Result: $createPackageResult" -ForegroundColor Red throw $createPackageResult } else { git add $sfdxProjectJsonPath diff --git a/scripts/updateGithubCommitStatus.sh b/scripts/updateGithubCommitStatus.sh new file mode 100644 index 0000000..16dee15 --- /dev/null +++ b/scripts/updateGithubCommitStatus.sh @@ -0,0 +1,17 @@ +git config --local user.email "action@github.com" +git config --local user.name "GitHub Action Bot" +git commit -m "Bumping package version from Github Action" +git push + +# Once the commit has been uploaded to Github, we need to callout +# to have the commit status set to success - otherwise the PR checks +# won't show up as having been cleared correctly + +latestSha=$(git rev-parse HEAD) + +curl \ + -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: Bearer $GITHUB_TOKEN" \ + https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$latestSha \ + -d '{"state":"success", "description": "Build success!", "context": "scratch-org-test"}' \ No newline at end of file diff --git a/sfdx-project.json b/sfdx-project.json index bc341fe..259eae3 100644 --- a/sfdx-project.json +++ b/sfdx-project.json @@ -8,12 +8,16 @@ "versionNumber": "0.0.1.0", "versionDescription": "Invocable & Apex-ready Round Robin Assigner for Salesforce Flow, Process Builder, Apex and more", "releaseNotesUrl": "https://github.com/jamessimone/salesforce-round-robin/releases/latest" + }, + { + "path": "integration-tests" } ], "namespace": "", "sfdcLoginUrl": "https://login.salesforce.com", "sourceApiVersion": "54.0", "packageAliases": { - "salesforce-round-robin": "0Ho6g000000GnClCAK" + "salesforce-round-robin": "0Ho6g000000GnClCAK", + "salesforce-round-robin@0.0.1-0": "04t6g000008SjNvAAK" } } \ No newline at end of file