diff --git a/cumulusci.yml b/cumulusci.yml index e2c12adc..a94493c5 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -4,7 +4,7 @@ project: package: name: Declarative Lookup Rollup Summaries Tool namespace: dlrs - api_version: "60.0" + api_version: "62.0" git: repo_url: https://github.com/SFDO-Community/declarative-lookup-rollup-summaries prefix_beta: beta/ @@ -28,6 +28,24 @@ tasks: options: path: unpackaged/config/qa + snowfakery_highratio_custom: + description: Create a sample dataset for main objects in CSOM EDA org + class_path: cumulusci.tasks.bulkdata.snowfakery.Snowfakery + options: + recipe: datasets/qa/high-ratio-tests-custom-object.yml + + snowfakery_highratio_standard: + description: Create a sample dataset for main objects in CSOM EDA org + class_path: cumulusci.tasks.bulkdata.snowfakery.Snowfakery + options: + recipe: datasets/qa/high-ratio-tests-stand-object.yml + + snowfakery_lowratio: + description: Create a sample dataset for main objects in CSOM EDA org + class_path: cumulusci.tasks.bulkdata.snowfakery.Snowfakery + options: + recipe: datasets/qa/snowfakerylowratio.yml + robot: options: suites: robot/DLRS/tests @@ -79,10 +97,11 @@ flows: options: apex: QAHelper.updateAppMenuOrdering(); 7: - task: load_dataset - options: - mapping: datasets/qa/mapping.yml - sql_path: datasets/qa/qa_data.sql + task: snowfakery_lowratio + 8: + task: snowfakery_highratio_standard + 9: + task: snowfakery_highratio_custom customer_org: steps: @@ -109,13 +128,6 @@ flows: options: extra: "--sourcepath ./dlrs/libs/fflib-apexmocks,./dlrs/libs/fflib-common,./dlrs/libs/lrengine,./dlrs/libs/metadataservice,./dlrs/main" - config_dev: - steps: - 1.1: - task: deploy - options: - path: unpackaged/config/qa - orgs: scratch: dev_prerelease: @@ -128,6 +140,7 @@ orgs: config_file: orgs/dev.json namespaced: True days: 7 + plans: install: slug: install diff --git a/datasets/qa/high-ratio-tests-custom-object.yml b/datasets/qa/high-ratio-tests-custom-object.yml new file mode 100644 index 00000000..768d4b6a --- /dev/null +++ b/datasets/qa/high-ratio-tests-custom-object.yml @@ -0,0 +1,43 @@ +# Section uses the QA Lookup Parent object to create high ratio data. +# There is one parent, with 25,000 sub-parents each with 1 child. +# There is a second top level parent with all 25,000 children attached. +#QA Lookup Parent Record to be referenced later for Second Lookup on Child +- object: QALookupParent__c + nickname: TopLevelParent + count: 1 + fields: + Name: Top Level Parent High Ratio +#QA Lookup Parent Record that will have child QA Lookup Parent +- object: QALookupParent__c + nickname: TopHierarchyParent + count: 1 + fields: + Name: Top Level of a wide hierarchy + friends: + - object: QALookupParent__c + nickname: CustomParentwithChild + count: 25000 + fields: + Name: QALookupParentwithChild + Self_Relationship__c: + reference: TopHierarchyParent + friends: + - object: QALookupChild__c + nickname: CustomChild + count: 1 + fields: + Name: ${{fake.Text(max_nb_chars = 25)}} + Amount__c: 1000 + Color__c: + random_choice: + - Red + - Yellow + - Green + - Blue + Description__c: ${{fake.Text(max_nb_chars = 200)}} + Description2__c: ${{fake.Text(max_nb_chars = 200)}} + LookupParent__c: + reference: CustomParentwithChild + + LookupParent2__c: + reference: TopLevelParent diff --git a/datasets/qa/high-ratio-tests-stand-objects.yml b/datasets/qa/high-ratio-tests-stand-objects.yml new file mode 100644 index 00000000..be019eff --- /dev/null +++ b/datasets/qa/high-ratio-tests-stand-objects.yml @@ -0,0 +1,110 @@ +# Macros to reduce duplicate field definitions. All non-reference fields for +# each object type should be listed here. We don't bother with Account since +# we just set the Name field. + +# Fields to use on all Contacts +- macro: contact_base + fields: + Firstname: + fake: first_name + Lastname: + fake: last_name + +# Fields to use on Cases +- macro: case_base + fields: + Subject: ${{fake.Text(max_nb_chars = 20)}} + Description: ${{fake.Paragraph(nb_sentences=5)}} + +# Fields to use on Opportunities +- macro: opp_base + fields: + Name: ${{fake.Word}} Opportunity + Stagename: + random_choice: + Prospecting: 5% + Qualification: 5% + Closed Won: 80% + Closed Lost: 10% + CloseDate: + date_between: + start_date: -1y + end_date: today + Amount: + random_number: + min: 1000 + max: 10000 + step: 50 + +- object: Account + count: 1 + nickname: TopLevelAccount + fields: + Name: + fake: Company + friends: + - object: Account + nickname: ChildAccount + fields: + Name: + fake: Company + friends: + - object: Contact # Contacts for the child account + count: 50 + include: contact_base + fields: + AccountId: + reference: ChildAccount + - object: Case # Case for child Account + count: 500 + include: case_base + fields: + AccountId: + reference: ChildAccount + ContactId: + random_reference: + to: Contact + unique: False + - object: Contact # Contacts for the top level account. + count: 50 + include: contact_base + fields: + AccountId: + reference: TopLevelAccount + - object: Case # Case for Parent Account + count: 500 + include: case_base + fields: + AccountId: + reference: TopLevelAccount + ContactId: + random_reference: + to: Contact + unique: False + - object: Opportunity + count: 500 + include: opp_base + fields: + AccountId: + reference: TopLevelAccount + ContactId: + random_reference: + to: Contact + unique: False + friends: + - object: OpportunityContactRole + count: 2 + fields: + OpportunityId: + reference: Opportunity + ContactId: + random_reference: + to: Contact + unique: False + Role: + random_choice: + Business User: 20% + Decision Maker: 20% + Economic Buyer: 20% + Economic Decision Maker: 20% + Evaluator: 20% diff --git a/datasets/qa/snowfakerylowratio.yml b/datasets/qa/snowfakerylowratio.yml new file mode 100644 index 00000000..b8568273 --- /dev/null +++ b/datasets/qa/snowfakerylowratio.yml @@ -0,0 +1,338 @@ +#Load Leads to Test Lead Conversion +- object: Lead + count: 20 + fields: + FirstName: + fake: first_name + LastName: + fake: last_name + company: + fake: Company + title: + fake.text: + max_nb_chars: 15 + email: + fake: email + phone: + fake: phone_number + MobilePhone: + fake: phone_number + Street: + fake: StreetAddress + City: + fake: City + State: + fake: State + PostalCode: + fake: PostalCode + Country: + fake: Country + NumberOfEmployees: + random_number: + min: 0 + max: 10000 + Status: + random_choice: + Open: 40% + Working: 20% + Nurturing: 20% + Qualified: 10% + Unqualified: 10% +#Outlier Campaign with Responses +- object: Campaign + count: 1 + nickname: CampaignResponded + fields: + Name: ${{fake.Text(max_nb_chars = 25)}} Responded + IsActive: TRUE + Status: Completed + StartDate: + date_between: + start_date: -1y + end_date: today + EndDate: + date_between: + start_date: ${{StartDate}} + end_date: today +- object: Campaign + count: 10 + nickname: CampaignSent + fields: + Name: ${{fake.Text(max_nb_chars = 25)}} + IsActive: TRUE + Status: + random_choice: + - In Progress + - Completed + - Aborted + - Planned + StartDate: + date_between: + start_date: -1y + end_date: +1y + EndDate: + date_between: + start_date: ${{StartDate}} + end_date: +1y +#QA Lookup Parent Record to be referenced later for Second Lookup on Child +- object: QALookupParent__c + count: 1 + nickname: CustomParent2 + fields: + Name: QALookupParent2 +#QA Lookup Parent Record that will have child QA Lookup Parent +- object: QALookupParent__c + count: 1 + nickname: CustomParentTop + fields: + Name: QALookupParentTop + friends: + - object: QALookupParent__c + count: 1 + nickname: CustomParentwithChild + fields: + Name: QALookupParentwithChild + Self_Relationship__c: + reference: CustomParentTop + friends: + #Outlier QA Lookup Child with Low Amount and No Parent Lookup 2 + - object: QALookupChild__c + count: 6 + nickname: CustomChild + fields: + Name: ${{fake.Text(max_nb_chars = 25)}} + Amount__c: 7 + Color__c: + random_choice: + - Red + - Yellow + - Green + - Blue + Description__c: ${{fake.Text(max_nb_chars = 200)}} + Description2__c: ${{fake.Text(max_nb_chars = 200)}} + LookupParent__c: + reference: CustomParentwithChild + - object: QALookupChild__c + count: 5 + nickname: CustomChild + fields: + Name: ${{fake.Text(max_nb_chars = 25)}} + Amount__c: 1000 + Color__c: + random_choice: + - Red + - Yellow + - Green + - Blue + Description__c: ${{fake.Text(max_nb_chars = 200)}} + Description2__c: ${{fake.Text(max_nb_chars = 200)}} + LookupParent__c: + reference: CustomParentwithChild + LookupParent2__c: + reference: CustomParent2 +- object: Account + count: 1 + nickname: ParentAccount + fields: + Name: + fake: Company + NumberOfEmployees: 10 + BillingStreet: + fake: street_address + BillingCity: + fake: city + BillingState: + fake: state + BillingPostalCode: + fake: postalcode + BillingCountry: United States +- object: Account + count: 20 + nickname: BusinessOrganization + fields: + Name: + fake: Company + ParentId: + reference: ParentAccount + NumberOfEmployees: 10 + BillingStreet: + fake: street_address + BillingCity: + fake: city + BillingState: + fake: state + BillingPostalCode: + fake: postalcode + BillingCountry: United States + friends: + - object: Contact + count: 2 #2 contacts for every account + nickname: Person + fields: + Firstname: + fake: first_name + Lastname: + fake: last_name + AccountId: + reference: Account + MobilePhone: + random_choice: + - choice: + probability: 50% + pick: + fake: PhoneNumber + - choice: + probability: 50% + pick: "None" + MailingStreet: + fake: street_address + MailingCity: + fake: city + MailingState: + fake: state + MailingPostalCode: + fake: postalcode + MailingCountry: United States + Birthdate: + date_between: + start_date: -1y + end_date: today + friends: + #Outlier Campaign with Responses + - object: CampaignMember + count: 1 + fields: + ContactId: + reference: Person + CampaignId: + random_reference: + to: CampaignResponded + parent: Person + unique: True + Status: Responded + - object: CampaignMember + count: 4 #4 campaign members for every contact + fields: + ContactId: + reference: Person + CampaignId: + random_reference: + to: CampaignSent + parent: Person + unique: True + Status: Sent + #Outlier Closed Case + - object: Case + count: 1 + nickname: ClosedCase + fields: + AccountId: + reference: BusinessOrganization + ContactId: + reference: Person + Origin: Web + Reason: Equipment Design + Status: Closed + Subject: The ${{Contact.Lastname}} Closed Case + #Parent Case + - object: Case + count: 1 + nickname: ParentCase + fields: + AccountId: + reference: BusinessOrganization + ContactId: + reference: Person + Origin: Web + Reason: Equipment Design + Status: Closed + Subject: The ${{Contact.Lastname}} Parent Case + #QA Lookup Parent Record to with lookups to Account and Case + friends: + - object: QALookupParent__c + count: 1 + nickname: CustomParentAcctCase + fields: + Name: QALookupParentAcctCase + Account__c: + reference: ParentAccount + Case__c: + reference: ParentCase + Colours__c: Red;Yellow;Green;Blue + QA_Lookup_Amount_Min__c: 1000 + Total__c: 5000 + - object: Case + count: 3 #3 cases for every contact + nickname: CasewithReferences + fields: + AccountId: + reference: BusinessOrganization + ContactId: + reference: Person + ParentId: + reference: ParentCase + QA_Lookup_Parent__c: + reference: CustomParentwithChild + Origin: + random_choice: + - Phone + - Email + - Web + Reason: + random_choice: + Installation: 20% + Equipment Complexity: 20% + Performance: 20% + Breakdown: 20% + Equipment Design: 20% + Status: + random_choice: + New: 30% + Working: 35% + Escalated: 35% + Subject: The ${{Contact.Lastname}} ${{Case.Reason}} Case + #Outlier Opportunity with High Amount + - object: Opportunity + count: 1 + fields: + name: The ${{Contact.Lastname}} Biggest Opportunity + AccountId: + reference: BusinessOrganization + Stagename: Closed Won + CloseDate: + date_between: + start_date: -1y + end_date: today + Amount: 100000 + - object: Opportunity + count: 3 #3 opportunities for every contact + fields: + name: The ${{Contact.Lastname}} Opportunity + AccountId: + reference: BusinessOrganization + QA_Lookup_Parent__c: + reference: CustomParentwithChild + Stagename: + random_choice: + Prospecting: 40% + Qualification: 40% + Closed Lost: 20% + CloseDate: + date_between: + start_date: -1y + end_date: today + Amount: 1000 + friends: + - object: OpportunityContactRole + fields: + OpportunityId: + reference: Opportunity + ContactId: + reference: Person + Role: + random_choice: + Business User: 20% + Decision Maker: 20% + Economic Buyer: 20% + Economic Decision Maker: 20% + Evaluator: 20% \ No newline at end of file diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_Answer.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_Answer.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_Answer.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_Answer.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_AnswerTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_AnswerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_AnswerTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_AnswerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrder.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrder.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrder.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrder.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrderTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrderTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrderTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_AnyOrderTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocks.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocks.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocks.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocks.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksConfig.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksConfig.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksConfig.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksConfig.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtils.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtils.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtils.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtils.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtilsTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtilsTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtilsTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ApexMocksUtilsTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptor.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptor.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptor.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptor.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptorTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptorTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptorTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_ArgumentCaptorTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_IDGenerator.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_IDGenerator.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_IDGenerator.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_IDGenerator.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_IDGeneratorTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_IDGeneratorTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_IDGeneratorTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_IDGeneratorTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_IMatcher.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_IMatcher.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_IMatcher.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_IMatcher.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_InOrder.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_InOrder.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_InOrder.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_InOrder.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_InOrderTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_InOrderTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_InOrderTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_InOrderTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_Inheritor.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_Inheritor.cls-meta.xml index dd4f37c4..4fc96ebf 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_Inheritor.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_Inheritor.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_InheritorTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_InheritorTest.cls-meta.xml index dd4f37c4..4fc96ebf 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_InheritorTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_InheritorTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_InvocationOnMock.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_InvocationOnMock.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_InvocationOnMock.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_InvocationOnMock.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_Match.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_Match.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_Match.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_Match.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MatchTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MatchTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MatchTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MatchTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitions.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitions.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitions.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitions.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitionsTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitionsTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitionsTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MatcherDefinitionsTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MatchersReturnValue.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MatchersReturnValue.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MatchersReturnValue.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MatchersReturnValue.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValues.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValues.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValues.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValues.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValuesTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValuesTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValuesTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodArgValuesTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodCountRecorder.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodCountRecorder.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodCountRecorder.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodCountRecorder.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValue.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValue.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValue.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValue.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValueRecorder.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValueRecorder.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValueRecorder.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodReturnValueRecorder.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodVerifier.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodVerifier.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MethodVerifier.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MethodVerifier.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_Mocks.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_Mocks.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_Mocks.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_Mocks.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_MyList.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_MyList.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_MyList.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_MyList.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethod.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethod.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethod.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethod.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodAndArgValues.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodAndArgValues.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodAndArgValues.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodAndArgValues.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_QualifiedMethodTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_System.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_System.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_System.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_System.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_SystemTest.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_SystemTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_SystemTest.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_SystemTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-apexmocks/classes/fflib_VerificationMode.cls-meta.xml b/dlrs/libs/fflib-apexmocks/classes/fflib_VerificationMode.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-apexmocks/classes/fflib_VerificationMode.cls-meta.xml +++ b/dlrs/libs/fflib-apexmocks/classes/fflib_VerificationMode.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_Application.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_Application.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_Application.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_Application.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_ApplicationTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_ApplicationTest.cls-meta.xml index b6afc265..baba13ad 100644 --- a/dlrs/libs/fflib-common/classes/fflib_ApplicationTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_ApplicationTest.cls-meta.xml @@ -1,4 +1,4 @@ - 60.0 + 62.0 diff --git a/dlrs/libs/fflib-common/classes/fflib_ISObjectDomain.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_ISObjectDomain.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_ISObjectDomain.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_ISObjectDomain.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_ISObjectSelector.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_ISObjectSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_ISObjectSelector.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_ISObjectSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_ISObjectUnitOfWork.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_ISObjectUnitOfWork.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_ISObjectUnitOfWork.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_ISObjectUnitOfWork.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_QueryFactory.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_QueryFactory.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_QueryFactory.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_QueryFactory.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_QueryFactoryTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_QueryFactoryTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_QueryFactoryTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_QueryFactoryTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectDescribe.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectDescribe.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectDescribe.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectDescribe.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectDescribeTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectDescribeTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectDescribeTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectDescribeTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectDomain.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectDomain.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectDomain.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectDomain.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectDomainTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectDomainTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectDomainTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectDomainTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectMocks.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectMocks.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectMocks.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectMocks.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectSelector.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectSelector.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectSelectorTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectSelectorTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectSelectorTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectSelectorTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWork.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWork.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWork.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWork.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWorkTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWorkTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWorkTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SObjectUnitOfWorkTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SecurityUtils.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SecurityUtils.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SecurityUtils.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SecurityUtils.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_SecurityUtilsTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_SecurityUtilsTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_SecurityUtilsTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_SecurityUtilsTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_StringBuilder.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_StringBuilder.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_StringBuilder.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_StringBuilder.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/fflib-common/classes/fflib_StringBuilderTest.cls-meta.xml b/dlrs/libs/fflib-common/classes/fflib_StringBuilderTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/fflib-common/classes/fflib_StringBuilderTest.cls-meta.xml +++ b/dlrs/libs/fflib-common/classes/fflib_StringBuilderTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/lrengine/classes/LREngine.cls-meta.xml b/dlrs/libs/lrengine/classes/LREngine.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/lrengine/classes/LREngine.cls-meta.xml +++ b/dlrs/libs/lrengine/classes/LREngine.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/lrengine/classes/TestLREngine.cls-meta.xml b/dlrs/libs/lrengine/classes/TestLREngine.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/lrengine/classes/TestLREngine.cls-meta.xml +++ b/dlrs/libs/lrengine/classes/TestLREngine.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/metadataservice/classes/MetadataService.cls-meta.xml b/dlrs/libs/metadataservice/classes/MetadataService.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/metadataservice/classes/MetadataService.cls-meta.xml +++ b/dlrs/libs/metadataservice/classes/MetadataService.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/metadataservice/classes/MetadataServiceTest.cls-meta.xml b/dlrs/libs/metadataservice/classes/MetadataServiceTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/libs/metadataservice/classes/MetadataServiceTest.cls-meta.xml +++ b/dlrs/libs/metadataservice/classes/MetadataServiceTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/libs/metadataservice/components/zip.component-meta.xml b/dlrs/libs/metadataservice/components/zip.component-meta.xml index 7ba687fa..0d633162 100644 --- a/dlrs/libs/metadataservice/components/zip.component-meta.xml +++ b/dlrs/libs/metadataservice/components/zip.component-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 1 diff --git a/dlrs/libs/metadataservice/components/zipEntry.component-meta.xml b/dlrs/libs/metadataservice/components/zipEntry.component-meta.xml index 2d9f01c7..7a504057 100644 --- a/dlrs/libs/metadataservice/components/zipEntry.component-meta.xml +++ b/dlrs/libs/metadataservice/components/zipEntry.component-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 1 diff --git a/dlrs/main/aura/optimizer/optimizer.cmp-meta.xml b/dlrs/main/aura/optimizer/optimizer.cmp-meta.xml index 5b2abc2b..2b11f444 100644 --- a/dlrs/main/aura/optimizer/optimizer.cmp-meta.xml +++ b/dlrs/main/aura/optimizer/optimizer.cmp-meta.xml @@ -3,6 +3,6 @@ xmlns="urn:metadata.tooling.soap.sforce.com" fqn="optimizer" > - 60.0 + 62.0 A Lightning Component Bundle diff --git a/dlrs/main/aura/optimizerNotification/optimizerNotification.cmp-meta.xml b/dlrs/main/aura/optimizerNotification/optimizerNotification.cmp-meta.xml index 7535af7e..f63827f8 100644 --- a/dlrs/main/aura/optimizerNotification/optimizerNotification.cmp-meta.xml +++ b/dlrs/main/aura/optimizerNotification/optimizerNotification.cmp-meta.xml @@ -3,6 +3,6 @@ xmlns="urn:metadata.tooling.soap.sforce.com" fqn="optimizerNotification" > - 60.0 + 62.0 A Lightning Component Bundle diff --git a/dlrs/main/classes/ApexClassesSelector.cls-meta.xml b/dlrs/main/classes/ApexClassesSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/ApexClassesSelector.cls-meta.xml +++ b/dlrs/main/classes/ApexClassesSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/ApexTriggersSelector.cls-meta.xml b/dlrs/main/classes/ApexTriggersSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/ApexTriggersSelector.cls-meta.xml +++ b/dlrs/main/classes/ApexTriggersSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/AsyncApexJobsSelector.cls b/dlrs/main/classes/AsyncApexJobsSelector.cls index 04734c23..cb7010b4 100644 --- a/dlrs/main/classes/AsyncApexJobsSelector.cls +++ b/dlrs/main/classes/AsyncApexJobsSelector.cls @@ -31,6 +31,7 @@ public class AsyncApexJobsSelector extends fflib_SObjectSelector { AsyncApexJob.Status, AsyncApexJob.ExtendedStatus, AsyncApexJob.CreatedDate, + AsyncApexJob.CronTriggerId, AsyncApexJob.CompletedDate, AsyncApexJob.JobItemsProcessed, AsyncApexJob.TotalJobItems, @@ -63,11 +64,59 @@ public class AsyncApexJobsSelector extends fflib_SObjectSelector { String query = newQueryFactory() .setCondition( 'JobType = :jobType And ' + - 'ApexClass.Name in :classNames And ' + - 'Status in :statuses' + 'ApexClass.Name in :classNames And ' + + 'Status in :statuses' ) .toSOQL(); List jobs = (List) Database.query(query); return jobs.size() > 0; } + + /** + * Get all scheduled instances of a class + **/ + public List getScheduledInstancesOfType(Type classType) { + String classFullyQualifiedName = classType.getName(); + List nameParts = classFullyQualifiedName.split('\\.'); + + // Probably doesn't work for inner-classes in this format + String namespace; + if (nameParts.size() > 1) { + namespace = nameParts.remove(0); + } + String className = nameParts.remove(0); + + String query = newQueryFactory() + .selectFields( + new List{ + 'ApexClass.Name', + 'CronTrigger.CronJobDetail.Name', + 'CronTrigger.CronExpression', + 'CronTrigger.NextFireTime' + } + ) + .setCondition( + 'Status != \'Aborted\' AND ' + + 'JobType = \'ScheduledApex\' AND ' + + 'ApexClass.Name = :className AND ' + + 'ApexClass.NamespacePrefix = :namespace' + ) + .addOrdering( + 'CronTrigger.NextFireTime', + fflib_QueryFactory.SortOrder.ASCENDING + ) + .toSOQL(); + return Database.query(query); + } + + /** + * Get all scheduled instances of a class + **/ + public List getAllScheduledJobs() { + String query = newQueryFactory() + .selectField('CronTrigger.CronJobDetail.Name') + .setCondition('JobType = \'ScheduledApex\' AND Status != \'Aborted\'') + .toSOQL(); + return Database.query(query); + } } diff --git a/dlrs/main/classes/AsyncApexJobsSelector.cls-meta.xml b/dlrs/main/classes/AsyncApexJobsSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/AsyncApexJobsSelector.cls-meta.xml +++ b/dlrs/main/classes/AsyncApexJobsSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/AsyncApexJobsSelectorTest.cls b/dlrs/main/classes/AsyncApexJobsSelectorTest.cls new file mode 100644 index 00000000..132c6a24 --- /dev/null +++ b/dlrs/main/classes/AsyncApexJobsSelectorTest.cls @@ -0,0 +1,68 @@ +@isTest +private class AsyncApexJobsSelectorTest { + @isTest + static void testGetScheduledInstancesOfType() { + List jobs = new AsyncApexJobsSelector().getAllScheduledJobs(); + Integer jobCountStart = jobs.size(); + if (jobCountStart > 98) { + System.debug('not enough capacity to schedule new, exiting early'); + return; + } + + // we don't get database isolation here + // ensure tests here don't break if extra jobs are scheduled + String jobId1 = System.schedule( + 'TestJob112233', + '0 0 * * * ? 2100', + new RollupJob() + ); + String jobId2 = System.schedule( + 'TestJob998877', + '0 0 * * * ? 2101', + new RollupJob() + ); + + jobs = new AsyncApexJobsSelector().getAllScheduledJobs(); + Assert.areEqual( + 2, + jobs.size() - jobCountStart, + 'Expected total scheduled jobs to have increased by two' + ); + + jobs = new List( + new AsyncApexJobsSelector().getScheduledInstancesOfType(RollupJob.class) + ); + + Assert.isTrue( + jobs.size() >= 2, + 'Exepcted at least 2 jobs, found ' + jobs.size() + ); + + Boolean hasJob1 = false; + Boolean hasJob2 = false; + + for (AsyncApexJob job : jobs) { + if (job.CronTriggerId == (Id) jobId1) { + hasJob1 = true; + } + if (job.CronTriggerId == (Id) jobId2) { + hasJob2 = true; + } + } + + Assert.isTrue( + hasJob1, + 'Expected ' + jobId1 + ' to be included in jobs list:' + jobs + ); + Assert.isTrue( + hasJob2, + 'Expected ' + jobId2 + ' to be included in jobs list:' + jobs + ); + + // clear jobs + System.abortJob(jobId1); + System.abortJob(jobId2); + + Assert.isTrue(jobs.size() >= 2, 'Expected at least two jobs scheduled'); + } +} diff --git a/dlrs/main/classes/AsyncApexJobsSelectorTest.cls-meta.xml b/dlrs/main/classes/AsyncApexJobsSelectorTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/AsyncApexJobsSelectorTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/BypassHandler.cls b/dlrs/main/classes/BypassHandler.cls index 5accb586..efd0c72e 100644 --- a/dlrs/main/classes/BypassHandler.cls +++ b/dlrs/main/classes/BypassHandler.cls @@ -31,30 +31,31 @@ * The bypass and removebypass method return the result of the default Set object operations. **/ public without sharing class BypassHandler { - private static Set bypassedRollups; + private static Set bypassedRollups = new Set(); + private static Boolean bypassAll = false; /** - * Initialize the set if necessary for adding rollups to the bypass list. + * Checks if the rollup is bypassed or not. Returns true if it is. False otherwise. + * Could be bypassed by custom setting, bypass all, or specific named bypass */ - private static void init() { - if (bypassedRollups == null) { - bypassedRollups = new Set(); - } + public static Boolean isBypassed(String handlerName) { + return DeclarativeLookupRollupSummaries__c.getInstance() + .DisableDLRSGlobally__c == true || + bypassAll || + bypassedRollups.contains(handlerName); } /** - * Checks if the rollup is bypassed or not. Returns true if it is. False otherwise. + * Sets a global bypass value, if true all rollups will be disabled for execution */ - public static Boolean isBypassed(String handlerName) { - return bypassedRollups != null && bypassedRollups.contains(handlerName); + public static void setBypassAll(Boolean val) { + bypassAll = val; } /** * Adds a rollup to the bypassed rollups list. */ public static Boolean bypass(String handlerName) { - init(); - if (handlerName != null) { System.debug( LoggingLevel.INFO, @@ -75,7 +76,7 @@ public without sharing class BypassHandler { * Clears the bypass for a single rollup. */ public static Boolean clearBypass(String handlerName) { - if (bypassedRollups != null && handlerName != null) { + if (handlerName != null) { System.debug( LoggingLevel.INFO, 'DLRS trigger handler is no longer bypassed: ' + handlerName @@ -95,6 +96,7 @@ public without sharing class BypassHandler { * Clears all bypasses, if any. */ public static void clearAllBypasses() { + bypassAll = false; if (bypassedRollups != null) { bypassedRollups.clear(); } diff --git a/dlrs/main/classes/BypassHandler.cls-meta.xml b/dlrs/main/classes/BypassHandler.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/BypassHandler.cls-meta.xml +++ b/dlrs/main/classes/BypassHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/BypassHandlerTest.cls b/dlrs/main/classes/BypassHandlerTest.cls index 52d69340..866e5614 100644 --- a/dlrs/main/classes/BypassHandlerTest.cls +++ b/dlrs/main/classes/BypassHandlerTest.cls @@ -28,54 +28,85 @@ private class BypassHandlerTest { @IsTest static void testApi() { String rollupUniqueName = 'SampleRollup'; - Boolean bypassResult; - - Test.startTest(); - System.assertEquals( - false, + Assert.isFalse( BypassHandler.isBypassed(rollupUniqueName), 'The rollup should not be bypassed yet.' ); - bypassResult = BypassHandler.bypass(rollupUniqueName); - System.assert( - bypassResult, + + Assert.isTrue( + BypassHandler.bypass(rollupUniqueName), 'Should have modified the bypassed rollups set.' ); - System.assertEquals( - true, + Assert.isTrue( BypassHandler.isBypassed(rollupUniqueName), 'The rollup should be bypassed.' ); - bypassResult = BypassHandler.clearBypass(rollupUniqueName); - System.assert( - bypassResult, + + Assert.isTrue( + BypassHandler.clearBypass(rollupUniqueName), 'Should have modified the bypassed rollups set.' ); - System.assertEquals( - false, + Assert.isFalse( BypassHandler.isBypassed(rollupUniqueName), 'The rollup should not be bypassed anymore.' ); BypassHandler.bypass(rollupUniqueName); BypassHandler.clearAllBypasses(); - System.assertEquals( - false, + Assert.isFalse( BypassHandler.isBypassed(rollupUniqueName), 'The rollup should not be bypassed anymore.' ); - bypassResult = BypassHandler.bypass(null); - System.assertEquals( - false, - bypassResult, + Assert.isFalse( + BypassHandler.bypass(null), 'Should return "false" for a null rollup name.' ); - bypassResult = BypassHandler.clearBypass(null); - System.assertEquals( - false, - bypassResult, + + Assert.isFalse( + BypassHandler.clearBypass(null), 'Should return "false" for a null rollup name.' ); - Test.stopTest(); + + BypassHandler.setBypassAll(true); + Assert.isTrue( + BypassHandler.isBypassed(rollupUniqueName), + 'Should return "true" for all rollup names.' + ); + Assert.isTrue( + BypassHandler.isBypassed('new name'), + 'Should return "true" for all rollup names.' + ); + BypassHandler.setBypassAll(false); + + Assert.isFalse( + BypassHandler.isBypassed(rollupUniqueName), + 'Should return "false" for all rollup names.' + ); + Assert.isFalse( + BypassHandler.isBypassed('new name'), + 'Should return "false" for all rollup names.' + ); + BypassHandler.setBypassAll(true); + Assert.isTrue( + BypassHandler.isBypassed('new name'), + 'Should return "true" for all rollup names.' + ); + BypassHandler.clearAllBypasses(); + Assert.isFalse( + BypassHandler.isBypassed('new name'), + 'Should return "false" for all rollup names.' + ); + } + + @IsTest + static void testCustomSettingDisable() { + String rollupUniqueName = 'Rollup1'; + Assert.isFalse(BypassHandler.isBypassed(rollupUniqueName)); + + DeclarativeLookupRollupSummaries__c settings = DeclarativeLookupRollupSummaries__c.getInstance(); + settings.DisableDLRSGlobally__c = true; + insert settings; + + Assert.isTrue(BypassHandler.isBypassed(rollupUniqueName)); } } diff --git a/dlrs/main/classes/BypassHandlerTest.cls-meta.xml b/dlrs/main/classes/BypassHandlerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/BypassHandlerTest.cls-meta.xml +++ b/dlrs/main/classes/BypassHandlerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/CronJobDetailsSelector.cls-meta.xml b/dlrs/main/classes/CronJobDetailsSelector.cls-meta.xml index fd91398d..1b5e154f 100644 --- a/dlrs/main/classes/CronJobDetailsSelector.cls-meta.xml +++ b/dlrs/main/classes/CronJobDetailsSelector.cls-meta.xml @@ -3,6 +3,6 @@ xmlns="urn:metadata.tooling.soap.sforce.com" fqn="CronJobDetailsSelector" > - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/CronTriggersSelector.cls-meta.xml b/dlrs/main/classes/CronTriggersSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/CronTriggersSelector.cls-meta.xml +++ b/dlrs/main/classes/CronTriggersSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/CustomMetadataService.cls b/dlrs/main/classes/CustomMetadataService.cls index 070b5bcf..9fe5eb12 100644 --- a/dlrs/main/classes/CustomMetadataService.cls +++ b/dlrs/main/classes/CustomMetadataService.cls @@ -39,6 +39,46 @@ public class CustomMetadataService { ) { } + /** + * Starts async metadata save using Apex Metadata API + */ + public static Id initiateMetadataSave(List records) { + Metadata.DeployContainer mdContainer = new Metadata.DeployContainer(); + for (SObject r : records) { + // Setup custom metadata to be created in the subscriber org. + Metadata.CustomMetadata customMetadata = new Metadata.CustomMetadata(); + // Developer name and Label are applied here + customMetadata.fullName = + r.getSObjectType().getDescribe().getName() + + '.' + + (String) r.get('DeveloperName'); + customMetadata.label = (String) r.get('Label'); + Metadata.CustomMetadata mdt = new Metadata.CustomMetadata(); + Map populatedFields = r.getPopulatedFieldsAsMap(); + // We don't want these in values + List ignoredKeys = new List{ + 'Id', + 'DeveloperName', + 'Label' + }; + for (String key : populatedFields.keySet()) { + if (ignoredKeys.contains(key)) { + continue; + } + Metadata.CustomMetadataValue customField = new Metadata.CustomMetadataValue(); + customField.field = key; + customField.value = populatedFields.get(key); + customMetadata.values.add(customField); + } + + mdContainer.addMetadata(customMetadata); + } + + ApexMdApiDeployCallback cb = new ApexMdApiDeployCallback(); + // Enqueue custom metadata deployment + return Metadata.Operations.enqueueDeployment(mdContainer, cb); + } + /** * Insert the given Custom Metadata records into the orgs config **/ @@ -75,8 +115,8 @@ public class CustomMetadataService { for (String customMetadataFullName : customMetadataFullNames) qualifiedFullNames.add( qualifiedMetadataType.getDescribe().getName() + - '.' + - customMetadataFullName + '.' + + customMetadataFullName ); List results = service.deleteMetadata( 'CustomMetadata', @@ -85,6 +125,21 @@ public class CustomMetadataService { handleDeleteResults(results[0]); } + /** + * Delete the given Custom Metadata records from the org using Async action + **/ + public static Id deleteMetadataAsync( + SObjectType qualifiedMetadataType, + List customMetadataFullNames + ) { + return System.enqueueJob( + new DeleteMetadataQueueable( + qualifiedMetadataType, + customMetadataFullNames + ) + ); + } + public class CustomMetadataServiceException extends Exception { } @@ -156,20 +211,20 @@ public class CustomMetadataService { List messages = new List(); messages.add( (saveResult.errors.size() == 1 ? 'Error ' : 'Errors ') + - 'occured processing component ' + - saveResult.fullName + - '.' + 'occured processing component ' + + saveResult.fullName + + '.' ); for (MetadataService.Error error : saveResult.errors) messages.add( error.message + - ' (' + - error.statusCode + - ').' + - (error.fields != null && - error.fields.size() > 0 - ? ' Fields ' + String.join(error.fields, ',') + '.' - : '') + ' (' + + error.statusCode + + ').' + + (error.fields != null && + error.fields.size() > 0 + ? ' Fields ' + String.join(error.fields, ',') + '.' + : '') ); if (messages.size() > 0) throw new CustomMetadataServiceException(String.join(messages, ' ')); @@ -194,20 +249,20 @@ public class CustomMetadataService { List messages = new List(); messages.add( (deleteResult.errors.size() == 1 ? 'Error ' : 'Errors ') + - 'occured processing component ' + - deleteResult.fullName + - '.' + 'occured processing component ' + + deleteResult.fullName + + '.' ); for (MetadataService.Error error : deleteResult.errors) messages.add( error.message + - ' (' + - error.statusCode + - ').' + - (error.fields != null && - error.fields.size() > 0 - ? ' Fields ' + String.join(error.fields, ',') + '.' - : '') + ' (' + + error.statusCode + + ').' + + (error.fields != null && + error.fields.size() > 0 + ? ' Fields ' + String.join(error.fields, ',') + '.' + : '') ); if (messages.size() > 0) throw new CustomMetadataServiceException(String.join(messages, ' ')); @@ -217,4 +272,62 @@ public class CustomMetadataService { 'Request failed with no specified error.' ); } + + @TestVisible + class ApexMdApiDeployCallback implements Metadata.DeployCallback { + public void handleResult( + Metadata.DeployResult result, + Metadata.DeployCallbackContext context + ) { + UserNotification__e updateEvent = new UserNotification__e( + Type__c = 'DeploymentResult', + Payload__c = JSON.serialize(result) + ); + EventBus.publish(updateEvent); + } + } + + @TestVisible + class DeleteMetadataQueueable implements Queueable, Database.AllowsCallouts { + SObjectType qualifiedMetadataType; + List customMetadataFullNames; + public DeleteMetadataQueueable( + SObjectType qualifiedMetadataType, + List customMetadataFullNames + ) { + this.qualifiedMetadataType = qualifiedMetadataType; + this.customMetadataFullNames = customMetadataFullNames; + } + + public void execute(QueueableContext ctx) { + try { + CustomMetadataService.deleteMetadata( + qualifiedMetadataType, + customMetadataFullNames + ); + UserNotification__e updateEvent = new UserNotification__e( + Type__c = 'DeleteRequestResult', + Payload__c = JSON.serialize( + new Map{ + 'success' => true, + 'metadataNames' => customMetadataFullNames + } + ) + ); + EventBus.publish(updateEvent); + } catch (CustomMetadataService.CustomMetadataServiceException e) { + UserNotification__e updateEvent = new UserNotification__e( + Type__c = 'DeleteRequestResult', + Payload__c = JSON.serialize( + new Map{ + 'success' => false, + 'metadataNames' => customMetadataFullNames, + 'error' => e.getMessage() + } + ) + ); + EventBus.publish(updateEvent); + } + } + } } diff --git a/dlrs/main/classes/CustomMetadataService.cls-meta.xml b/dlrs/main/classes/CustomMetadataService.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/CustomMetadataService.cls-meta.xml +++ b/dlrs/main/classes/CustomMetadataService.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/CustomMetadataServiceTest.cls b/dlrs/main/classes/CustomMetadataServiceTest.cls index e865209e..71e4dbdd 100644 --- a/dlrs/main/classes/CustomMetadataServiceTest.cls +++ b/dlrs/main/classes/CustomMetadataServiceTest.cls @@ -26,4 +26,131 @@ @IsTest private class CustomMetadataServiceTest { + @IsTest + static void testInitiateMetadataSave() { + try { + CustomMetadataService.initiateMetadataSave( + new List{ + new LookupRollupSummary2__mdt( + DeveloperName = 'TestRec', + Label = 'Test Rec', + Active__c = true, + RowLimit__c = 100 + ) + } + ); + Assert.fail('Expected to fail starting the deployment'); + } catch (System.AsyncException e) { + Assert.areEqual( + 'Metadata cannot be deployed from within a test', + e.getMessage() + ); + } + } + + @IsTest + static void testDeleteMetadataAsync() { + Test.startTest(); + Test.setMock( + WebServiceMock.class, + new MetadataServiceDeleteSuccessCalloutMock() + ); + CustomMetadataService.deleteMetadataAsync( + LookupRollupSummary2__mdt.getSObjectType(), + new List{ 'LookupRollupSummary2__mdt.Test123' } + ); + Test.stopTest(); + } + + @IsTest + static void testDeleteMetadataAsyncFailed() { + Test.startTest(); + Test.setMock( + WebServiceMock.class, + new MetadataServiceDeleteFailureCalloutMock() + ); + CustomMetadataService.deleteMetadataAsync( + LookupRollupSummary2__mdt.getSObjectType(), + new List{ 'LookupRollupSummary2__mdt.Test123' } + ); + Test.stopTest(); + } + + @IsTest + static void testApexMdApiDeployCallback() { + CustomMetadataService.ApexMdApiDeployCallback cb = new CustomMetadataService.ApexMdApiDeployCallback(); + Metadata.DeployResult result = new Metadata.DeployResult(); + result.status = Metadata.DeployStatus.Succeeded; + Metadata.DeployMessage messageObj = new Metadata.DeployMessage(); + messageObj.changed = true; + messageObj.success = true; + messageObj.fullName = 'TestRec'; + messageObj.componentType = 'CustomMetadata'; + messageObj.fullName = 'LookupRollupSummary2__mdt.TestRec'; + Metadata.DeployDetails deployDetailsObj = new Metadata.DeployDetails(); + deployDetailsObj.componentSuccesses.add(messageObj); + result.details = deployDetailsObj; + Metadata.DeployCallbackContext context = new Metadata.DeployCallbackContext(); + + // Invoke the callback's handleResult method. + cb.handleResult(result, context); + + // expected Platform Event publishing DML + Assert.areEqual(1, Limits.getDmlStatements()); + Assert.areEqual(1, Limits.getDmlRows()); + } + + public class MetadataServiceDeleteSuccessCalloutMock implements WebServiceMock { + public void doInvoke( + Object stub, + Object request, + Map response, + String endpoint, + String soapAction, + String requestName, + String responseNS, + String responseName, + String responseType + ) { + System.debug(request); + MetadataService.deleteMetadataResponse_element responseElement = new MetadataService.deleteMetadataResponse_element(); + // MetadataService.createMetadataResponse_element responseElement = new MetadataService.createMetadataResponse_element(); + MetadataService.DeleteResult res = new MetadataService.DeleteResult(); + res.success = true; + res.fullName = 'myTestResult'; + responseElement.result = new List{ res }; + + response.put('response_x', responseElement); + } + } + + public class MetadataServiceDeleteFailureCalloutMock implements WebServiceMock { + public void doInvoke( + Object stub, + Object request, + Map response, + String endpoint, + String soapAction, + String requestName, + String responseNS, + String responseName, + String responseType + ) { + System.debug(request); + MetadataService.deleteMetadataResponse_element responseElement = new MetadataService.deleteMetadataResponse_element(); + // MetadataService.createMetadataResponse_element responseElement = new MetadataService.createMetadataResponse_element(); + MetadataService.DeleteResult res = new MetadataService.DeleteResult(); + res.success = false; + res.errors = new List(); + MetadataService.Error err = new MetadataService.Error(); + err.message = 'Test Error'; + err.statusCode = 'Error Code'; + err.fields = new List{ 'Field__1', 'Field_2' }; + res.errors.add(err); + res.fullName = 'myTestResult'; + responseElement.result = new List{ res }; + + response.put('response_x', responseElement); + } + } } diff --git a/dlrs/main/classes/CustomMetadataServiceTest.cls-meta.xml b/dlrs/main/classes/CustomMetadataServiceTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/CustomMetadataServiceTest.cls-meta.xml +++ b/dlrs/main/classes/CustomMetadataServiceTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/LookupRollupStatusCheckController.cls b/dlrs/main/classes/LookupRollupStatusCheckController.cls new file mode 100644 index 00000000..5a76bbc4 --- /dev/null +++ b/dlrs/main/classes/LookupRollupStatusCheckController.cls @@ -0,0 +1,79 @@ +public with sharing class LookupRollupStatusCheckController { + /** + * Get count of scheduled items older than yesterday + * The assumption is that normal processing should have handled these + */ + @AuraEnabled(Cacheable=true) + public static Integer getOutstandingScheduledItemsForLookup(String lookupID) { + return [ + SELECT COUNT() + FROM LookupRollupSummaryScheduleItems__c + WHERE LookupRollupSummary2__c = :lookupID AND LastModifiedDate < YESTERDAY + ]; + } + + /** + * Check if the rollup has a Full Calculate schedule + */ + @AuraEnabled + public static Datetime getScheduledFullCalculates(String lookupID) { + try { + LookupRollupSummary2__mdt LookupRollupSummary = (LookupRollupSummary2__mdt) new RollupSummariesSelector.CustomMetadataSelector( + false, + true + ) + .selectById(new Set{ lookupID })[0] + .Record; + + if (LookupRollupSummary != null) { + String id = (LookupRollupSummary.id).to15(); + List ct = new CronTriggersSelector() + .selectScheduledApexById(id); + + if (!ct.isEmpty()) { + return ct[0].NextFireTime; + } + } + } catch (Exception e) { + } + return null; + } + + /** + * Check if the rollup has a child/parent trigger + */ + @AuraEnabled + public static Boolean hasChildTriggerDeployed(String lookupID) { + try { + LookupRollupSummary2__mdt LookupRollupSummary = (LookupRollupSummary2__mdt) new RollupSummariesSelector.CustomMetadataSelector( + false, + true + ) + .selectById(new Set{ lookupID })[0] + .Record; + + if (LookupRollupSummary != null) { + RollupSummary rs = new RollupSummary(LookupRollupSummary); + String childTrigger = RollupSummaries.makeTriggerName(rs); + ApexTriggersSelector selector = new ApexTriggersSelector(); + Map loadTriggers = selector.selectByName( + new Set{ ChildTrigger } + ); + + return loadTriggers.containsKey(ChildTrigger); + } + } catch (Exception e) { + } + return false; + } + + /** + * Check if cron job is running for DLRS + */ + @AuraEnabled + public static Integer getScheduledJobs() { + return new AsyncApexJobsSelector() + .getScheduledInstancesOfType(RollupJob.class) + .size(); + } +} diff --git a/dlrs/main/classes/LookupRollupStatusCheckController.cls-meta.xml b/dlrs/main/classes/LookupRollupStatusCheckController.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/LookupRollupStatusCheckController.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/LookupRollupStatusCheckControllerTest.cls b/dlrs/main/classes/LookupRollupStatusCheckControllerTest.cls new file mode 100644 index 00000000..70586cd3 --- /dev/null +++ b/dlrs/main/classes/LookupRollupStatusCheckControllerTest.cls @@ -0,0 +1,106 @@ +@IsTest +public with sharing class LookupRollupStatusCheckControllerTest { + @IsTest + static void testGetOutstandingScheduledItemsForLookup() { + List summaries = [ + SELECT Id + FROM LookupRollupSummary2__mdt + LIMIT 1 + ]; + if (summaries.isEmpty()) { + return; + } + Integer val = LookupRollupStatusCheckController.getOutstandingScheduledItemsForLookup( + summaries[0].Id + ); + Assert.isTrue(val >= 0, 'Expected a value, even zero'); + } + + @IsTest + static void testgetScheduledFullCalculates() { + List summaries = [ + SELECT Id, DeveloperName + FROM LookupRollupSummary2__mdt + LIMIT 1 + ]; + if (summaries.isEmpty()) { + return; + } + + // Build the CRON string + // Kickoff the calculate job for this lookup + + String uniqueNameForJob = + 'rollup_' + + summaries[0].DeveloperName + + '(' + + summaries[0].Id.to15() + + ')'; + + String jobId; + try { + jobId = System.schedule( + uniqueNameForJob, + '0 0 * * * ? 2100', + new RollupCalculateJobSchedulable(summaries[0].Id, '') + ); + } catch (Exception e) { + System.debug( + 'Failed to schedule, probably because it is already scheduled:' + + e.getMessage() + ); + } + + Datetime nextRunDate = LookupRollupStatusCheckController.getScheduledFullCalculates( + summaries[0].Id + ); + Assert.isNotNull(nextRunDate); + if (String.isNotBlank(jobId)) { + System.abortJob(jobId); + } + } + + @IsTest + static void testHasChildTriggerDeployed() { + // limited to records in the org, would have to mock things + LookupRollupStatusCheckController.hasChildTriggerDeployed(null); + + List rec = [ + SELECT Id + FROM LookupRollupSummary2__mdt + WHERE Active__c = TRUE AND CalculationMode__c IN ('Realtime', 'Scheduled') + LIMIT 1 + ]; + if (rec.size() == 0) { + return; + } + + Boolean isDeployed = LookupRollupStatusCheckController.hasChildTriggerDeployed( + rec[0].Id + ); + // Assume anything active and needing a trigger should have one + // this test could fail for silly reasons + Assert.areEqual( + true, + isDeployed, + 'Expected a rollup that requires a trigger to have one, could be false-positive' + ); + } + + @IsTest + static void testGetScheduledJobs() { + Integer startVal = LookupRollupStatusCheckController.getScheduledJobs(); + String jobId = System.schedule( + 'Test Job 2000', + '0 0 * * * ? 2100', + new RollupJob() + ); + Integer endVal = LookupRollupStatusCheckController.getScheduledJobs(); + Assert.areEqual( + 1, + endVal - startVal, + 'Expected class to report an additional scheduled job' + ); + System.abortJob(jobId); + } +} diff --git a/dlrs/main/classes/LookupRollupStatusCheckControllerTest.cls-meta.xml b/dlrs/main/classes/LookupRollupStatusCheckControllerTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/LookupRollupStatusCheckControllerTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/MLRSControllerTest.cls-meta.xml b/dlrs/main/classes/MLRSControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/MLRSControllerTest.cls-meta.xml +++ b/dlrs/main/classes/MLRSControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/ManageLookupRollupSummariesController.cls b/dlrs/main/classes/ManageLookupRollupSummariesController.cls index cc174f1b..185bb590 100644 --- a/dlrs/main/classes/ManageLookupRollupSummariesController.cls +++ b/dlrs/main/classes/ManageLookupRollupSummariesController.cls @@ -334,7 +334,12 @@ public with sharing class ManageLookupRollupSummariesController { public PageReference newWizard() { try { - PageReference newPage = Page.managelookuprollupsummaries_New; + String namespace = Utilities.namespace(); + PageReference newPage = new PageReference( + '/lightning/n/' + + (namespace.length() > 0 ? namespace + '__' : '') + + 'ManageLookupRollupSummaries2' + ); newPage.setRedirect(true); return newPage; } catch (Exception e) { diff --git a/dlrs/main/classes/ManageLookupRollupSummariesController.cls-meta.xml b/dlrs/main/classes/ManageLookupRollupSummariesController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/ManageLookupRollupSummariesController.cls-meta.xml +++ b/dlrs/main/classes/ManageLookupRollupSummariesController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/ManageLookupRollupSummariesNewController.cls-meta.xml b/dlrs/main/classes/ManageLookupRollupSummariesNewController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/ManageLookupRollupSummariesNewController.cls-meta.xml +++ b/dlrs/main/classes/ManageLookupRollupSummariesNewController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/ManageLookupRollupSummariesNewTest.cls-meta.xml b/dlrs/main/classes/ManageLookupRollupSummariesNewTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/ManageLookupRollupSummariesNewTest.cls-meta.xml +++ b/dlrs/main/classes/ManageLookupRollupSummariesNewTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/MessageService.cls b/dlrs/main/classes/MessageService.cls new file mode 100644 index 00000000..c80d8f7c --- /dev/null +++ b/dlrs/main/classes/MessageService.cls @@ -0,0 +1,35 @@ +/** + * A service class around the platform Messaging class + * Allowing us to capture send attempts and record them for test validation + */ +public with sharing class MessageService { + @TestVisible + static List sentEmailList = new List(); + + public static Messaging.SendEmailResult[] sendEmail( + Messaging.Email[] emails + ) { + return sendEmail(emails, true); + } + + public static Messaging.SendEmailResult[] sendEmail( + Messaging.Email[] emails, + Boolean allOrNothing + ) { + if (Test.isRunningTest()) { + sentEmailList.add(new SentEmails(emails, allOrNothing)); + } + return Messaging.sendEmail(emails, allOrNothing); + } + + @TestVisible + private class SentEmails { + public Messaging.Email[] emails; + public Boolean allOrNothing; + + public SentEmails(Messaging.Email[] emails, Boolean allOrNothing) { + this.emails = emails; + this.allOrNothing = allOrNothing; + } + } +} diff --git a/dlrs/main/classes/MessageService.cls-meta.xml b/dlrs/main/classes/MessageService.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/MessageService.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/MetadataServiceCalloutMock.cls-meta.xml b/dlrs/main/classes/MetadataServiceCalloutMock.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/MetadataServiceCalloutMock.cls-meta.xml +++ b/dlrs/main/classes/MetadataServiceCalloutMock.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/ObjectSelectorController.cls b/dlrs/main/classes/ObjectSelectorController.cls new file mode 100644 index 00000000..aa209a2a --- /dev/null +++ b/dlrs/main/classes/ObjectSelectorController.cls @@ -0,0 +1,26 @@ +public with sharing class ObjectSelectorController { + @AuraEnabled(cacheable=true) + public static List getParentObjList() { + Map objectDescription = Schema.getGlobalDescribe(); + List objects = new List(); + for (Schema.SObjectType obj : objectDescription.values()) { + objects.add(new SObjectInfo(obj)); + } + return objects; + } + + public class SObjectInfo { + @AuraEnabled + public String fullName; + @AuraEnabled + public String label; + + public SObjectInfo(Schema.SObjectType obj) { + Schema.DescribeSObjectResult description = obj.getDescribe( + SObjectDescribeOptions.DEFERRED + ); + this.fullName = description.getName(); + this.label = description.getLabel(); + } + } +} diff --git a/dlrs/main/classes/ObjectSelectorController.cls-meta.xml b/dlrs/main/classes/ObjectSelectorController.cls-meta.xml new file mode 100644 index 00000000..f5412963 --- /dev/null +++ b/dlrs/main/classes/ObjectSelectorController.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/dlrs/main/classes/ObjectSelectorControllerTest.cls b/dlrs/main/classes/ObjectSelectorControllerTest.cls new file mode 100644 index 00000000..ad38215c --- /dev/null +++ b/dlrs/main/classes/ObjectSelectorControllerTest.cls @@ -0,0 +1,20 @@ +@IsTest +public with sharing class ObjectSelectorControllerTest { + @IsTest + static void testGetParentObjList() { + List objects = ObjectSelectorController.getParentObjList(); + Assert.isFalse(objects.isEmpty()); + + Set expected = new Set{ + 'Account', + 'Opportunity', + Schema.LookupRollupSummary2__mdt.getSObjectType().getDescribe().getName() + }; + for (ObjectSelectorController.SObjectInfo sobj : objects) { + expected.remove(sobj.fullName); + } + + // expected items should have been removed + Assert.isTrue(expected.isEmpty()); + } +} diff --git a/dlrs/main/classes/ObjectSelectorControllerTest.cls-meta.xml b/dlrs/main/classes/ObjectSelectorControllerTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/ObjectSelectorControllerTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/OptimizerComponentController.cls-meta.xml b/dlrs/main/classes/OptimizerComponentController.cls-meta.xml index 02c8d395..8a3c17b5 100644 --- a/dlrs/main/classes/OptimizerComponentController.cls-meta.xml +++ b/dlrs/main/classes/OptimizerComponentController.cls-meta.xml @@ -3,6 +3,6 @@ xmlns="urn:metadata.tooling.soap.sforce.com" fqn="OptimizerComponentController" > - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/OptimizerService.cls-meta.xml b/dlrs/main/classes/OptimizerService.cls-meta.xml index 7d10c5a0..d94fff37 100644 --- a/dlrs/main/classes/OptimizerService.cls-meta.xml +++ b/dlrs/main/classes/OptimizerService.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/OptimizerServiceTest.cls-meta.xml b/dlrs/main/classes/OptimizerServiceTest.cls-meta.xml index 1cca9b19..48d9c8b2 100644 --- a/dlrs/main/classes/OptimizerServiceTest.cls-meta.xml +++ b/dlrs/main/classes/OptimizerServiceTest.cls-meta.xml @@ -3,6 +3,6 @@ xmlns="urn:metadata.tooling.soap.sforce.com" fqn="OptimizerServiceTest" > - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupActionCalculate.cls-meta.xml b/dlrs/main/classes/RollupActionCalculate.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupActionCalculate.cls-meta.xml +++ b/dlrs/main/classes/RollupActionCalculate.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupActionCalculateTest.cls-meta.xml b/dlrs/main/classes/RollupActionCalculateTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupActionCalculateTest.cls-meta.xml +++ b/dlrs/main/classes/RollupActionCalculateTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupCalculateController.cls-meta.xml b/dlrs/main/classes/RollupCalculateController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupCalculateController.cls-meta.xml +++ b/dlrs/main/classes/RollupCalculateController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupCalculateControllerTest.cls-meta.xml b/dlrs/main/classes/RollupCalculateControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupCalculateControllerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupCalculateControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupCalculateJob.cls b/dlrs/main/classes/RollupCalculateJob.cls index 3a900275..41dbe1a3 100644 --- a/dlrs/main/classes/RollupCalculateJob.cls +++ b/dlrs/main/classes/RollupCalculateJob.cls @@ -41,6 +41,26 @@ public with sharing class RollupCalculateJob implements Database.Batchable lookups = new RollupSummariesSelector() + .selectById(new Set{ (String) lookupId }); + + if (lookups.size() == 0) { + throw RollupServiceException.rollupNotFound(lookupId); + } + + RollupSummary lookup = lookups[0]; + + if ( + Utilities.userHasCustomPermission(lookup.BypassCustPermApiName) || + BypassHandler.isBypassed(lookup.UniqueName) + ) { + System.debug('Rollup is disabled, will not execute ' + lookupId); + // return an "empty" iteration so it doesn't run the execute method + return Database.getQueryLocator( + 'SELECT Id FROM ' + lookup.ParentObject + ' LIMIT 0' + ); + } + // Query all the parent records as per the lookup definition return RollupService.masterRecordsAsQueryLocator( lookupId, @@ -59,6 +79,32 @@ public with sharing class RollupCalculateJob implements Database.Batchable(masterRecords).keySet() ); } catch (Exception e) { + LookupRollupSummaryLog__c logEntry = new LookupRollupSummaryLog__c(); + List rollup = new RollupSummariesSelector() + .selectById(new Set{ lookupId }); + logEntry.ParentId__c = lookupId; + if (!rollup.isEmpty()) { + // Log the failure updating the master record for review + logEntry.ParentObject__c = rollup[0] + .Record.getSObjectType() + .getDescribe() + .getName(); + } + + logEntry.ErrorMessage__c = + e.getMessage() + + ' : ' + + e.getStackTraceString(); + + upsert logEntry ParentId__c; + + if ( + DeclarativeLookupRollupSummaries__c.getInstance() + .DisableProblemEmails__c + ) { + // if emails are disabled then bail out + return; + } // Ids in scope List ids = new List(); for (Id recordId : new Map(masterRecords).keySet()) { @@ -82,7 +128,7 @@ public with sharing class RollupCalculateJob implements Database.Batchable{ e.getMessage(), String.join(ids, ',') } ) ); - Messaging.sendEmail(new List{ mail }); + MessageService.sendEmail(new List{ mail }); } } diff --git a/dlrs/main/classes/RollupCalculateJob.cls-meta.xml b/dlrs/main/classes/RollupCalculateJob.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupCalculateJob.cls-meta.xml +++ b/dlrs/main/classes/RollupCalculateJob.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupCalculateJobSchedulable.cls b/dlrs/main/classes/RollupCalculateJobSchedulable.cls index f3e988a3..b58619b1 100644 --- a/dlrs/main/classes/RollupCalculateJobSchedulable.cls +++ b/dlrs/main/classes/RollupCalculateJobSchedulable.cls @@ -15,6 +15,33 @@ public with sharing class RollupCalculateJobSchedulable implements Schedulable { // Enqueue the job to recalcualte the given rollup parent records RollupService.runJobToCalculate(rollupRecordId, masterWhereClause); } catch (Exception e) { + LookupRollupSummaryLog__c logEntry = new LookupRollupSummaryLog__c(); + List rollup = new RollupSummariesSelector() + .selectById(new Set{ rollupRecordId }); + logEntry.ParentId__c = rollupRecordId; + if (!rollup.isEmpty()) { + // Log the failure updating the master record for review + logEntry.ParentObject__c = rollup[0] + .Record.getSObjectType() + .getDescribe() + .getName(); + } + + logEntry.ErrorMessage__c = + e.getMessage() + + ' : ' + + e.getStackTraceString(); + + upsert logEntry ParentId__c; + + if ( + DeclarativeLookupRollupSummaries__c.getInstance() + .DisableProblemEmails__c + ) { + // if emails are disabled then bail out + return; + } + // Resolve the name of this job Id triggerId = sc.getTriggerId(); Map jobNameByTriggerId = new CronJobDetailsSelector() @@ -34,12 +61,12 @@ public with sharing class RollupCalculateJobSchedulable implements Schedulable { mail.setPlainTextBody( String.format( 'Error: {0} ' + - 'Review the error, rollup definition and/or delete the Apex Scheduled job under Setup. ' + - 'Check if the rollup still exists via the Manage Rollup Summaries and/or Lookup Rollup Summaries tabs. ', + 'Review the error, rollup definition and/or delete the Apex Scheduled job under Setup. ' + + 'Check if the rollup still exists via the Manage Rollup Summaries and/or Lookup Rollup Summaries tabs. ', new List{ e.getMessage() } ) ); - Messaging.sendEmail(new List{ mail }); + MessageService.sendEmail(new List{ mail }); } } } diff --git a/dlrs/main/classes/RollupCalculateJobSchedulable.cls-meta.xml b/dlrs/main/classes/RollupCalculateJobSchedulable.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupCalculateJobSchedulable.cls-meta.xml +++ b/dlrs/main/classes/RollupCalculateJobSchedulable.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupCalculateJobSchedulableTest.cls b/dlrs/main/classes/RollupCalculateJobSchedulableTest.cls new file mode 100644 index 00000000..4a38920c --- /dev/null +++ b/dlrs/main/classes/RollupCalculateJobSchedulableTest.cls @@ -0,0 +1,85 @@ +@IsTest +private class RollupCalculateJobSchedulableTest { + @IsTest + private static void testScheduleCalculateJobWithFailure() { + LookupRollupSummary__c rollupSummary = new LookupRollupSummary__c(); + rollupSummary.ParentObject__c = 'Account'; + rollupSummary.ChildObject__c = 'Contact'; + rollupSummary.RelationShipField__c = 'AccountId'; + rollupSummary.FieldToAggregate__c = 'Id'; + rollupSummary.AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(); + rollupSummary.AggregateResultField__c = 'Description'; + rollupSummary.Active__c = true; + rollupSummary.CalculationMode__c = 'Developer'; + insert rollupSummary; + + // mark the job already running so it throws an exception + RollupService.checkJobAlreadyRunning(rollupSummary.Id, rollupSummary.Name); + + ApexPages.StandardController standardController = new ApexPages.StandardController( + rollupSummary + ); + RollupScheduledCalculateController controller = new RollupScheduledCalculateController( + standardController + ); + + Test.startTest(); + controller.scheduleCalculateJob(); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(1, logs.size()); + Assert.areEqual( + Schema.LookupRollupSummary__c.getSObjectType().getDescribe().getName(), + logs[0].ParentObject__c + ); + Assert.areEqual(rollupSummary.Id, logs[0].ParentId__c); + Assert.areEqual(1, MessageService.sentEmailList.size()); + } + + private testMethod static void testScheduleCalculateJobPreventEmail() { + LookupRollupSummary__c rollupSummary = new LookupRollupSummary__c(); + rollupSummary.ParentObject__c = 'Account'; + rollupSummary.ChildObject__c = 'Contact'; + rollupSummary.RelationShipField__c = 'AccountId'; + rollupSummary.FieldToAggregate__c = 'Id'; + rollupSummary.AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(); + rollupSummary.AggregateResultField__c = 'Description'; + rollupSummary.Active__c = true; + rollupSummary.CalculationMode__c = 'Developer'; + insert rollupSummary; + + // mark the job already running so it throws an exception + RollupService.checkJobAlreadyRunning(rollupSummary.Id, rollupSummary.Name); + + ApexPages.StandardController standardController = new ApexPages.StandardController( + rollupSummary + ); + RollupScheduledCalculateController controller = new RollupScheduledCalculateController( + standardController + ); + DeclarativeLookupRollupSummaries__c settings = new DeclarativeLookupRollupSummaries__c( + DisableProblemEmails__c = true + ); + insert settings; + + Test.startTest(); + controller.scheduleCalculateJob(); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(1, logs.size()); + Assert.areEqual( + Schema.LookupRollupSummary__c.getSObjectType().getDescribe().getName(), + logs[0].ParentObject__c + ); + Assert.areEqual(rollupSummary.Id, logs[0].ParentId__c); + Assert.areEqual(0, MessageService.sentEmailList.size()); + } +} diff --git a/dlrs/main/classes/RollupCalculateJobSchedulableTest.cls-meta.xml b/dlrs/main/classes/RollupCalculateJobSchedulableTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/RollupCalculateJobSchedulableTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/RollupCalculateJobTest.cls b/dlrs/main/classes/RollupCalculateJobTest.cls new file mode 100644 index 00000000..648a65a4 --- /dev/null +++ b/dlrs/main/classes/RollupCalculateJobTest.cls @@ -0,0 +1,299 @@ +@IsTest +private class RollupCalculateJobTest { + @IsTest + static void testCrashHandlingWithEmail() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'A', + ChildObject__c = 'X', + RelationshipField__c = '1', + CalculationMode__c = 'Realtime', + Active__c = true + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + RollupCalculateJob job = new RollupCalculateJob(rollupCfg.Id); + Test.startTest(); + job.execute(new MockBatchableContext(), new List{ a }); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(1, logs.size()); + Assert.areEqual( + Schema.LookupRollupSummary2__mdt.getSObjectType().getDescribe().getName(), + logs[0].ParentObject__c + ); + Assert.areEqual(rollupCfg.Id, logs[0].ParentId__c); + Assert.areEqual(1, MessageService.sentEmailList.size()); + } + + @IsTest + static void testCrashHandlingWithoutEmail() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'A', + ChildObject__c = 'X', + RelationshipField__c = '1', + CalculationMode__c = 'Realtime', + Active__c = true + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + DeclarativeLookupRollupSummaries__c settings = new DeclarativeLookupRollupSummaries__c( + DisableProblemEmails__c = true + ); + insert settings; + + RollupCalculateJob job = new RollupCalculateJob(rollupCfg.Id); + Test.startTest(); + job.execute(new MockBatchableContext(), new List{ a }); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(1, logs.size()); + Assert.areEqual( + Schema.LookupRollupSummary2__mdt.getSObjectType().getDescribe().getName(), + logs[0].ParentObject__c + ); + Assert.areEqual(rollupCfg.Id, logs[0].ParentId__c); + Assert.areEqual(0, MessageService.sentEmailList.size()); + } + + @IsTest + static void testRunBatch() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'Account', + ChildObject__c = 'Contact', + RelationshipField__c = 'AccountId', + AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(), + AggregateResultField__c = 'Description', + FieldToAggregate__c = 'Id', + CalculationMode__c = 'Realtime', + AggregateAllRows__c = false, + Active__c = true + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + RollupCalculateJob job = new RollupCalculateJob(rollupCfg.Id, 'Id != NULL'); + Test.startTest(); + Database.executeBatch(job); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c, ErrorMessage__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(0, logs.size(), 'Found:' + JSON.serializePretty(logs)); + } + + @IsTest + static void testRunBatchWithGlobalDisable() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'Account', + ChildObject__c = 'Contact', + RelationshipField__c = 'AccountId', + AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(), + AggregateResultField__c = 'Description', + FieldToAggregate__c = 'Id', + CalculationMode__c = 'Realtime', + AggregateAllRows__c = false, + Active__c = true + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + // globally disable DLRS + DeclarativeLookupRollupSummaries__c settings = new DeclarativeLookupRollupSummaries__c( + DisableDLRSGlobally__c = true + ); + insert settings; + + Account a = new Account(Name = 'Test'); + insert a; + + RollupCalculateJob job = new RollupCalculateJob(rollupCfg.Id, 'Id != NULL'); + Test.startTest(); + String jobId = Database.executeBatch(job); + Test.stopTest(); + + AsyncApexJob asyncJob = [ + SELECT Id, Status, JobItemsProcessed, TotalJobItems + FROM AsyncApexJob + WHERE Id = :jobId + ]; + + Assert.areEqual('Completed', asyncJob.Status); + Assert.areEqual(0, asyncJob.JobItemsProcessed); + Assert.areEqual(0, asyncJob.TotalJobItems); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c, ErrorMessage__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(0, logs.size(), 'Found:' + JSON.serializePretty(logs)); + } + + @IsTest + static void testRunBatchWithCustPermDisable() { + // find the profile that has access to the Custom Permission we want to use to check (if it even exists in the system) + List permSetsWithAccess = [ + SELECT ParentId, SetupEntityId + FROM SetupEntityAccess + WHERE + SetupEntityId IN ( + SELECT Id + FROM CustomPermission + WHERE DeveloperName = 'DisableDLRS' + ) + AND Parent.IsOwnedByProfile = FALSE + ]; + if (permSetsWithAccess.isEmpty()) { + return; // this org doesn't have the necessary metadata to test this feature + } + + CustomPermission perm = [ + SELECT DeveloperName, NamespacePrefix + FROM CustomPermission + WHERE Id = :permSetsWithAccess[0].SetupEntityId + ]; + + String permName = perm.DeveloperName; + if (String.isNotBlank(perm.NamespacePrefix)) { + permName = perm.NamespacePrefix + '__' + perm.DeveloperName; + } + + // see if the running user already has that permission set + List assignments = [ + SELECT Id + FROM PermissionSetAssignment + WHERE + AssigneeId = :UserInfo.getUserId() + AND PermissionSetId = :permSetsWithAccess[0].ParentId + ]; + if (assignments.isEmpty()) { + // user doesn't have the necessary perm set to grant it to them. + System.runAs(new User(Id = UserInfo.getUserId())) { + insert new PermissionSetAssignment( + AssigneeId = UserInfo.getUserId(), + PermissionSetId = permSetsWithAccess[0].ParentId + ); + } + } + + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'Account', + ChildObject__c = 'Contact', + RelationshipField__c = 'AccountId', + AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(), + AggregateResultField__c = 'Description', + FieldToAggregate__c = 'Id', + CalculationMode__c = 'Realtime', + AggregateAllRows__c = false, + Active__c = true, + BypassPermissionApiName__c = permName + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + RollupCalculateJob job = new RollupCalculateJob(rollupCfg.Id, 'Id != NULL'); + String jobId; + Test.startTest(); + Assert.isTrue( + Utilities.userHasCustomPermission(permName), + 'Expected user to have ' + permName + ); + // go into runAs because we need to get the perms recalculated + jobId = Database.executeBatch(job); + Test.stopTest(); + + AsyncApexJob asyncJob = [ + SELECT Id, Status, JobItemsProcessed, TotalJobItems + FROM AsyncApexJob + WHERE Id = :jobId + ]; + + Assert.areEqual('Completed', asyncJob.Status); + Assert.areEqual(0, asyncJob.JobItemsProcessed); + Assert.areEqual(0, asyncJob.TotalJobItems); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c, ErrorMessage__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(0, logs.size(), 'Found:' + JSON.serializePretty(logs)); + } + + public class MockBatchableContext implements Database.BatchableContext { + public Id getJobId() { + return '100000000000000'; + } + + public Id getChildJobId() { + return '100000000000000'; + } + } +} diff --git a/dlrs/main/classes/RollupCalculateJobTest.cls-meta.xml b/dlrs/main/classes/RollupCalculateJobTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/RollupCalculateJobTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/RollupController.cls b/dlrs/main/classes/RollupController.cls index 0055e27f..1eee48f5 100644 --- a/dlrs/main/classes/RollupController.cls +++ b/dlrs/main/classes/RollupController.cls @@ -29,7 +29,7 @@ **/ public with sharing class RollupController { @TestVisible - private static String FALLBACK_COMPONENT_API_VERSION = '60.0'; + private static String FALLBACK_COMPONENT_API_VERSION = '62.0'; public String ZipData { get; set; } @@ -542,26 +542,20 @@ public with sharing class RollupController { ApexPages.addMessage( new ApexPages.Message( ApexPages.Severity.Info, - 'Apex Trigger ' + - RollupTriggerName + - ' is installed.' + 'Apex Trigger ' + RollupTriggerName + ' is installed.' ) ); ApexPages.addMessage( new ApexPages.Message( ApexPages.Severity.Info, - 'Apex Class ' + - RollupTriggerTestName + - ' is installed.' + 'Apex Class ' + RollupTriggerTestName + ' is installed.' ) ); if (RollupParentTrigger != null) { ApexPages.addMessage( new ApexPages.Message( ApexPages.Severity.Info, - 'Apex Trigger ' + - RollupParentTriggerName + - ' is installed.' + 'Apex Trigger ' + RollupParentTriggerName + ' is installed.' ) ); } diff --git a/dlrs/main/classes/RollupController.cls-meta.xml b/dlrs/main/classes/RollupController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupController.cls-meta.xml +++ b/dlrs/main/classes/RollupController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupControllerTest.cls-meta.xml b/dlrs/main/classes/RollupControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupControllerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupDmlGuard.cls-meta.xml b/dlrs/main/classes/RollupDmlGuard.cls-meta.xml index 3a10d2eb..ba7ea1b5 100644 --- a/dlrs/main/classes/RollupDmlGuard.cls-meta.xml +++ b/dlrs/main/classes/RollupDmlGuard.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active \ No newline at end of file diff --git a/dlrs/main/classes/RollupDmlGuardTest.cls-meta.xml b/dlrs/main/classes/RollupDmlGuardTest.cls-meta.xml index 3a10d2eb..ba7ea1b5 100644 --- a/dlrs/main/classes/RollupDmlGuardTest.cls-meta.xml +++ b/dlrs/main/classes/RollupDmlGuardTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active \ No newline at end of file diff --git a/dlrs/main/classes/RollupEditorController.cls b/dlrs/main/classes/RollupEditorController.cls new file mode 100644 index 00000000..e35018e1 --- /dev/null +++ b/dlrs/main/classes/RollupEditorController.cls @@ -0,0 +1,360 @@ +public with sharing class RollupEditorController { + @AuraEnabled + public static List getAllRollupConfigs() { + List rollups = new List(); + for ( + RollupSummary summary : new RollupSummariesSelector.CustomMetadataSelector( + true, + true // retrieve for Edit + ) + .selectAll() + ) { + rollups.add(new RollupConfig((LookupRollupSummary2__mdt) summary.Record)); + } + return rollups; + } + + @AuraEnabled + public static RollupConfig getRollupConfig(String rollupName) { + return new RollupConfig( + (LookupRollupSummary2__mdt) new RollupSummariesSelector.CustomMetadataSelector( + true, + true // retrieve for Edit + ) + .selectByDeveloperName(new Set{ rollupName })[0] + .Record + ); + } + + public class SelectOption { + @AuraEnabled + public String value; + + @AuraEnabled + public String label; + + @AuraEnabled + public String icon; + + @AuraEnabled + public String type; + + @AuraEnabled + public List referencesTo; + + public SelectOption(String value, String label) { + this.value = value; + this.label = label; + this.referencesTo = new List(); + } + } + + @AuraEnabled + public static List getFieldOptions(String objectName) { + Map mapOfFields = Schema.getGlobalDescribe() + .get(objectName) + .getDescribe() + .fields.getMap(); + + SelectOption emptyOption = new SelectOption('', '-- Select --'); + + List options = new List(); + options.add(emptyOption); + + for (Schema.SObjectField field : mapOfFields.values()) { + Schema.DescribeFieldResult fr = field.getDescribe(); + String fieldName = fr.getName(); + String label = fr.getLabel(); + + SelectOption option = new SelectOption( + fieldName, + String.format('{0} ({1})', new List{ label, fieldName }) + ); + option.type = String.valueof(fr.getType()); + List types = fr.getReferenceTo(); + // if this fields points to a single SObject, pass that up + for (Schema.sObjectType t : types) { + option.referencesTo.add(types[0].getDescribe().getName()); + } + options.add(option); + } + + return options; + } + + /** + * returns a map of fieldname => list to use in displaying error in the UI + * general errors are applied to the 'record' field name + */ + @AuraEnabled + public static Map> validateRollupConfig(String rollup) { + RollupConfig cfg = (RollupConfig) JSON.deserialize( + rollup, + RollupConfig.class + ); + // do things like validate that the Rollup Criteria can be used in a SOQL query + LookupRollupSummary2__mdt lookupConfig = cfg.getRecord(); + + // Process only Custom Metadata records here + List mdtRecords = new List(); + mdtRecords.add(lookupConfig); + + // Validate via Domain class and throw appropirte exception + RollupSummaries rollupSummaries = new RollupSummaries(mdtRecords); + rollupSummaries.onValidate(); + Map> errorMap; + + for (RollupSummary rollupSummaryRecord : rollupSummaries.Records) { + errorMap = collectErrors(rollupSummaryRecord); + } + + LookupRollupSummary2__mdt existing = LookupRollupSummary2__mdt.getInstance( + lookupConfig.DeveloperName + ); + if (existing != null && existing.Id != lookupConfig.Id) { + if (errorMap == null) { + errorMap = new Map>(); + } + + if (!errorMap.containsKey('developerName')) { + errorMap.put('developerName', new List()); + } + + errorMap.get('developerName') + .add('API name already in use by ' + existing.Id); + } + + return errorMap; + } + + @AuraEnabled + public static Id saveRollupConfig(String rollup) { + RollupConfig cfg = (RollupConfig) JSON.deserialize( + rollup, + RollupConfig.class + ); + LookupRollupSummary2__mdt lookupConfig = cfg.getRecord(); + return CustomMetadataService.initiateMetadataSave( + new List{ lookupConfig } + ); + } + + @AuraEnabled + public static Id deleteRollupConfig(String rollupName) { + try { + return CustomMetadataService.deleteMetadataAsync( + LookupRollupSummary2__mdt.getSObjectType(), + new List{ rollupName } + ); + } catch (Exception e) { + throw new AuraHandledException(e.getMessage()); + } + } + + @AuraEnabled(cacheable=true) + public static String getManageTriggerPageUrl(Id rollupId) { + PageReference pageRef = Page.managetriggermdt; + pageRef.getParameters().put('id', rollupId); + return pageRef.getUrl(); + } + + @AuraEnabled(cacheable=true) + public static String getFullCalculatePageUrl(Id rollupId) { + PageReference pageRef = Page.rollupcalculatemdt; + pageRef.getParameters().put('id', rollupId); + return pageRef.getUrl(); + } + + @AuraEnabled(cacheable=true) + public static String getScheduleCalculatePageUrl(Id rollupId) { + PageReference pageRef = Page.rollupscheduledcalculatemdt; + pageRef.getParameters().put('id', rollupId); + return pageRef.getUrl(); + } + + private static Map> collectErrors(RollupSummary rollup) { + Map> errorMap = new Map>(); + if (rollup.Error != null) { + buildErrorIfNeeded(errorMap, 'record', new List{ rollup.Error }); + } + buildErrorIfNeeded(errorMap, 'active', rollup.Fields.Active.errors); + buildErrorIfNeeded( + errorMap, + 'aggregateOperation', + rollup.Fields.AggregateOperation.errors + ); + buildErrorIfNeeded( + errorMap, + 'aggregateResultField', + rollup.Fields.AggregateResultField.errors + ); + buildErrorIfNeeded( + errorMap, + 'calculationMode', + rollup.Fields.CalculationMode.errors + ); + buildErrorIfNeeded( + errorMap, + 'calculationSharingMode', + rollup.Fields.CalculationSharingMode.errors + ); + buildErrorIfNeeded( + errorMap, + 'childObject', + rollup.Fields.ChildObject.errors + ); + buildErrorIfNeeded( + errorMap, + 'description', + rollup.Fields.Description.errors + ); + buildErrorIfNeeded( + errorMap, + 'fieldToAggregate', + rollup.Fields.FieldToAggregate.errors + ); + buildErrorIfNeeded( + errorMap, + 'developerName', + rollup.Fields.UniqueName.errors + ); + buildErrorIfNeeded( + errorMap, + 'parentObject', + rollup.Fields.ParentObject.errors + ); + buildErrorIfNeeded( + errorMap, + 'relationshipCriteria', + rollup.Fields.RelationshipCriteria.errors + ); + buildErrorIfNeeded( + errorMap, + 'relationshipCriteriaFields', + rollup.Fields.RelationshipCriteriaFields.errors + ); + buildErrorIfNeeded( + errorMap, + 'relationshipField', + rollup.Fields.RelationshipField.errors + ); + buildErrorIfNeeded(errorMap, 'testCode', rollup.Fields.TestCode.errors); + buildErrorIfNeeded(errorMap, 'rowLimit', rollup.Fields.RowLimit.errors); + return errorMap; + } + + private static void buildErrorIfNeeded( + Map> errorMap, + String fieldName, + List errors + ) { + if (errors.isEmpty()) { + return; + } + errorMap.put(fieldName, errors); + } + + @SuppressWarnings('PMD.TooManyFields') + public class RollupConfig { + @AuraEnabled + public Id id; + @AuraEnabled + public String label; + @AuraEnabled + public String developerName; + @AuraEnabled + public Boolean active; + @AuraEnabled + public Boolean aggregateAllRows; + @AuraEnabled + public String aggregateOperation; + @AuraEnabled + public String aggregateResultField; + @AuraEnabled + public String bypassPermissionApiName; + @AuraEnabled + public String calculationMode; + @AuraEnabled + public String calculationSharingMode; + @AuraEnabled + public String childObject; + @AuraEnabled + public String concatenateDelimiter; + @AuraEnabled + public String description; + @AuraEnabled + public String fieldToAggregate; + @AuraEnabled + public String fieldToOrderBy; + @AuraEnabled + public String parentObject; + @AuraEnabled + public String relationshipCriteria; + @AuraEnabled + public String relationshipCriteriaFields; + @AuraEnabled + public String relationshipField; + @AuraEnabled + public Decimal rowLimit; + @AuraEnabled + public String testCode; + @AuraEnabled + public String testCodeParent; + @AuraEnabled + public Boolean testCodeSeeAllData; + + public RollupConfig(LookupRollupSummary2__mdt record) { + this.id = record.Id; + this.label = record.Label; + this.developerName = record.DeveloperName; + this.active = record.Active__c; + this.aggregateAllRows = record.AggregateAllRows__c; + this.aggregateOperation = record.AggregateOperation__c; + this.aggregateResultField = record.AggregateResultField__c; + this.bypassPermissionApiName = record.BypassPermissionApiName__c; + this.calculationMode = record.CalculationMode__c; + this.calculationSharingMode = record.CalculationSharingMode__c; + this.childObject = record.ChildObject__c; + this.concatenateDelimiter = record.ConcatenateDelimiter__c; + this.description = record.Description__c; + this.fieldToAggregate = record.FieldToAggregate__c; + this.fieldToOrderBy = record.FieldToOrderBy__c; + this.parentObject = record.ParentObject__c; + this.relationshipCriteria = record.RelationshipCriteria__c; + this.relationshipCriteriaFields = record.RelationshipCriteriaFields__c; + this.relationshipField = record.RelationshipField__c; + this.rowLimit = record.RowLimit__c; + this.testCode = record.TestCode2__c; + this.testCodeParent = record.TestCodeParent__c; + this.testCodeSeeAllData = record.TestCodeSeeAllData__c; + } + + public LookupRollupSummary2__mdt getRecord() { + LookupRollupSummary2__mdt record = new LookupRollupSummary2__mdt(); + record.Id = this.id; + record.Label = this.label; + record.DeveloperName = this.developerName; + record.Active__c = this.active; + record.AggregateAllRows__c = this.aggregateAllRows; + record.AggregateOperation__c = this.aggregateOperation; + record.AggregateResultField__c = this.aggregateResultField; + record.BypassPermissionApiName__c = this.bypassPermissionApiName; + record.CalculationMode__c = this.calculationMode; + record.CalculationSharingMode__c = this.calculationSharingMode; + record.ChildObject__c = this.childObject; + record.ConcatenateDelimiter__c = this.concatenateDelimiter; + record.Description__c = this.description; + record.FieldToAggregate__c = this.fieldToAggregate; + record.FieldToOrderBy__c = this.fieldToOrderBy; + record.ParentObject__c = this.parentObject; + record.RelationshipCriteria__c = this.relationshipCriteria; + record.RelationshipCriteriaFields__c = this.relationshipCriteriaFields; + record.RelationshipField__c = this.relationshipField; + record.RowLimit__c = this.rowLimit; + record.TestCode2__c = this.testCode; + record.TestCodeParent__c = this.testCodeParent; + record.TestCodeSeeAllData__c = this.testCodeSeeAllData; + return record; + } + } +} diff --git a/dlrs/main/classes/RollupEditorController.cls-meta.xml b/dlrs/main/classes/RollupEditorController.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/dlrs/main/classes/RollupEditorController.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/dlrs/main/classes/RollupEditorControllerTest.cls b/dlrs/main/classes/RollupEditorControllerTest.cls new file mode 100644 index 00000000..525b8bea --- /dev/null +++ b/dlrs/main/classes/RollupEditorControllerTest.cls @@ -0,0 +1,212 @@ +@IsTest +public with sharing class RollupEditorControllerTest { + static LookupRollupSummary2__mdt lup = new LookupRollupSummary2__mdt( + Id = Schema.LookupRollupSummary2__mdt.getSObjectType() + .getDescribe() + .getKeyPrefix() + '000000000aaa', + Label = 'TestLabel', + DeveloperName = 'TestDevName', + Active__c = true, + AggregateAllRows__c = true, + AggregateOperation__c = 'Count', + AggregateResultField__c = 'ResultField', + CalculationMode__c = 'CalcMode', + CalculationSharingMode__c = 'SharingMode', + ChildObject__c = 'ChildObject', + ConcatenateDelimiter__c = 'Delim', + Description__c = 'Desc', + FieldToAggregate__c = 'FieldToAgg', + FieldToOrderBy__c = 'FieldToOrder', + ParentObject__c = 'ParentObject', + RelationshipCriteria__c = 'RelCriteria', + RelationshipCriteriaFields__c = 'Field1\nField2', + RelationshipField__c = 'RelField', + RowLimit__c = 100, + TestCode2__c = 'TestCode', + TestCodeParent__c = 'ParentTestCode', + TestCodeSeeAllData__c = true + ); + + @IsTest + static void testGetAllRollupConfigs() { + List lookups = [ + SELECT Id + FROM LookupRollupSummary2__mdt + ]; + List configs = RollupEditorController.getAllRollupConfigs(); + Assert.areEqual(lookups.size(), configs.size()); + } + + @IsTest + static void testGetRollupConfig() { + List lookups = [ + SELECT + Id, + Label, + DeveloperName, + Active__c, + AggregateAllRows__c, + AggregateOperation__c, + AggregateResultField__c, + CalculationMode__c, + CalculationSharingMode__c, + ChildObject__c, + ConcatenateDelimiter__c, + Description__c, + FieldToAggregate__c, + FieldToOrderBy__c, + ParentObject__c, + RelationshipCriteria__c, + RelationshipCriteriaFields__c, + RelationshipField__c, + RowLimit__c, + TestCode__c, + TestCodeParent__c, + TestCodeSeeAllData__c + FROM LookupRollupSummary2__mdt + ]; + if (lookups.isEmpty()) { + return; + } + LookupRollupSummary2__mdt lup = lookups[0]; + RollupEditorController.RollupConfig cfg = RollupEditorController.getRollupConfig( + lup.DeveloperName + ); + Assert.areEqual(lup.Id, cfg.id); + Assert.areEqual(lup.Label, cfg.label); + Assert.areEqual(lup.DeveloperName, cfg.developerName); + } + + @IsTest + static void testGetFieldOptions() { + List fields = RollupEditorController.getFieldOptions( + 'User' + ); + Assert.isFalse(fields.isEmpty()); + } + + @IsTest + static void testValidateRollupConfig() { + RollupEditorController.RollupConfig cfg = new RollupEditorController.RollupConfig( + lup + ); + Map> errors = RollupEditorController.validateRollupConfig( + JSON.serialize(cfg) + ); + Assert.areEqual( + '{"rowLimit":["Row Limit is only supported on Last and Concatenate operators."],"parentObject":["Object does not exist."],"childObject":["Object does not exist."]}', + JSON.serialize(errors) + ); + } + + @IsTest + static void testSaveRollupConfig() { + RollupEditorController.RollupConfig cfg = new RollupEditorController.RollupConfig( + lup + ); + try { + Id depId = RollupEditorController.saveRollupConfig(JSON.serialize(cfg)); + Assert.fail('Should throw an exception'); + } catch (System.AsyncException e) { + Assert.areEqual( + 'Metadata cannot be deployed from within a test', + e.getMessage() + ); + } + } + + @IsTest + static void testDeleteRollupConfig() { + Id queueableId = RollupEditorController.deleteRollupConfig('Hello'); + AsyncApexJob queueJob = [ + SELECT Id + FROM AsyncApexJob + WHERE Id = :queueableId + ]; + Assert.areEqual(queueableId, queueJob.Id); + System.abortJob(queueJob.Id); + } + + @IsTest + static void testGetManageTriggerPageUrl() { + String url = RollupEditorController.getManageTriggerPageUrl(lup.Id); + PageReference pageRef = Page.managetriggermdt; + Assert.areEqual(pageRef.getUrl() + '?id=' + lup.Id, url); + } + + @IsTest + static void testGetFullCalculatePageUrl() { + String url = RollupEditorController.getFullCalculatePageUrl(lup.Id); + PageReference pageRef = Page.rollupcalculatemdt; + Assert.areEqual(pageRef.getUrl() + '?id=' + lup.Id, url); + } + + @IsTest + static void testGetScheduleCalculatePageUrl() { + String url = RollupEditorController.getScheduleCalculatePageUrl(lup.Id); + PageReference pageRef = Page.rollupscheduledcalculatemdt; + Assert.areEqual(pageRef.getUrl() + '?id=' + lup.Id, url); + } + + @IsTest + static void testRollupConfig() { + RollupEditorController.RollupConfig cfg = new RollupEditorController.RollupConfig( + lup + ); + Assert.areEqual(lup.Id, cfg.id); + Assert.areEqual(lup.Label, cfg.label); + Assert.areEqual(lup.DeveloperName, cfg.developerName); + Assert.areEqual(lup.Active__c, cfg.active); + Assert.areEqual(lup.AggregateAllRows__c, cfg.aggregateAllRows); + Assert.areEqual(lup.AggregateOperation__c, cfg.aggregateOperation); + Assert.areEqual(lup.AggregateResultField__c, cfg.aggregateResultField); + Assert.areEqual(lup.CalculationMode__c, cfg.calculationMode); + Assert.areEqual(lup.CalculationSharingMode__c, cfg.calculationSharingMode); + Assert.areEqual(lup.ChildObject__c, cfg.childObject); + Assert.areEqual(lup.ConcatenateDelimiter__c, cfg.concatenateDelimiter); + Assert.areEqual(lup.Description__c, cfg.description); + Assert.areEqual(lup.FieldToAggregate__c, cfg.fieldToAggregate); + Assert.areEqual(lup.FieldToOrderBy__c, cfg.fieldToOrderBy); + Assert.areEqual(lup.ParentObject__c, cfg.parentObject); + Assert.areEqual(lup.RelationshipCriteria__c, cfg.relationshipCriteria); + Assert.areEqual( + lup.RelationshipCriteriaFields__c, + cfg.relationshipCriteriaFields + ); + Assert.areEqual(lup.RelationshipField__c, cfg.relationshipField); + Assert.areEqual(lup.RowLimit__c, cfg.rowLimit); + Assert.areEqual(lup.TestCode2__c, cfg.testCode); + Assert.areEqual(lup.TestCodeParent__c, cfg.testCodeParent); + Assert.areEqual(lup.TestCodeSeeAllData__c, cfg.testCodeSeeAllData); + LookupRollupSummary2__mdt newLup = cfg.getRecord(); + + Assert.areEqual(cfg.id, newLup.Id); + Assert.areEqual(cfg.label, newLup.Label); + Assert.areEqual(cfg.developerName, newLup.DeveloperName); + Assert.areEqual(cfg.active, newLup.Active__c); + Assert.areEqual(cfg.aggregateAllRows, newLup.AggregateAllRows__c); + Assert.areEqual(cfg.aggregateOperation, newLup.AggregateOperation__c); + Assert.areEqual(cfg.aggregateResultField, newLup.AggregateResultField__c); + Assert.areEqual(cfg.calculationMode, newLup.CalculationMode__c); + Assert.areEqual( + cfg.calculationSharingMode, + newLup.CalculationSharingMode__c + ); + Assert.areEqual(cfg.childObject, newLup.ChildObject__c); + Assert.areEqual(cfg.concatenateDelimiter, newLup.ConcatenateDelimiter__c); + Assert.areEqual(cfg.description, newLup.Description__c); + Assert.areEqual(cfg.fieldToAggregate, newLup.FieldToAggregate__c); + Assert.areEqual(cfg.fieldToOrderBy, newLup.FieldToOrderBy__c); + Assert.areEqual(cfg.parentObject, newLup.ParentObject__c); + Assert.areEqual(cfg.relationshipCriteria, newLup.RelationshipCriteria__c); + Assert.areEqual( + cfg.relationshipCriteriaFields, + newLup.RelationshipCriteriaFields__c + ); + Assert.areEqual(cfg.relationshipField, newLup.RelationshipField__c); + Assert.areEqual(cfg.rowLimit, newLup.RowLimit__c); + Assert.areEqual(cfg.testCode, newLup.TestCode2__c); + Assert.areEqual(cfg.testCodeParent, newLup.TestCodeParent__c); + Assert.areEqual(cfg.testCodeSeeAllData, newLup.TestCodeSeeAllData__c); + } +} diff --git a/dlrs/main/classes/RollupEditorControllerTest.cls-meta.xml b/dlrs/main/classes/RollupEditorControllerTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/RollupEditorControllerTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/RollupJob.cls b/dlrs/main/classes/RollupJob.cls index 2c494a5e..d66d770e 100644 --- a/dlrs/main/classes/RollupJob.cls +++ b/dlrs/main/classes/RollupJob.cls @@ -34,6 +34,21 @@ global with sharing class RollupJob implements Schedulable, Database.Batchable) rollupSummaryScheduleItems ); } catch (Exception e) { + LookupRollupSummaryLog__c logEntry = new LookupRollupSummaryLog__c(); + logEntry.ParentId__c = 'RollupJob'; + logEntry.ParentObject__c = 'RollupJob'; + + logEntry.ErrorMessage__c = + e.getMessage() + + ' : ' + + e.getStackTraceString(); + + upsert logEntry ParentId__c; + + if ( + DeclarativeLookupRollupSummaries__c.getInstance() + .DisableProblemEmails__c + ) { + // if emails are disabled then bail out + return; + } + // Ids in scope List ids = new List(); for ( @@ -74,7 +108,7 @@ global with sharing class RollupJob implements Schedulable, Database.Batchable{ e.getMessage(), String.join(ids, ',') } ) ); - Messaging.sendEmail(new List{ mail }); + MessageService.sendEmail(new List{ mail }); } } diff --git a/dlrs/main/classes/RollupJob.cls-meta.xml b/dlrs/main/classes/RollupJob.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupJob.cls-meta.xml +++ b/dlrs/main/classes/RollupJob.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupJobTest.cls b/dlrs/main/classes/RollupJobTest.cls index 12ad6f33..7c79ee23 100644 --- a/dlrs/main/classes/RollupJobTest.cls +++ b/dlrs/main/classes/RollupJobTest.cls @@ -26,4 +26,384 @@ @IsTest private class RollupJobTest { + @IsTest + static void testSchedule() { + RollupJob job = new RollupJob(); + Test.startTest(); + Id schedId = System.schedule('TestSchedRollupJob8724', '0 0 * * * ?', job); + Test.stopTest(); + } + + @IsTest + static void testRunJob() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'Account', + ChildObject__c = 'Contact', + RelationshipField__c = 'AccountId', + AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(), + AggregateResultField__c = 'Description', + FieldToAggregate__c = 'Id', + CalculationMode__c = 'Realtime', + AggregateAllRows__c = false, + Active__c = true + ); + + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + DeclarativeLookupRollupSummaries__c settings = new DeclarativeLookupRollupSummaries__c( + DisableProblemEmails__c = true + ); + insert settings; + + List items = new List(); + + LookupRollupSummaryScheduleItems__c scheduledItem = new LookupRollupSummaryScheduleItems__c(); + scheduledItem.Name = a.Id; + scheduledItem.LookupRollupSummary2__c = rollupCfg.Id; + scheduledItem.ParentId__c = a.Id; + scheduledItem.QualifiedParentID__c = a.Id + '#' + rollupCfg.Id; + + items.add(scheduledItem); + + insert items; + + RollupJob job = new RollupJob(); + Test.startTest(); + Database.executeBatch(job); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(0, logs.size()); + } + + @IsTest + static void testDisabledRunJob() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'Account', + ChildObject__c = 'Contact', + RelationshipField__c = 'AccountId', + AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(), + AggregateResultField__c = 'Description', + FieldToAggregate__c = 'Id', + CalculationMode__c = 'Realtime', + AggregateAllRows__c = false, + Active__c = true + ); + + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + // globally disable DLRS + DeclarativeLookupRollupSummaries__c settings = new DeclarativeLookupRollupSummaries__c( + DisableDLRSGlobally__c = true + ); + insert settings; + + List items = new List(); + + LookupRollupSummaryScheduleItems__c scheduledItem = new LookupRollupSummaryScheduleItems__c(); + scheduledItem.Name = a.Id; + scheduledItem.LookupRollupSummary2__c = rollupCfg.Id; + scheduledItem.ParentId__c = a.Id; + scheduledItem.QualifiedParentID__c = a.Id + '#' + rollupCfg.Id; + + items.add(scheduledItem); + + insert items; + + RollupJob job = new RollupJob(); + Test.startTest(); + String jobId = Database.executeBatch(job); + Test.stopTest(); + + AsyncApexJob asyncJob = [ + SELECT Id, Status, JobItemsProcessed, TotalJobItems + FROM AsyncApexJob + WHERE Id = :jobId + ]; + + Assert.areEqual('Completed', asyncJob.Status); + Assert.areEqual(0, asyncJob.JobItemsProcessed); + Assert.areEqual(0, asyncJob.TotalJobItems); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(0, logs.size()); + } + + @IsTest + static void testDisabledSpecificRollupRunJob() { + // find the profile that has access to the Custom Permission we want to use to check (if it even exists in the system) + List permSetsWithAccess = [ + SELECT ParentId, SetupEntityId + FROM SetupEntityAccess + WHERE + SetupEntityId IN ( + SELECT Id + FROM CustomPermission + WHERE DeveloperName = 'DisableDLRS' + ) + AND Parent.IsOwnedByProfile = FALSE + ]; + if (permSetsWithAccess.isEmpty()) { + return; // this org doesn't have the necessary metadata to test this feature + } + + CustomPermission perm = [ + SELECT DeveloperName, NamespacePrefix + FROM CustomPermission + WHERE Id = :permSetsWithAccess[0].SetupEntityId + ]; + + String permName = perm.DeveloperName; + if (String.isNotBlank(perm.NamespacePrefix)) { + permName = perm.NamespacePrefix + '__' + perm.DeveloperName; + } + + // see if the running user already has that permission set + List assignments = [ + SELECT Id + FROM PermissionSetAssignment + WHERE + AssigneeId = :UserInfo.getUserId() + AND PermissionSetId = :permSetsWithAccess[0].ParentId + ]; + if (assignments.isEmpty()) { + // user doesn't have the necessary perm set to grant it to them. + System.runAs(new User(Id = UserInfo.getUserId())) { + insert new PermissionSetAssignment( + AssigneeId = UserInfo.getUserId(), + PermissionSetId = permSetsWithAccess[0].ParentId + ); + } + } + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'Account', + ChildObject__c = 'Contact', + RelationshipField__c = 'AccountId', + AggregateOperation__c = RollupSummaries.AggregateOperation.Count.name(), + AggregateResultField__c = 'NumberOfEmployees', + FieldToAggregate__c = 'Id', + CalculationMode__c = 'Realtime', + AggregateAllRows__c = false, + Active__c = true, + BypassPermissionApiName__c = permName + ); + + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + Contact c = new Contact(LastName = 'Test', AccountId = a.Id); + insert c; + + List items = new List(); + + LookupRollupSummaryScheduleItems__c scheduledItem = new LookupRollupSummaryScheduleItems__c(); + scheduledItem.Name = a.Id; + scheduledItem.LookupRollupSummary2__c = rollupCfg.Id; + scheduledItem.ParentId__c = a.Id; + scheduledItem.QualifiedParentID__c = a.Id + '#' + rollupCfg.Id; + + items.add(scheduledItem); + + insert items; + + String jobId; + Test.startTest(); + Assert.isTrue( + Utilities.userHasCustomPermission(permName), + 'Expected user to have ' + permName + ); + // go into runAs because we need to get the perms recalculated + jobId = Database.executeBatch(new RollupJob()); + Test.stopTest(); + + AsyncApexJob asyncJob = [ + SELECT Id, Status, JobItemsProcessed, TotalJobItems + FROM AsyncApexJob + WHERE Id = :jobId + ]; + + Assert.areEqual('Completed', asyncJob.Status); + Assert.areEqual(1, asyncJob.JobItemsProcessed); + Assert.areEqual(1, asyncJob.TotalJobItems); + + a = [SELECT Id, Description FROM Account WHERE Id = :a.Id]; + + Assert.isNull(a.Description); + + items = [ + SELECT Id, ParentId__c, LookupRollupSummary2__c + FROM LookupRollupSummaryScheduleItems__c + ]; + Assert.isTrue( + items.isEmpty(), + 'Expected empty but found' + JSON.serialize(items) + ); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(0, logs.size()); + } + + @IsTest + static void testFailureWithEmail() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'A', + ChildObject__c = 'X', + RelationshipField__c = '1', + CalculationMode__c = 'Realtime', + Active__c = true + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + List items = new List(); + + LookupRollupSummaryScheduleItems__c scheduledItem = new LookupRollupSummaryScheduleItems__c(); + scheduledItem.Name = a.Id; + scheduledItem.LookupRollupSummary2__c = rollupCfg.Id; + scheduledItem.ParentId__c = a.Id; + scheduledItem.QualifiedParentID__c = a.Id + '#' + rollupCfg.Id; + + items.add(scheduledItem); + + insert items; + + RollupJob job = new RollupJob(); + Test.startTest(); + job.execute(new MockBatchableContext(), items); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(1, logs.size()); + Assert.areEqual('RollupJob', logs[0].ParentObject__c); + Assert.areEqual('RollupJob', logs[0].ParentId__c); + Assert.areEqual(1, MessageService.sentEmailList.size()); + } + + @IsTest + static void testFailureWithoutEmail() { + String prefix = LookupRollupSummary2__mdt.sObjectType.getDescribe() + .getKeyPrefix(); + + LookupRollupSummary2__mdt rollupCfg = new LookupRollupSummary2__mdt( + Id = prefix + '00000000000000D', + Label = 'A Summary', + DeveloperName = 'A_Summary', + ParentObject__c = 'A', + ChildObject__c = 'X', + RelationshipField__c = '1', + CalculationMode__c = 'Realtime', + Active__c = true + ); + RollupSummariesSelector.setRollupCache( + false, + false, + RollupSummary.toList(new List{ rollupCfg }) + ); + + Account a = new Account(Name = 'Test'); + insert a; + + DeclarativeLookupRollupSummaries__c settings = new DeclarativeLookupRollupSummaries__c( + DisableProblemEmails__c = true + ); + insert settings; + + List items = new List(); + + LookupRollupSummaryScheduleItems__c scheduledItem = new LookupRollupSummaryScheduleItems__c(); + scheduledItem.Name = a.Id; + scheduledItem.LookupRollupSummary2__c = rollupCfg.Id; + scheduledItem.ParentId__c = a.Id; + scheduledItem.QualifiedParentID__c = a.Id + '#' + rollupCfg.Id; + + items.add(scheduledItem); + + insert items; + + RollupJob job = new RollupJob(); + Test.startTest(); + job.execute(new MockBatchableContext(), items); + Test.stopTest(); + + List logs = [ + SELECT Id, ParentId__c, ParentObject__c + FROM LookupRollupSummaryLog__c + ]; + Assert.areEqual(1, logs.size()); + Assert.areEqual('RollupJob', logs[0].ParentObject__c); + Assert.areEqual('RollupJob', logs[0].ParentId__c); + Assert.areEqual(0, MessageService.sentEmailList.size()); + } + + public class MockBatchableContext implements Database.BatchableContext { + public Id getJobId() { + return '100000000000000'; + } + + public Id getChildJobId() { + return '100000000000000'; + } + } } diff --git a/dlrs/main/classes/RollupJobTest.cls-meta.xml b/dlrs/main/classes/RollupJobTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupJobTest.cls-meta.xml +++ b/dlrs/main/classes/RollupJobTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupScheduledCalculateController.cls-meta.xml b/dlrs/main/classes/RollupScheduledCalculateController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupScheduledCalculateController.cls-meta.xml +++ b/dlrs/main/classes/RollupScheduledCalculateController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupScheduledCalculateControllerTest.cls-meta.xml b/dlrs/main/classes/RollupScheduledCalculateControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupScheduledCalculateControllerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupScheduledCalculateControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupService.cls b/dlrs/main/classes/RollupService.cls index c041b617..85db874d 100644 --- a/dlrs/main/classes/RollupService.cls +++ b/dlrs/main/classes/RollupService.cls @@ -96,6 +96,14 @@ global with sharing class RollupService { // Already running? checkJobAlreadyRunning(lookupId, lookup.Name); + if ( + DeclarativeLookupRollupSummaries__c.getInstance() + .DisableDLRSGlobally__c == true + ) { + throw new RollupServiceException( + 'DLRS is disabled through Custom Settings, unable to run job.' + ); + } // Already active? if ( (lookup.Active == null || lookup.Active == false) && @@ -381,6 +389,13 @@ global with sharing class RollupService { return BypassHandler.bypass(rollupName); } + /** + * Allow the bypass of all rollups for this transaction, can be cleared with "clearAllBypasses" method + */ + global static void bypassAll() { + BypassHandler.setBypassAll(true); + } + /** * Clears the bypass of a rollup, given its unique name. */ @@ -389,7 +404,7 @@ global with sharing class RollupService { } /** - * Clears the bypass of aall rollups. + * Clears the bypass of all rollups. */ global static void clearAllBypasses() { BypassHandler.clearAllBypasses(); @@ -491,10 +506,17 @@ global with sharing class RollupService { } else { lookup = lookups.get(scheduleItem.LookupRollupSummary2__c); } - if (lookup == null) { + + if ( + // sched item is for a non-existent rollup definition + lookup == null || + // running user has a custom perm that disables this rollup + Utilities.userHasCustomPermission(lookup.BypassCustPermApiName) + ) { + // do not process this item, item will still be deleted continue; } - // The lookup definition could have been changed or due to a historic bug in correctly associated + // The lookup definition could have been changed or due to a historic bug incorrectly associated if (parentId.getSobjectType() != gd.get(lookup.ParentObject)) continue; Set parentIds = parentIdsByParentType.get(lookup.ParentObject); @@ -964,7 +986,10 @@ global with sharing class RollupService { // this avoids having to re-parse RelationshipCriteria & OrderBy fields during field change detection Map> fieldsInvolvedInLookup = new Map>(); for (RollupSummary lookup : lookups) { - if (BypassHandler.isBypassed(lookup.UniqueName)) { + if ( + Utilities.userHasCustomPermission(lookup.BypassCustPermApiName) || + BypassHandler.isBypassed(lookup.UniqueName) + ) { continue; } @@ -1099,7 +1124,10 @@ global with sharing class RollupService { // Build a revised list of lookups to process that includes only where fields used in the rollup have changed List lookupsToProcess = new List(); for (RollupSummary lookup : lookups) { - if (BypassHandler.isBypassed(lookup.UniqueName)) { + if ( + Utilities.userHasCustomPermission(lookup.BypassCustPermApiName) || + BypassHandler.isBypassed(lookup.UniqueName) + ) { continue; } @@ -1134,7 +1162,10 @@ global with sharing class RollupService { : existingRecords; for (SObject childRecord : recordsToProcess.values()) { for (RollupSummary lookup : lookups) { - if (BypassHandler.isBypassed(lookup.UniqueName)) { + if ( + Utilities.userHasCustomPermission(lookup.BypassCustPermApiName) || + BypassHandler.isBypassed(lookup.UniqueName) + ) { continue; } @@ -1179,7 +1210,10 @@ global with sharing class RollupService { List runnowLookups = new List(); List scheduledItems = new List(); for (RollupSummary lookup : lookups) { - if (BypassHandler.isBypassed(lookup.UniqueName)) { + if ( + Utilities.userHasCustomPermission(lookup.BypassCustPermApiName) || + BypassHandler.isBypassed(lookup.UniqueName) + ) { continue; } @@ -1270,7 +1304,32 @@ global with sharing class RollupService { } } // These records drive the work done by the RollupJob Scheduled Apex Class - upsert scheduledItems QualifiedParentID__c; + List results = Database.upsert( + scheduledItems, + LookupRollupSummaryScheduleItems__c.QualifiedParentID__c, + false /* allOrNone */, + AccessLevel.SYSTEM_MODE + ); + // iterate through errors, only return an exception for something other than DUPLICATE_VALUE + // because DUPLICATE_VALUE errors are usually sharing problems and we're happy as long as the record is in the database + for (Integer i = 0, j = results.size(); i < j; i++) { + if (!results[i].isSuccess()) { + for (Database.Error err : results[i].getErrors()) { + if (err.getStatusCode() != System.StatusCode.DUPLICATE_VALUE) { + throw new DmlException( + 'Upsert failed. First exception on row ' + + i + + '; first error: ' + + err.getStatusCode() + + ', ' + + err.getMessage() + + ': ' + + err.getFields() + ); + } + } + } + } } // Process each context (parent child relationship) and its associated rollups @@ -1636,8 +1695,19 @@ global with sharing class RollupService { masterRecords.set(outerIndex, masterRecords.get(indexOfMin)); masterRecords.set(indexOfMin, temp); } + // Create DmlOptions instance + Database.DMLOptions dml = new Database.DMLOptions(); + + // Allow save even if duplicates are detected + dml.DuplicateRuleHeader.allowSave = true; + + // Run as current user to enforce sharing rules + dml.DuplicateRuleHeader.runAsCurrentUser = true; + + dml.OptAllOrNone = allOrNothing; + try { - return Database.update(masterRecords, allOrNothing); + return Database.update(masterRecords, dml); } catch (DMLException e) { // Determine if the exception is due to parent record/s having been deleted Boolean throwException = true; @@ -1660,6 +1730,7 @@ global with sharing class RollupService { return new List(); } // Throw on as normal + throw e; } } diff --git a/dlrs/main/classes/RollupService.cls-meta.xml b/dlrs/main/classes/RollupService.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupService.cls-meta.xml +++ b/dlrs/main/classes/RollupService.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceException.cls-meta.xml b/dlrs/main/classes/RollupServiceException.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceException.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceException.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceTest.cls b/dlrs/main/classes/RollupServiceTest.cls index 23f8ad48..080fd0c7 100644 --- a/dlrs/main/classes/RollupServiceTest.cls +++ b/dlrs/main/classes/RollupServiceTest.cls @@ -2623,54 +2623,58 @@ private with sharing class RollupServiceTest { @IsTest static void testBypassApi() { String rollupUniqueName = 'SampleRollup'; - Boolean bypassResult; - Test.startTest(); - System.assertEquals( - false, + Assert.isFalse( RollupService.isBypassed(rollupUniqueName), 'The rollup should not be bypassed yet.' ); - bypassResult = RollupService.bypass(rollupUniqueName); - System.assert( - bypassResult, + + Assert.isTrue( + RollupService.bypass(rollupUniqueName), 'Should have modified the bypassed rollups set.' ); - System.assertEquals( - true, + Assert.isTrue( RollupService.isBypassed(rollupUniqueName), 'The rollup should be bypassed.' ); - bypassResult = RollupService.clearBypass(rollupUniqueName); - System.assert( - bypassResult, + + Assert.isTrue( + RollupService.clearBypass(rollupUniqueName), 'Should have modified the bypassed rollups set.' ); - System.assertEquals( - false, + Assert.isFalse( RollupService.isBypassed(rollupUniqueName), 'The rollup should not be bypassed anymore.' ); RollupService.bypass(rollupUniqueName); RollupService.clearAllBypasses(); - System.assertEquals( - false, + Assert.isFalse( RollupService.isBypassed(rollupUniqueName), 'The rollup should not be bypassed anymore.' ); - bypassResult = RollupService.bypass(null); - System.assertEquals( - false, - bypassResult, + Assert.isFalse( + RollupService.bypass(null), 'Should return "false" for a null rollup name.' ); - bypassResult = RollupService.clearBypass(null); - System.assertEquals( - false, - bypassResult, + Assert.isFalse( + RollupService.clearBypass(null), 'Should return "false" for a null rollup name.' ); - Test.stopTest(); + + RollupService.bypassAll(); + Assert.isTrue( + RollupService.isBypassed(rollupUniqueName), + 'Should return "true" for all rollup names.' + ); + Assert.isTrue( + RollupService.isBypassed('new name'), + 'Should return "true" for all rollup names.' + ); + RollupService.clearAllBypasses(); + Assert.isFalse( + RollupService.isBypassed(rollupUniqueName), + 'Should return "false" for all rollup names.' + ); } } diff --git a/dlrs/main/classes/RollupServiceTest.cls-meta.xml b/dlrs/main/classes/RollupServiceTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceTest.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceTest2.cls-meta.xml b/dlrs/main/classes/RollupServiceTest2.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceTest2.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceTest2.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceTest3.cls b/dlrs/main/classes/RollupServiceTest3.cls index e4f2ef04..c09dfdfd 100644 --- a/dlrs/main/classes/RollupServiceTest3.cls +++ b/dlrs/main/classes/RollupServiceTest3.cls @@ -430,6 +430,8 @@ private with sharing class RollupServiceTest3 { rollupSummary.CalculationMode__c = 'Scheduled'; insert rollupSummary; + RollupSummariesSelector.clearRollupCache(); + ApexPages.StandardController standardController = new ApexPages.StandardController( rollupSummary ); @@ -492,6 +494,9 @@ private with sharing class RollupServiceTest3 { WHERE ApexClass.Name = 'RollupCalculateJobSchedulable' ] > 0 ); + + Assert.areEqual(0, [SELECT COUNT() FROM LookupRollupSummaryLog__c]); + Assert.areEqual(0, MessageService.sentEmailList.size()); } private testMethod static void testDeveloperAPI() { diff --git a/dlrs/main/classes/RollupServiceTest3.cls-meta.xml b/dlrs/main/classes/RollupServiceTest3.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceTest3.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceTest3.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceTest4.cls-meta.xml b/dlrs/main/classes/RollupServiceTest4.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceTest4.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceTest4.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceTest5.cls-meta.xml b/dlrs/main/classes/RollupServiceTest5.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceTest5.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceTest5.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupServiceTest6.cls-meta.xml b/dlrs/main/classes/RollupServiceTest6.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupServiceTest6.cls-meta.xml +++ b/dlrs/main/classes/RollupServiceTest6.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaries.cls b/dlrs/main/classes/RollupSummaries.cls index cc994d83..2700951b 100644 --- a/dlrs/main/classes/RollupSummaries.cls +++ b/dlrs/main/classes/RollupSummaries.cls @@ -399,7 +399,7 @@ public class RollupSummaries extends fflib_SObjectDomain { if (!operationsSupportingRowLimit.contains(operation)) { lookupRollupSummary.Fields.RowLimit.addError( error( - 'Row Limit is only supported on Last and Concatentate operators.', + 'Row Limit is only supported on Last and Concatenate operators.', lookupRollupSummary.Record, LookupRollupSummary__c.RowLimit__c ) diff --git a/dlrs/main/classes/RollupSummaries.cls-meta.xml b/dlrs/main/classes/RollupSummaries.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaries.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaries.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummariesSelector.cls b/dlrs/main/classes/RollupSummariesSelector.cls index ad44b875..d31f44e2 100644 --- a/dlrs/main/classes/RollupSummariesSelector.cls +++ b/dlrs/main/classes/RollupSummariesSelector.cls @@ -279,6 +279,7 @@ public class RollupSummariesSelector { LookupRollupSummary2__mdt.Active__c, LookupRollupSummary2__mdt.AggregateOperation__c, LookupRollupSummary2__mdt.AggregateResultField__c, + LookupRollupSummary2__mdt.BypassPermissionApiName__c, LookupRollupSummary2__mdt.CalculationMode__c, LookupRollupSummary2__mdt.ChildObject__c, LookupRollupSummary2__mdt.ConcatenateDelimiter__c, diff --git a/dlrs/main/classes/RollupSummariesSelector.cls-meta.xml b/dlrs/main/classes/RollupSummariesSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummariesSelector.cls-meta.xml +++ b/dlrs/main/classes/RollupSummariesSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummariesSelectorTest.cls-meta.xml b/dlrs/main/classes/RollupSummariesSelectorTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummariesSelectorTest.cls-meta.xml +++ b/dlrs/main/classes/RollupSummariesSelectorTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummariesTest.cls b/dlrs/main/classes/RollupSummariesTest.cls index 352db024..6afa77fa 100644 --- a/dlrs/main/classes/RollupSummariesTest.cls +++ b/dlrs/main/classes/RollupSummariesTest.cls @@ -57,10 +57,13 @@ private class RollupSummariesTest { ); fflib_SObjectDomain.triggerHandler(RollupSummaries.class); System.assertEquals(1, fflib_SObjectDomain.Errors.getAll().size()); - System.assertEquals( - 'Relationship Criteria \'StageName Equals Won\' is not valid, see SOQL documentation http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_conditionexpression.htm, error is \'unexpected token: \'Equals\'\'', - fflib_SObjectDomain.Errors.getAll()[0].message + Assert.isTrue( + fflib_SObjectDomain.Errors.getAll()[0] + .message.startsWith( + 'Relationship Criteria \'StageName Equals Won\' is not valid, see SOQL documentation' + ) ); + System.assertEquals( LookupRollupSummary__c.RelationShipCriteria__c, ((fflib_SObjectDomain.FieldError) fflib_SObjectDomain.Errors.getAll()[0]) @@ -768,7 +771,7 @@ private class RollupSummariesTest { fflib_SObjectDomain.triggerHandler(RollupSummaries.class); System.assertEquals(1, fflib_SObjectDomain.Errors.getAll().size()); System.assertEquals( - 'Row Limit is only supported on Last and Concatentate operators.', + 'Row Limit is only supported on Last and Concatenate operators.', fflib_SObjectDomain.Errors.getAll()[0].message ); System.assertEquals( diff --git a/dlrs/main/classes/RollupSummariesTest.cls-meta.xml b/dlrs/main/classes/RollupSummariesTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummariesTest.cls-meta.xml +++ b/dlrs/main/classes/RollupSummariesTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummariesTriggerTest.cls-meta.xml b/dlrs/main/classes/RollupSummariesTriggerTest.cls-meta.xml index 3a10d2eb..ba7ea1b5 100644 --- a/dlrs/main/classes/RollupSummariesTriggerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupSummariesTriggerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active \ No newline at end of file diff --git a/dlrs/main/classes/RollupSummary.cls b/dlrs/main/classes/RollupSummary.cls index 05e47c00..9bbc4141 100644 --- a/dlrs/main/classes/RollupSummary.cls +++ b/dlrs/main/classes/RollupSummary.cls @@ -100,6 +100,21 @@ public class RollupSummary { } } + public String BypassCustPermApiName { + get { + if (Record instanceof LookupRollupSummary2__mdt) { + return (String) Record.get('BypassPermissionApiName__c'); + } else { + return null; + } + } + set { + if (Record instanceof LookupRollupSummary2__mdt) { + Record.put('BypassPermissionApiName__c', value); + } + } + } + public String CalculationMode { get { return (String) Record.get('CalculationMode__c'); @@ -335,12 +350,15 @@ public class RollupSummary { **/ public class FieldData { public RecordMetadata RecordMetadata { get; private set; } + public List errors { get; private set; } public FieldData(RecordMetadata recordMetadata) { this.RecordMetadata = recordMetadata; + this.errors = new List(); } public void addError(String errorMessage) { + this.errors.add(errorMessage); // Field in error? String fieldLabelInError; if (this === RecordMetadata.Active) { diff --git a/dlrs/main/classes/RollupSummary.cls-meta.xml b/dlrs/main/classes/RollupSummary.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummary.cls-meta.xml +++ b/dlrs/main/classes/RollupSummary.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryEnhancedController.cls-meta.xml b/dlrs/main/classes/RollupSummaryEnhancedController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryEnhancedController.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryEnhancedController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryEnhancedControllerTest.cls-meta.xml b/dlrs/main/classes/RollupSummaryEnhancedControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryEnhancedControllerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryEnhancedControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryLogDeleteController.cls-meta.xml b/dlrs/main/classes/RollupSummaryLogDeleteController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryLogDeleteController.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryLogDeleteController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryLogDeleteControllerTest.cls-meta.xml b/dlrs/main/classes/RollupSummaryLogDeleteControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryLogDeleteControllerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryLogDeleteControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryScheduleItemsSelector.cls-meta.xml b/dlrs/main/classes/RollupSummaryScheduleItemsSelector.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryScheduleItemsSelector.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryScheduleItemsSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryTest.cls b/dlrs/main/classes/RollupSummaryTest.cls new file mode 100644 index 00000000..b6cbd011 --- /dev/null +++ b/dlrs/main/classes/RollupSummaryTest.cls @@ -0,0 +1,23 @@ +@IsTest +public class RollupSummaryTest { + @IsTest + static void testBypassCustPermApiName() { + LookupRollupSummary2__mdt rollup = new LookupRollupSummary2__mdt(); + rollup.BypassPermissionApiName__c = null; + RollupSummary rs = new RollupSummary(rollup); + Assert.areEqual(null, rs.BypassCustPermApiName); + rollup.BypassPermissionApiName__c = 'Rollup1'; + rs = new RollupSummary(rollup); + Assert.areEqual('Rollup1', rs.BypassCustPermApiName); + + rs.BypassCustPermApiName = 'Rollup2'; + Assert.areEqual('Rollup2', rs.BypassCustPermApiName); + + LookupRollupSummary__c rollupCO = new LookupRollupSummary__c(); + rs = new RollupSummary(rollupCO); + Assert.areEqual(null, rs.BypassCustPermApiName); + rs.BypassCustPermApiName = 'Rollup1'; + // we're not building support in the Custom Object rollup versions, setting the value is ignored + Assert.areEqual(null, rs.BypassCustPermApiName); + } +} diff --git a/dlrs/main/classes/RollupSummaryTest.cls-meta.xml b/dlrs/main/classes/RollupSummaryTest.cls-meta.xml new file mode 100644 index 00000000..7d5f9e8a --- /dev/null +++ b/dlrs/main/classes/RollupSummaryTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 61.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/RollupSummaryViewController.cls-meta.xml b/dlrs/main/classes/RollupSummaryViewController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryViewController.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryViewController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/RollupSummaryViewControllerTest.cls-meta.xml b/dlrs/main/classes/RollupSummaryViewControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/RollupSummaryViewControllerTest.cls-meta.xml +++ b/dlrs/main/classes/RollupSummaryViewControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/SchedulerController.cls b/dlrs/main/classes/SchedulerController.cls new file mode 100644 index 00000000..53cce962 --- /dev/null +++ b/dlrs/main/classes/SchedulerController.cls @@ -0,0 +1,45 @@ +public with sharing class SchedulerController { + @AuraEnabled + public static List getCurrentJobs(String className) { + return new AsyncApexJobsSelector() + .getScheduledInstancesOfType( + Type.forName(Utilities.namespace(), className) + ); + } + + @AuraEnabled + public static List getAllScheduledJobs() { + return new AsyncApexJobsSelector().getAllScheduledJobs(); + } + + @AuraEnabled + public static List scheduleJobs( + String className, + List newSchedules + ) { + Integer counter = 1; + List jobIds = new List(); + Schedulable clsInstance = (Schedulable) Type.forName(className) + .newInstance(); + List currentJobs = new AsyncApexJobsSelector() + .getAllScheduledJobs(); + List existingNames = new List(); + for (AsyncApexJob job : currentJobs) { + existingNames.add(job.CronTrigger.CronJobDetail.Name); + } + for (String cron : newSchedules) { + String scheduledName = className + ' ' + counter++; + while (existingNames.contains(scheduledName)) { + // if this name is taken, get the next + scheduledName = className + ' ' + counter++; + } + jobIds.add(System.schedule(scheduledName, cron, clsInstance)); + } + return jobIds; + } + + @AuraEnabled + public static void cancelScheduledJob(Id jobId) { + System.abortJob(jobId); + } +} diff --git a/dlrs/main/classes/SchedulerController.cls-meta.xml b/dlrs/main/classes/SchedulerController.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/SchedulerController.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/SchedulerControllerTest.cls b/dlrs/main/classes/SchedulerControllerTest.cls new file mode 100644 index 00000000..e53bab16 --- /dev/null +++ b/dlrs/main/classes/SchedulerControllerTest.cls @@ -0,0 +1,81 @@ +@IsTest +public with sharing class SchedulerControllerTest { + @IsTest + static void testGetCurrentJobsAndCancelSched() { + List jobsStart = SchedulerController.getCurrentJobs( + 'RollupJob' + ); + + String jobId = System.schedule( + 'TestJob112233', + '0 0 * * * ? 2100', + new RollupJob() + ); + + List jobs = SchedulerController.getCurrentJobs('RollupJob'); + Assert.isFalse( + jobs.isEmpty(), + 'Expected jobs to return at least one result' + ); + Assert.areEqual(1, jobs.size() - jobsStart.size()); + + Boolean includesJob = false; + for (AsyncApexJob j : jobs) { + if (j.CronTriggerId == jobId) { + includesJob = true; + } + } + Assert.isTrue( + includesJob, + 'Expected jobs list to include temp scheduled job' + ); + + SchedulerController.cancelScheduledJob(jobId); + + jobs = SchedulerController.getCurrentJobs('RollupJob'); + + includesJob = false; + for (AsyncApexJob j : jobs) { + if (j.CronTriggerId == jobId) { + includesJob = true; + } + } + Assert.isFalse(includesJob, 'Expected job to be cancelled'); + } + + @IsTest + static void testGetAllScheduledJobs() { + List jobsStart = SchedulerController.getAllScheduledJobs(); + String jobId = System.schedule( + 'TestJob112233', + '0 0 * * * ? 2100', + new RollupJob() + ); + + List jobsAfter = SchedulerController.getAllScheduledJobs(); + Assert.areEqual(1, jobsAfter.size() - jobsStart.size()); + System.abortJob(jobId); + } + + @IsTest + static void testScheduleJobs() { + List jobsStart = SchedulerController.getAllScheduledJobs(); + List jobIds = SchedulerController.scheduleJobs( + 'RollupJob', + new List{ '0 0 * * * ? 2100', '0 0 * * * ? 2101' } + ); + jobIds.addAll( + SchedulerController.scheduleJobs( + 'RollupJob', + new List{ '0 0 * * * ? 2100', '0 0 * * * ? 2101' } + ) + ); + List jobsAfter = SchedulerController.getAllScheduledJobs(); + + Assert.areEqual(4, jobsAfter.size() - jobsStart.size()); + + for (Id jId : jobIds) { + System.abortJob(jId); + } + } +} diff --git a/dlrs/main/classes/SchedulerControllerTest.cls-meta.xml b/dlrs/main/classes/SchedulerControllerTest.cls-meta.xml new file mode 100644 index 00000000..ba7ea1b5 --- /dev/null +++ b/dlrs/main/classes/SchedulerControllerTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/TestContext.cls-meta.xml b/dlrs/main/classes/TestContext.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/TestContext.cls-meta.xml +++ b/dlrs/main/classes/TestContext.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/Utilities.cls b/dlrs/main/classes/Utilities.cls index 9f342e50..3c23defd 100644 --- a/dlrs/main/classes/Utilities.cls +++ b/dlrs/main/classes/Utilities.cls @@ -25,6 +25,8 @@ **/ public class Utilities { + static Set permsHeldByUser; + /** * Get the namespace of this package **/ @@ -85,6 +87,70 @@ public class Utilities { return orderByFields; } + /** + * permissionNames is null or comma-separated list of Custom Permissions + * returns `true` if user has any of those custom permissions + */ + public static Boolean userHasCustomPermission(String permissionNames) { + // early out to avoid performance overhead, most rollups probably don't need to check perms + if (String.isBlank(permissionNames)) { + return false; + } + Set userPerms = getUserCustomPerms(); + + for (String permName : permissionNames.split(',')) { + // match lowercase because the index was built lowercase + if (userPerms.contains(permName.trim().toLowerCase())) { + return true; + } + } + + return false; + } + + private static Set getUserCustomPerms() { + if (permsHeldByUser == null) { + permsHeldByUser = new Set(); + // need to init the list of perms held by the user + + // Get the list of CustomPermission Ids that the user has access to + // this respects Perm Sets, Perm Set Groups, and Profiles + List customPermIds = new List(); + for (SetupEntityAccess entity : [ + SELECT SetupEntityId + FROM SetupEntityAccess + WHERE + SetupEntityType = 'CustomPermission' + AND ParentId IN ( + SELECT PermissionSetId + FROM PermissionSetAssignment + WHERE AssigneeId = :UserInfo.getUserId() + ) + ]) { + customPermIds.add(entity.SetupEntityId); + } + // resolve the Custom Permission Id into string names + for (CustomPermission perm : [ + SELECT Id, DeveloperName, NamespacePrefix + FROM CustomPermission + WHERE Id IN :customPermIds + ]) { + String permName = perm.DeveloperName; + if (String.isNotBlank(perm.NamespacePrefix)) { + // if this has a namespace prefix we should build a unified string + permName = String.format( + '{0}__{1}', + new List{ perm.NamespacePrefix, permName } + ); + } + // normalize to lowercase for matching purposes + permsHeldByUser.add(permName.toLowerCase()); + } + } + + return permsHeldByUser; + } + // Regular expression for Order By Clause // Case-Insensitive pattern // Group 1 - Field Name (required) diff --git a/dlrs/main/classes/Utilities.cls-meta.xml b/dlrs/main/classes/Utilities.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/Utilities.cls-meta.xml +++ b/dlrs/main/classes/Utilities.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/UtilitiesTest.cls b/dlrs/main/classes/UtilitiesTest.cls new file mode 100644 index 00000000..23be6eba --- /dev/null +++ b/dlrs/main/classes/UtilitiesTest.cls @@ -0,0 +1,60 @@ +@IsTest +public class UtilitiesTest { + @IsTest + static void testUserHasCustomPermission() { + // find the permission set that has access to the Custom Permission we want to use to check (if it even exists in the system) + List permSetsWithAccess = [ + SELECT ParentId, SetupEntityId + FROM SetupEntityAccess + WHERE + SetupEntityId IN ( + SELECT Id + FROM CustomPermission + WHERE DeveloperName = 'DisableDLRS' + ) + AND Parent.IsOwnedByProfile = FALSE + ]; + if (!permSetsWithAccess.isEmpty()) { + CustomPermission perm = [ + SELECT DeveloperName, NamespacePrefix + FROM CustomPermission + WHERE Id = :permSetsWithAccess[0].SetupEntityId + ]; + // there is a compatible permission set that we can use for testing + // see if the running user already has that permission set + List assignments = [ + SELECT Id + FROM PermissionSetAssignment + WHERE + AssigneeId = :UserInfo.getUserId() + AND PermissionSetId = :permSetsWithAccess[0].ParentId + ]; + if (assignments.isEmpty()) { + // user doesn't have the necessary perm set to grant it to them, add it + System.runAs(new User(Id = UserInfo.getUserId())) { + insert new PermissionSetAssignment( + AssigneeId = UserInfo.getUserId(), + PermissionSetId = permSetsWithAccess[0].ParentId + ); + } + } + // make sure the utility can see the perm set correctly + // (we do it here because any earlier and the utility would have built the cache already) + String permName = perm.DeveloperName; + if (String.isNotBlank(perm.NamespacePrefix)) { + permName = perm.NamespacePrefix + '__' + perm.DeveloperName; + } + Assert.isTrue( + Utilities.userHasCustomPermission(permName), + 'Expected user to have ' + permName + ); + } + + Assert.areEqual(false, Utilities.userHasCustomPermission(null)); + Assert.areEqual(false, Utilities.userHasCustomPermission('madeup_name')); + Assert.areEqual( + false, + Utilities.userHasCustomPermission('madeup_name,name2 , name3,name4') + ); + } +} diff --git a/dlrs/main/classes/UtilitiesTest.cls-meta.xml b/dlrs/main/classes/UtilitiesTest.cls-meta.xml new file mode 100644 index 00000000..7d5f9e8a --- /dev/null +++ b/dlrs/main/classes/UtilitiesTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 61.0 + Active + \ No newline at end of file diff --git a/dlrs/main/classes/WelcomeController.cls-meta.xml b/dlrs/main/classes/WelcomeController.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/WelcomeController.cls-meta.xml +++ b/dlrs/main/classes/WelcomeController.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/classes/WelcomeControllerTest.cls-meta.xml b/dlrs/main/classes/WelcomeControllerTest.cls-meta.xml index df13efa8..800ee428 100644 --- a/dlrs/main/classes/WelcomeControllerTest.cls-meta.xml +++ b/dlrs/main/classes/WelcomeControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/dlrs/main/flexipages/ManageLookupRollupSummaries.flexipage-meta.xml b/dlrs/main/flexipages/ManageLookupRollupSummaries.flexipage-meta.xml new file mode 100644 index 00000000..f9e86798 --- /dev/null +++ b/dlrs/main/flexipages/ManageLookupRollupSummaries.flexipage-meta.xml @@ -0,0 +1,18 @@ + + + + + + manageRollups + c_manageRollups + + + main + Region + + Manage Lookup Rollup Summaries (New) + + AppPage + diff --git a/dlrs/main/layouts/LookupRollupSummary2__mdt-Lookup Rollup Summary Layout.layout-meta.xml b/dlrs/main/layouts/LookupRollupSummary2__mdt-Lookup Rollup Summary Layout.layout-meta.xml index 421986aa..bc10cea0 100644 --- a/dlrs/main/layouts/LookupRollupSummary2__mdt-Lookup Rollup Summary Layout.layout-meta.xml +++ b/dlrs/main/layouts/LookupRollupSummary2__mdt-Lookup Rollup Summary Layout.layout-meta.xml @@ -169,6 +169,10 @@ Edit TestCodeSeeAllData__c + + Edit + BypassPermissionApiName__c + diff --git a/dlrs/main/lwc/autocompleteCombobox/__tests__/autocompleteCombobox.test.js b/dlrs/main/lwc/autocompleteCombobox/__tests__/autocompleteCombobox.test.js new file mode 100644 index 00000000..3768e99a --- /dev/null +++ b/dlrs/main/lwc/autocompleteCombobox/__tests__/autocompleteCombobox.test.js @@ -0,0 +1,25 @@ +import { createElement } from "lwc"; +import AutocompleteCombobox from "c/autocompleteCombobox"; + +describe("c-autocomplete-combobox", () => { + afterEach(() => { + // The jsdom instance is shared across test cases in a single file so reset the DOM + while (document.body.firstChild) { + document.body.removeChild(document.body.firstChild); + } + }); + + it("TODO: test case generated by CLI command, please fill in test logic", () => { + // Arrange + const element = createElement("c-autocomplete-combobox", { + is: AutocompleteCombobox + }); + + // Act + document.body.appendChild(element); + + // Assert + // const div = element.shadowRoot.querySelector('div'); + expect(1).toBe(1); + }); +}); diff --git a/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.css b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.css new file mode 100644 index 00000000..40f9dea8 --- /dev/null +++ b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.css @@ -0,0 +1,11 @@ +.my-popover{ + pointer-events: none; + opacity: 0; + transition: all 100ms linear; +} + +.my-helper-text-icon:hover .my-popover { + opacity: 1; +} + + diff --git a/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.html b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.html new file mode 100644 index 00000000..8ab2bc1b --- /dev/null +++ b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.html @@ -0,0 +1,148 @@ + diff --git a/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.js b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.js new file mode 100644 index 00000000..c1de82fa --- /dev/null +++ b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.js @@ -0,0 +1,223 @@ +import { LightningElement, api, track } from "lwc"; +import jsLevenshtein from "./js-levenshtein"; + +const DELAY = 100; // timing in miliseconds + +export default class AutocompleteCombobox extends LightningElement { + // *** PROPERTIES *** + + @api label; + @api placeholder; + @api helperText; + @api disabled = false; + @api searchThreshold = 1; + @api searchRequired = false; + @api maxSearchResults = -1; + @api noResultsMessage = 'No Results Found...'; + + @track selectedOption = {}; + @track _value = ""; + @api + get value() { + return this._value; + } + set value(val) { + this._value = val; + this.selectOptionByValue(); + if (this._value) { + this.showSelectionInput(); + } else { + this.showSearchInput(); + } + } + _firstTimeSetOptions = true; + @track filteredOptions = []; + _options = []; + @api + get options() { + return this._options; + } + set options(val) { + this._options = val ? val : []; + this.filteredOptions = this._options; + this.searchKey = ""; + this.selectedOption = {}; + if (this._value) { + this.selectOptionByValue(); + this.showSelectionInput(); + } else { + this.showSearchInput(); + } + } + @track isLoading = false; + @track searchKey = ""; + get styleClassCombobox() { + let styleClass = + "slds-combobox__form-element slds-input-has-icon slds-input-has-icon_left-right"; + if (this.selectedOption && !this.selectedOption.icon) { + styleClass = styleClass.replace( + "slds-input-has-icon_left-right", + "slds-input-has-icon_right" + ); + } + return styleClass; + } + get visibleOptions() { + let results = this.filteredOptions; + if (this.maxSearchResults > 0) { + results = results.slice(0, this.maxSearchResults); + } + if (this.searchRequired) { + if (this.searchKey.length >= this.searchThreshold) + return results + return []; + } + return results; + } + get optionsAvailable() { + return this.visibleOptions.length > 0; + } + // *** EVENT METHODS *** + showDropdown() { + const lookupInputContainer = this.template.querySelector( + ".lookupInputContainer" + ); + const clsList = lookupInputContainer.classList; + if (!clsList.contains('slds-is-open')) { + clsList.add('slds-is-open'); + } + } + hideDropdown() { + const lookupInputContainer = this.template.querySelector( + ".lookupInputContainer" + ); + const clsList = lookupInputContainer.classList; + if (clsList.contains('slds-is-open')) { + // Allow enough time for the click handler of the object list to run before we burn the elements + // 310 is chosen because on some mobile devices clicks can take up to 300ms to fire + // eslint-disable-next-line @lwc/lwc/no-async-operation + setTimeout(() => { + clsList.remove("slds-is-open"); + }, 310); + } + } + onChangeSearchKey(event) { + // Debouncing this method: Do not update the reactive property as long as this function is + // being called within a delay of DELAY. This is to avoid a very large number of Apex method calls. + this.isLoading = true; + window.clearTimeout(this.delayTimeout); + this.searchKey = event.target.value; + this.delayTimeout = setTimeout(() => { + // eslint-disable-line + this.filterOptions(this.searchKey); + this.isLoading = false; + }, DELAY); + } + onSelectOption(event) { + this._value = event.target.getAttribute("data-name"); + this.selectOptionByValue(); + this.showSelectionInput(); + this.dispatchSelectionEvent(); + } + // method to clear selected lookup record + onRemoveSelection() { + this._value = ""; + this.searchKey = ""; + this.selectedOption = {}; + this.filteredOptions = this._options; + this.showSearchInput(); + this.dispatchSelectionEvent(); + } + // *** CONTROLLER + filterOptions(searchKey) { + try { + if (searchKey.length >= this.searchThreshold) { + const lowerCaseSearchKey = searchKey.toLowerCase(); + this.filteredOptions = this._options.filter(({ value, label }) => { + return ( + value.toLowerCase().includes(lowerCaseSearchKey) || + label.toLowerCase().includes(lowerCaseSearchKey) + ); + }).sort((a, b) => { + return ( + // take the nearest of the Label and value + Math.min( + jsLevenshtein(lowerCaseSearchKey, a.value.toLowerCase()), + jsLevenshtein(lowerCaseSearchKey, a.label.toLowerCase()) + ) - + Math.min( + jsLevenshtein(lowerCaseSearchKey, b.value.toLowerCase()), + jsLevenshtein(lowerCaseSearchKey, b.label.toLowerCase()) + ) + ); + }); + } else { + this.filteredOptions = this._options; + } + } catch (error) { + this.filteredOptions = this._options; + } + } + selectOptionByValue() { + if (!this._value) { + this.selectedOptions = {}; + this.searchKey = ""; + return; + } + try { + const lowerCaseValue = this._value.toLowerCase(); + this.selectedOption = this._options.find((option) => { + return option.value.toLowerCase() === lowerCaseValue; + }); + this.searchKey = this.selectedOption.label; + } catch (error) { + this.selectedOption = {}; + this.searchKey = ""; + } + } + dispatchSelectionEvent() { + const _event = new CustomEvent("changeselection", { + detail: { selectedOption: this.selectedOption } + }); + this.dispatchEvent(_event); + } + // *** UI HELPER *** + showSelectionInput() { + try { + if (!this.selectedOption.value) return; + const inputElement = this.template.querySelector(".lookupInputContainer"); + if (inputElement) { + inputElement.classList.remove("slds-is-open"); + } + const searchBoxWrapper = this.template.querySelector(".searchBoxWrapper"); + if (searchBoxWrapper) { + searchBoxWrapper.classList.remove("slds-show"); + searchBoxWrapper.classList.add("slds-hide"); + } + const pillDiv = this.template.querySelector(".pillDiv"); + if (pillDiv) { + pillDiv.classList.remove("slds-hide"); + pillDiv.classList.add("slds-show"); + } + } catch (err) { + console.log(err); + } + } + showSearchInput() { + try { + // remove selected pill and display input field again + const searchBoxWrapper = this.template.querySelector(".searchBoxWrapper"); + if (searchBoxWrapper) { + searchBoxWrapper.classList.remove("slds-hide"); + searchBoxWrapper.classList.add("slds-show"); + } + const pillDiv = this.template.querySelector(".pillDiv"); + if (pillDiv) { + pillDiv.classList.remove("slds-show"); + pillDiv.classList.add("slds-hide"); + } + } catch (error) { + console.log(error); + } + } +} diff --git a/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.js-meta.xml b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.js-meta.xml new file mode 100644 index 00000000..353961ed --- /dev/null +++ b/dlrs/main/lwc/autocompleteCombobox/autocompleteCombobox.js-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + false + \ No newline at end of file diff --git a/dlrs/main/lwc/autocompleteCombobox/js-levenshtein.js b/dlrs/main/lwc/autocompleteCombobox/js-levenshtein.js new file mode 100644 index 00000000..1c0db721 --- /dev/null +++ b/dlrs/main/lwc/autocompleteCombobox/js-levenshtein.js @@ -0,0 +1,123 @@ +// https://github.com/gustf/js-levenshtein/blob/master/index.js +/* +MIT License + +Copyright (c) 2017 Gustaf Andersson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ + +function _min(d0, d1, d2, bx, ay) { + return d0 < d1 || d2 < d1 + ? d0 > d2 + ? d2 + 1 + : d0 + 1 + : bx === ay + ? d1 + : d1 + 1; +} + +export default function (a, b) { + if (a === b) { + return 0; + } + + if (a.length > b.length) { + let tmp = a; + a = b; + b = tmp; + } + + let la = a.length; + let lb = b.length; + + while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) { + la--; + lb--; + } + + let offset = 0; + + while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) { + offset++; + } + + la -= offset; + lb -= offset; + + if (la === 0 || lb < 3) { + return lb; + } + + let x = 0; + let y; + let d0; + let d1; + let d2; + let d3; + let dd; + let dy; + let ay; + let bx0; + let bx1; + let bx2; + let bx3; + + let vector = []; + + for (y = 0; y < la; y++) { + vector.push(y + 1); + vector.push(a.charCodeAt(offset + y)); + } + + let len = vector.length - 1; + + for (; x < lb - 3; ) { + bx0 = b.charCodeAt(offset + (d0 = x)); + bx1 = b.charCodeAt(offset + (d1 = x + 1)); + bx2 = b.charCodeAt(offset + (d2 = x + 2)); + bx3 = b.charCodeAt(offset + (d3 = x + 3)); + dd = x += 4; + for (y = 0; y < len; y += 2) { + dy = vector[y]; + ay = vector[y + 1]; + d0 = _min(dy, d0, d1, bx0, ay); + d1 = _min(d0, d1, d2, bx1, ay); + d2 = _min(d1, d2, d3, bx2, ay); + dd = _min(d2, d3, dd, bx3, ay); + vector[y] = dd; + d3 = d2; + d2 = d1; + d1 = d0; + d0 = dy; + } + } + + for (; x < lb; ) { + bx0 = b.charCodeAt(offset + (d0 = x)); + dd = ++x; + for (y = 0; y < len; y += 2) { + dy = vector[y]; + vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]); + d0 = dy; + } + } + + return dd; +} diff --git a/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.html b/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.html new file mode 100644 index 00000000..7e3d069e --- /dev/null +++ b/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.html @@ -0,0 +1,118 @@ + diff --git a/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.js b/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.js new file mode 100644 index 00000000..0407e295 --- /dev/null +++ b/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.js @@ -0,0 +1,188 @@ +import { api } from "lwc"; +import LightningModal from "lightning/modal"; +// import dlrs from "@salesforce/resourceUrl/dlrs"; +// import { loadScript } from "lightning/platformResourceLoader"; + +import LightningConfirm from "lightning/confirm"; + +import getCurrentJobs from "@salesforce/apex/SchedulerController.getCurrentJobs"; +import getTotalScheduledJobs from "@salesforce/apex/SchedulerController.getAllScheduledJobs"; +import scheduleJobs from "@salesforce/apex/SchedulerController.scheduleJobs"; +import cancelScheduledJob from "@salesforce/apex/SchedulerController.cancelScheduledJob"; + +import CronstrueFactory from "./cronstrue"; + +export default class ClassSchedulerModal extends LightningModal { + cronstrue; + cronStrings = []; + // async apex jobs + currentSchedule = []; + isLoadingCurrentSchedule = true; + errors; + + currentColumns = [ + { + label: "Name", + fieldName: "name", + initialWidth: 150, + wrapText: true, + hideDefaultActions: true + }, + { + label: "Next Run At", + fieldName: "nextRunAt", + type: "date", + typeAttributes: { + month: "short", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }, + hideDefaultActions: true, + initialWidth: 150 + }, + { + label: "Frequency", + fieldName: "humanReadable", + hideDefaultActions: true, + wrapText: true + }, + { + label: "Cron String", + fieldName: "cronString", + hideDefaultActions: true, + initialWidth: 100 + }, + { + type: "action", + typeAttributes: { rowActions: [{ label: "Delete", name: "delete" }] }, + hideDefaultActions: true + } + ]; + + // using the configured Cron strings stub new instances to be scheduled + proposedSchedule = []; + scheduledJobCount = 0; + // Can this be changes for some customers? Is there a place we can get this from? + totalAllowedScheduledJobs = 100; + + @api + className; + + @api + allowsWhereClause; + + @api + disableHandleSchedule; + + @api + templates; + + @api + description; + + connectedCallback() { + this.cronstrue = CronstrueFactory(); + // TODO: when LWS is everywhere then we can go back to loading from Static Resource + // loadScript(this, dlrs + "/js/cronstrue/dist/cronstrue.js") + // .then(() => { + // your code with calls to the JS library + this.cronStrings.forEach((v) => { + v.humanReadable = this.cronstrue.toString(v.cronString, { + verbose: true + }); + }); + // }) + // .catch((err) => { + // console.error("Failed to load static resource: cronstrue", err); + // }) + // .finally(() => { + this.updateScheduledData(); + // }); + } + + handleOnCronUpdate(event) { + // see if this library is globally loaded yet + + this.cronStrings = event.detail.value.map((v) => ({ + cronString: v, + humanReadable: v + })); + + this.cronStrings.forEach((v) => { + v.humanReadable = this.cronstrue.toString(v.cronString, { + verbose: true + }); + }); + } + + handleRowAction(event) { + this.handleCancelJob(event.detail.row.id); + } + + async handleCancelJob(jobId) { + const confirmed = await LightningConfirm.open({ + label: "Delete Scheduled Job", + message: `Are you sure you want to remove the scheduled job?`, + theme: "warning" + }); + + if (!confirmed) { + return; + } + // get the job id, send to the server to cancel + await cancelScheduledJob({ + jobId + }); + + this.updateScheduledData(); + } + + updateScheduledData() { + this.isLoadingCurrentSchedule = true; + getCurrentJobs({ + className: this.className + }).then((jobs) => { + this.currentSchedule = jobs.map((j) => ({ + id: j.CronTrigger.Id, + name: j.CronTrigger.CronJobDetail.Name, + nextRunAt: j.CronTrigger.NextFireTime, + cronString: j.CronTrigger.CronExpression, + humanReadable: this.cronstrue.toString(j.CronTrigger.CronExpression, { + verbose: true + }) + })); + this.isLoadingCurrentSchedule = false; + }); + + getTotalScheduledJobs().then((jobs) => { + this.scheduledJobCount = jobs.length; + }); + } + + async handleSchedule() { + try { + this.errors = undefined; + await scheduleJobs({ + className: this.className, + newSchedules: this.cronStrings.map((c) => c.cronString) + }); + this.close({ + title: "Succesfully Added Jobs", + variant: "success" + }); + } catch (error) { + // TODO: handle the error better + console.error(error); + this.errors = error.body.message; + } + } + + handleCancel() { + this.close(); + } + + get scheduleIsDisabled() { + return this.cronStrings.length === 0; + } +} diff --git a/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.js-meta.xml b/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.js-meta.xml new file mode 100644 index 00000000..353961ed --- /dev/null +++ b/dlrs/main/lwc/classSchedulerModal/classSchedulerModal.js-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + false + \ No newline at end of file diff --git a/dlrs/main/lwc/classSchedulerModal/cronstrue.js b/dlrs/main/lwc/classSchedulerModal/cronstrue.js new file mode 100644 index 00000000..682ae6ac --- /dev/null +++ b/dlrs/main/lwc/classSchedulerModal/cronstrue.js @@ -0,0 +1,1514 @@ +// hacked apart from the node_modules bundle to work with Lighting Locker, standard load from Static Resource will work with LWS +// can be updated by extracting the "factory" function from the un-minimized bundle and adding the LICENSE + +/* +The MIT License (MIT) + +Copyright (c) 2017 Brady Holt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ + +export default () => { + return /******/ (() => { + // webpackBootstrap + /******/ var __webpack_modules__ = { + /***/ 794: /***/ ( + __unused_webpack_module, + exports, + __webpack_require__ + ) => { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CronParser = void 0; + var rangeValidator_1 = __webpack_require__(586); + var CronParser = (function () { + function CronParser( + expression, + dayOfWeekStartIndexZero, + monthStartIndexZero + ) { + if (dayOfWeekStartIndexZero === void 0) { + dayOfWeekStartIndexZero = true; + } + if (monthStartIndexZero === void 0) { + monthStartIndexZero = false; + } + this.expression = expression; + this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero; + this.monthStartIndexZero = monthStartIndexZero; + } + CronParser.prototype.parse = function () { + var parsed = this.extractParts(this.expression); + this.normalize(parsed); + this.validate(parsed); + return parsed; + }; + CronParser.prototype.extractParts = function (expression) { + if (!this.expression) { + throw new Error("cron expression is empty"); + } + var parsed = expression.trim().split(/[ ]+/); + for (var i = 0; i < parsed.length; i++) { + if (parsed[i].includes(",")) { + var arrayElement = parsed[i] + .split(",") + .map(function (item) { + return item.trim(); + }) + .filter(function (item) { + return item !== ""; + }) + .map(function (item) { + return !isNaN(Number(item)) ? Number(item) : item; + }) + .filter(function (item) { + return item !== null && item !== ""; + }); + if (arrayElement.length === 0) { + arrayElement.push("*"); + } + arrayElement.sort(function (a, b) { + return a !== null && b !== null ? a - b : 0; + }); + parsed[i] = arrayElement + .map(function (item) { + return item !== null ? item.toString() : ""; + }) + .join(","); + } + } + if (parsed.length < 5) { + throw new Error( + "Expression has only " + .concat(parsed.length, " part") + .concat( + parsed.length == 1 ? "" : "s", + ". At least 5 parts are required." + ) + ); + } else if (parsed.length == 5) { + parsed.unshift(""); + parsed.push(""); + } else if (parsed.length == 6) { + var isYearWithNoSecondsPart = + /\d{4}$/.test(parsed[5]) || + parsed[4] == "?" || + parsed[2] == "?"; + if (isYearWithNoSecondsPart) { + parsed.unshift(""); + } else { + parsed.push(""); + } + } else if (parsed.length > 7) { + throw new Error( + "Expression has ".concat(parsed.length, " parts; too many!") + ); + } + return parsed; + }; + CronParser.prototype.normalize = function (expressionParts) { + var _this = this; + expressionParts[3] = expressionParts[3].replace("?", "*"); + expressionParts[5] = expressionParts[5].replace("?", "*"); + expressionParts[2] = expressionParts[2].replace("?", "*"); + if (expressionParts[0].indexOf("0/") == 0) { + expressionParts[0] = expressionParts[0].replace("0/", "*/"); + } + if (expressionParts[1].indexOf("0/") == 0) { + expressionParts[1] = expressionParts[1].replace("0/", "*/"); + } + if (expressionParts[2].indexOf("0/") == 0) { + expressionParts[2] = expressionParts[2].replace("0/", "*/"); + } + if (expressionParts[3].indexOf("1/") == 0) { + expressionParts[3] = expressionParts[3].replace("1/", "*/"); + } + if (expressionParts[4].indexOf("1/") == 0) { + expressionParts[4] = expressionParts[4].replace("1/", "*/"); + } + if (expressionParts[6].indexOf("1/") == 0) { + expressionParts[6] = expressionParts[6].replace("1/", "*/"); + } + expressionParts[5] = expressionParts[5].replace( + /(^\d)|([^#/\s]\d)/g, + function (t) { + var dowDigits = t.replace(/\D/, ""); + var dowDigitsAdjusted = dowDigits; + if (_this.dayOfWeekStartIndexZero) { + if (dowDigits == "7") { + dowDigitsAdjusted = "0"; + } + } else { + dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString(); + } + return t.replace(dowDigits, dowDigitsAdjusted); + } + ); + if (expressionParts[5] == "L") { + expressionParts[5] = "6"; + } + if (expressionParts[3] == "?") { + expressionParts[3] = "*"; + } + if ( + expressionParts[3].indexOf("W") > -1 && + (expressionParts[3].indexOf(",") > -1 || + expressionParts[3].indexOf("-") > -1) + ) { + throw new Error( + "The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days." + ); + } + var days = { + SUN: 0, + MON: 1, + TUE: 2, + WED: 3, + THU: 4, + FRI: 5, + SAT: 6 + }; + for (var day in days) { + expressionParts[5] = expressionParts[5].replace( + new RegExp(day, "gi"), + days[day].toString() + ); + } + expressionParts[4] = expressionParts[4].replace( + /(^\d{1,2})|([^#/\s]\d{1,2})/g, + function (t) { + var dowDigits = t.replace(/\D/, ""); + var dowDigitsAdjusted = dowDigits; + if (_this.monthStartIndexZero) { + dowDigitsAdjusted = (parseInt(dowDigits) + 1).toString(); + } + return t.replace(dowDigits, dowDigitsAdjusted); + } + ); + var months = { + JAN: 1, + FEB: 2, + MAR: 3, + APR: 4, + MAY: 5, + JUN: 6, + JUL: 7, + AUG: 8, + SEP: 9, + OCT: 10, + NOV: 11, + DEC: 12 + }; + for (var month in months) { + expressionParts[4] = expressionParts[4].replace( + new RegExp(month, "gi"), + months[month].toString() + ); + } + if (expressionParts[0] == "0") { + expressionParts[0] = ""; + } + if ( + !/\*|\-|\,|\//.test(expressionParts[2]) && + (/\*|\//.test(expressionParts[1]) || + /\*|\//.test(expressionParts[0])) + ) { + expressionParts[2] += "-".concat(expressionParts[2]); + } + for (var i = 0; i < expressionParts.length; i++) { + if (expressionParts[i].indexOf(",") != -1) { + expressionParts[i] = + expressionParts[i] + .split(",") + .filter(function (str) { + return str !== ""; + }) + .join(",") || "*"; + } + if (expressionParts[i] == "*/1") { + expressionParts[i] = "*"; + } + if ( + expressionParts[i].indexOf("/") > -1 && + !/^\*|\-|\,/.test(expressionParts[i]) + ) { + var stepRangeThrough = null; + switch (i) { + case 4: + stepRangeThrough = "12"; + break; + case 5: + stepRangeThrough = "6"; + break; + case 6: + stepRangeThrough = "9999"; + break; + default: + stepRangeThrough = null; + break; + } + if (stepRangeThrough !== null) { + var parts = expressionParts[i].split("/"); + expressionParts[i] = "" + .concat(parts[0], "-") + .concat(stepRangeThrough, "/") + .concat(parts[1]); + } + } + } + }; + CronParser.prototype.validate = function (parsed) { + this.assertNoInvalidCharacters("DOW", parsed[5]); + this.assertNoInvalidCharacters("DOM", parsed[3]); + this.validateRange(parsed); + }; + CronParser.prototype.validateRange = function (parsed) { + rangeValidator_1.default.secondRange(parsed[0]); + rangeValidator_1.default.minuteRange(parsed[1]); + rangeValidator_1.default.hourRange(parsed[2]); + rangeValidator_1.default.dayOfMonthRange(parsed[3]); + rangeValidator_1.default.monthRange( + parsed[4], + this.monthStartIndexZero + ); + rangeValidator_1.default.dayOfWeekRange( + parsed[5], + this.dayOfWeekStartIndexZero + ); + }; + CronParser.prototype.assertNoInvalidCharacters = function ( + partDescription, + expression + ) { + var invalidChars = expression.match(/[A-KM-VX-Z]+/gi); + if (invalidChars && invalidChars.length) { + throw new Error( + "" + .concat(partDescription, " part contains invalid values: '") + .concat(invalidChars.toString(), "'") + ); + } + }; + return CronParser; + })(); + exports.CronParser = CronParser; + + /***/ + }, + + /***/ 728: /***/ ( + __unused_webpack_module, + exports, + __webpack_require__ + ) => { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ExpressionDescriptor = void 0; + var stringUtilities_1 = __webpack_require__(910); + var cronParser_1 = __webpack_require__(794); + var ExpressionDescriptor = (function () { + function ExpressionDescriptor(expression, options) { + this.expression = expression; + this.options = options; + this.expressionParts = new Array(5); + if (!this.options.locale && ExpressionDescriptor.defaultLocale) { + this.options.locale = ExpressionDescriptor.defaultLocale; + } + if (!ExpressionDescriptor.locales[this.options.locale]) { + var fallBackLocale = Object.keys(ExpressionDescriptor.locales)[0]; + console.warn( + "Locale '" + .concat( + this.options.locale, + "' could not be found; falling back to '" + ) + .concat(fallBackLocale, "'.") + ); + this.options.locale = fallBackLocale; + } + this.i18n = ExpressionDescriptor.locales[this.options.locale]; + if (options.use24HourTimeFormat === undefined) { + options.use24HourTimeFormat = + this.i18n.use24HourTimeFormatByDefault(); + } + } + ExpressionDescriptor.toString = function (expression, _a) { + var _b = _a === void 0 ? {} : _a, + _c = _b.throwExceptionOnParseError, + throwExceptionOnParseError = _c === void 0 ? true : _c, + _d = _b.verbose, + verbose = _d === void 0 ? false : _d, + _e = _b.dayOfWeekStartIndexZero, + dayOfWeekStartIndexZero = _e === void 0 ? true : _e, + _f = _b.monthStartIndexZero, + monthStartIndexZero = _f === void 0 ? false : _f, + use24HourTimeFormat = _b.use24HourTimeFormat, + _g = _b.locale, + locale = _g === void 0 ? null : _g, + _h = _b.tzOffset, + tzOffset = _h === void 0 ? 0 : _h; + var options = { + throwExceptionOnParseError: throwExceptionOnParseError, + verbose: verbose, + dayOfWeekStartIndexZero: dayOfWeekStartIndexZero, + monthStartIndexZero: monthStartIndexZero, + use24HourTimeFormat: use24HourTimeFormat, + locale: locale, + tzOffset: tzOffset + }; + var descripter = new ExpressionDescriptor(expression, options); + return descripter.getFullDescription(); + }; + ExpressionDescriptor.initialize = function ( + localesLoader, + defaultLocale + ) { + if (defaultLocale === void 0) { + defaultLocale = "en"; + } + ExpressionDescriptor.specialCharacters = ["/", "-", ",", "*"]; + ExpressionDescriptor.defaultLocale = defaultLocale; + localesLoader.load(ExpressionDescriptor.locales); + }; + ExpressionDescriptor.prototype.getFullDescription = function () { + var description = ""; + try { + var parser = new cronParser_1.CronParser( + this.expression, + this.options.dayOfWeekStartIndexZero, + this.options.monthStartIndexZero + ); + this.expressionParts = parser.parse(); + var timeSegment = this.getTimeOfDayDescription(); + var dayOfMonthDesc = this.getDayOfMonthDescription(); + var monthDesc = this.getMonthDescription(); + var dayOfWeekDesc = this.getDayOfWeekDescription(); + var yearDesc = this.getYearDescription(); + description += + timeSegment + + dayOfMonthDesc + + dayOfWeekDesc + + monthDesc + + yearDesc; + description = this.transformVerbosity( + description, + !!this.options.verbose + ); + description = + description.charAt(0).toLocaleUpperCase() + + description.substr(1); + } catch (ex) { + if (!this.options.throwExceptionOnParseError) { + description = + this.i18n.anErrorOccuredWhenGeneratingTheExpressionD(); + } else { + throw "".concat(ex); + } + } + return description; + }; + ExpressionDescriptor.prototype.getTimeOfDayDescription = function () { + var secondsExpression = this.expressionParts[0]; + var minuteExpression = this.expressionParts[1]; + var hourExpression = this.expressionParts[2]; + var description = ""; + if ( + !stringUtilities_1.StringUtilities.containsAny( + minuteExpression, + ExpressionDescriptor.specialCharacters + ) && + !stringUtilities_1.StringUtilities.containsAny( + hourExpression, + ExpressionDescriptor.specialCharacters + ) && + !stringUtilities_1.StringUtilities.containsAny( + secondsExpression, + ExpressionDescriptor.specialCharacters + ) + ) { + description += + this.i18n.atSpace() + + this.formatTime( + hourExpression, + minuteExpression, + secondsExpression + ); + } else if ( + !secondsExpression && + minuteExpression.indexOf("-") > -1 && + !(minuteExpression.indexOf(",") > -1) && + !(minuteExpression.indexOf("/") > -1) && + !stringUtilities_1.StringUtilities.containsAny( + hourExpression, + ExpressionDescriptor.specialCharacters + ) + ) { + var minuteParts = minuteExpression.split("-"); + description += stringUtilities_1.StringUtilities.format( + this.i18n.everyMinuteBetweenX0AndX1(), + this.formatTime(hourExpression, minuteParts[0], ""), + this.formatTime(hourExpression, minuteParts[1], "") + ); + } else if ( + !secondsExpression && + hourExpression.indexOf(",") > -1 && + hourExpression.indexOf("-") == -1 && + hourExpression.indexOf("/") == -1 && + !stringUtilities_1.StringUtilities.containsAny( + minuteExpression, + ExpressionDescriptor.specialCharacters + ) + ) { + var hourParts = hourExpression.split(","); + description += this.i18n.at(); + for (var i = 0; i < hourParts.length; i++) { + description += " "; + description += this.formatTime( + hourParts[i], + minuteExpression, + "" + ); + if (i < hourParts.length - 2) { + description += ","; + } + if (i == hourParts.length - 2) { + description += this.i18n.spaceAnd(); + } + } + } else { + var secondsDescription = this.getSecondsDescription(); + var minutesDescription = this.getMinutesDescription(); + var hoursDescription = this.getHoursDescription(); + description += secondsDescription; + if (description && minutesDescription) { + description += ", "; + } + description += minutesDescription; + if (minutesDescription === hoursDescription) { + return description; + } + if (description && hoursDescription) { + description += ", "; + } + description += hoursDescription; + } + return description; + }; + ExpressionDescriptor.prototype.getSecondsDescription = function () { + var _this = this; + var description = this.getSegmentDescription( + this.expressionParts[0], + this.i18n.everySecond(), + function (s) { + return s; + }, + function (s) { + return stringUtilities_1.StringUtilities.format( + _this.i18n.everyX0Seconds(s), + s + ); + }, + function (s) { + return _this.i18n.secondsX0ThroughX1PastTheMinute(); + }, + function (s) { + return s == "0" + ? "" + : parseInt(s) < 20 + ? _this.i18n.atX0SecondsPastTheMinute(s) + : _this.i18n.atX0SecondsPastTheMinuteGt20() || + _this.i18n.atX0SecondsPastTheMinute(s); + } + ); + return description; + }; + ExpressionDescriptor.prototype.getMinutesDescription = function () { + var _this = this; + var secondsExpression = this.expressionParts[0]; + var hourExpression = this.expressionParts[2]; + var description = this.getSegmentDescription( + this.expressionParts[1], + this.i18n.everyMinute(), + function (s) { + return s; + }, + function (s) { + return stringUtilities_1.StringUtilities.format( + _this.i18n.everyX0Minutes(s), + s + ); + }, + function (s) { + return _this.i18n.minutesX0ThroughX1PastTheHour(); + }, + function (s) { + try { + return s == "0" && + hourExpression.indexOf("/") == -1 && + secondsExpression == "" + ? _this.i18n.everyHour() + : parseInt(s) < 20 + ? _this.i18n.atX0MinutesPastTheHour(s) + : _this.i18n.atX0MinutesPastTheHourGt20() || + _this.i18n.atX0MinutesPastTheHour(s); + } catch (e) { + return _this.i18n.atX0MinutesPastTheHour(s); + } + } + ); + return description; + }; + ExpressionDescriptor.prototype.getHoursDescription = function () { + var _this = this; + var expression = this.expressionParts[2]; + var description = this.getSegmentDescription( + expression, + this.i18n.everyHour(), + function (s) { + return _this.formatTime(s, "0", ""); + }, + function (s) { + return stringUtilities_1.StringUtilities.format( + _this.i18n.everyX0Hours(s), + s + ); + }, + function (s) { + return _this.i18n.betweenX0AndX1(); + }, + function (s) { + return _this.i18n.atX0(); + } + ); + if ( + description && + expression.includes("-") && + this.expressionParts[1] != "0" + ) { + var atTheHourMatches = Array.from(description.matchAll(/:00/g)); + if (atTheHourMatches.length > 1) { + var lastAtTheHourMatchIndex = + atTheHourMatches[atTheHourMatches.length - 1].index; + description = + description.substring(0, lastAtTheHourMatchIndex) + + ":59" + + description.substring(lastAtTheHourMatchIndex + 3); + } + } + return description; + }; + ExpressionDescriptor.prototype.getDayOfWeekDescription = function () { + var _this = this; + var daysOfWeekNames = this.i18n.daysOfTheWeek(); + var description = null; + if (this.expressionParts[5] == "*") { + description = ""; + } else { + description = this.getSegmentDescription( + this.expressionParts[5], + this.i18n.commaEveryDay(), + function (s, form) { + var exp = s; + if (s.indexOf("#") > -1) { + exp = s.substring(0, s.indexOf("#")); + } else if (s.indexOf("L") > -1) { + exp = exp.replace("L", ""); + } + var parsedExp = parseInt(exp); + if (_this.options.tzOffset) { + var hourExpression = _this.expressionParts[2]; + var hour = + parseInt(hourExpression) + + (_this.options.tzOffset ? _this.options.tzOffset : 0); + if (hour >= 24) { + parsedExp++; + } else if (hour < 0) { + parsedExp--; + } + if (parsedExp > 6) { + parsedExp = 0; + } else if (parsedExp < 0) { + parsedExp = 6; + } + } + var description = _this.i18n.daysOfTheWeekInCase + ? _this.i18n.daysOfTheWeekInCase(form)[parsedExp] + : daysOfWeekNames[parsedExp]; + if (s.indexOf("#") > -1) { + var dayOfWeekOfMonthDescription = null; + var dayOfWeekOfMonthNumber = s.substring( + s.indexOf("#") + 1 + ); + var dayOfWeekNumber = s.substring(0, s.indexOf("#")); + switch (dayOfWeekOfMonthNumber) { + case "1": + dayOfWeekOfMonthDescription = + _this.i18n.first(dayOfWeekNumber); + break; + case "2": + dayOfWeekOfMonthDescription = + _this.i18n.second(dayOfWeekNumber); + break; + case "3": + dayOfWeekOfMonthDescription = + _this.i18n.third(dayOfWeekNumber); + break; + case "4": + dayOfWeekOfMonthDescription = + _this.i18n.fourth(dayOfWeekNumber); + break; + case "5": + dayOfWeekOfMonthDescription = + _this.i18n.fifth(dayOfWeekNumber); + break; + } + description = + dayOfWeekOfMonthDescription + " " + description; + } + return description; + }, + function (s) { + if (parseInt(s) == 1) { + return ""; + } else { + return stringUtilities_1.StringUtilities.format( + _this.i18n.commaEveryX0DaysOfTheWeek(s), + s + ); + } + }, + function (s) { + var beginFrom = s.substring(0, s.indexOf("-")); + var domSpecified = _this.expressionParts[3] != "*"; + return domSpecified + ? _this.i18n.commaAndX0ThroughX1(beginFrom) + : _this.i18n.commaX0ThroughX1(beginFrom); + }, + function (s) { + var format = null; + if (s.indexOf("#") > -1) { + var dayOfWeekOfMonthNumber = s.substring( + s.indexOf("#") + 1 + ); + format = + _this.i18n.commaOnThe(dayOfWeekOfMonthNumber).trim() + + _this.i18n.spaceX0OfTheMonth(); + } else if (s.indexOf("L") > -1) { + format = _this.i18n.commaOnTheLastX0OfTheMonth( + s.replace("L", "") + ); + } else { + var domSpecified = _this.expressionParts[3] != "*"; + format = domSpecified + ? _this.i18n.commaAndOnX0() + : _this.i18n.commaOnlyOnX0(s); + } + return format; + } + ); + } + return description; + }; + ExpressionDescriptor.prototype.getMonthDescription = function () { + var _this = this; + var monthNames = this.i18n.monthsOfTheYear(); + var description = this.getSegmentDescription( + this.expressionParts[4], + "", + function (s, form) { + return form && _this.i18n.monthsOfTheYearInCase + ? _this.i18n.monthsOfTheYearInCase(form)[parseInt(s) - 1] + : monthNames[parseInt(s) - 1]; + }, + function (s) { + if (parseInt(s) == 1) { + return ""; + } else { + return stringUtilities_1.StringUtilities.format( + _this.i18n.commaEveryX0Months(s), + s + ); + } + }, + function (s) { + return ( + _this.i18n.commaMonthX0ThroughMonthX1() || + _this.i18n.commaX0ThroughX1() + ); + }, + function (s) { + return _this.i18n.commaOnlyInMonthX0 + ? _this.i18n.commaOnlyInMonthX0() + : _this.i18n.commaOnlyInX0(); + } + ); + return description; + }; + ExpressionDescriptor.prototype.getDayOfMonthDescription = + function () { + var _this = this; + var description = null; + var expression = this.expressionParts[3]; + switch (expression) { + case "L": + description = this.i18n.commaOnTheLastDayOfTheMonth(); + break; + case "WL": + case "LW": + description = this.i18n.commaOnTheLastWeekdayOfTheMonth(); + break; + default: + var weekDayNumberMatches = expression.match( + /(\d{1,2}W)|(W\d{1,2})/ + ); + if (weekDayNumberMatches) { + var dayNumber = parseInt( + weekDayNumberMatches[0].replace("W", "") + ); + var dayString = + dayNumber == 1 + ? this.i18n.firstWeekday() + : stringUtilities_1.StringUtilities.format( + this.i18n.weekdayNearestDayX0(), + dayNumber.toString() + ); + description = stringUtilities_1.StringUtilities.format( + this.i18n.commaOnTheX0OfTheMonth(), + dayString + ); + break; + } else { + var lastDayOffSetMatches = expression.match(/L-(\d{1,2})/); + if (lastDayOffSetMatches) { + var offSetDays = lastDayOffSetMatches[1]; + description = stringUtilities_1.StringUtilities.format( + this.i18n.commaDaysBeforeTheLastDayOfTheMonth( + offSetDays + ), + offSetDays + ); + break; + } else if ( + expression == "*" && + this.expressionParts[5] != "*" + ) { + return ""; + } else { + description = this.getSegmentDescription( + expression, + this.i18n.commaEveryDay(), + function (s) { + return s == "L" + ? _this.i18n.lastDay() + : _this.i18n.dayX0 + ? stringUtilities_1.StringUtilities.format( + _this.i18n.dayX0(), + s + ) + : s; + }, + function (s) { + return s == "1" + ? _this.i18n.commaEveryDay() + : _this.i18n.commaEveryX0Days(s); + }, + function (s) { + return _this.i18n.commaBetweenDayX0AndX1OfTheMonth(s); + }, + function (s) { + return _this.i18n.commaOnDayX0OfTheMonth(s); + } + ); + } + break; + } + } + return description; + }; + ExpressionDescriptor.prototype.getYearDescription = function () { + var _this = this; + var description = this.getSegmentDescription( + this.expressionParts[6], + "", + function (s) { + return /^\d+$/.test(s) + ? new Date(parseInt(s), 1).getFullYear().toString() + : s; + }, + function (s) { + return stringUtilities_1.StringUtilities.format( + _this.i18n.commaEveryX0Years(s), + s + ); + }, + function (s) { + return ( + _this.i18n.commaYearX0ThroughYearX1() || + _this.i18n.commaX0ThroughX1() + ); + }, + function (s) { + return _this.i18n.commaOnlyInYearX0 + ? _this.i18n.commaOnlyInYearX0() + : _this.i18n.commaOnlyInX0(); + } + ); + return description; + }; + ExpressionDescriptor.prototype.getSegmentDescription = function ( + expression, + allDescription, + getSingleItemDescription, + getIncrementDescriptionFormat, + getRangeDescriptionFormat, + getDescriptionFormat + ) { + var description = null; + var doesExpressionContainIncrement = expression.indexOf("/") > -1; + var doesExpressionContainRange = expression.indexOf("-") > -1; + var doesExpressionContainMultipleValues = + expression.indexOf(",") > -1; + if (!expression) { + description = ""; + } else if (expression === "*") { + description = allDescription; + } else if ( + !doesExpressionContainIncrement && + !doesExpressionContainRange && + !doesExpressionContainMultipleValues + ) { + description = stringUtilities_1.StringUtilities.format( + getDescriptionFormat(expression), + getSingleItemDescription(expression) + ); + } else if (doesExpressionContainMultipleValues) { + var segments = expression.split(","); + var descriptionContent = ""; + for (var i = 0; i < segments.length; i++) { + if (i > 0 && segments.length > 2) { + descriptionContent += ","; + if (i < segments.length - 1) { + descriptionContent += " "; + } + } + if ( + i > 0 && + segments.length > 1 && + (i == segments.length - 1 || segments.length == 2) + ) { + descriptionContent += "".concat(this.i18n.spaceAnd(), " "); + } + if ( + segments[i].indexOf("/") > -1 || + segments[i].indexOf("-") > -1 + ) { + var isSegmentRangeWithoutIncrement = + segments[i].indexOf("-") > -1 && + segments[i].indexOf("/") == -1; + var currentDescriptionContent = this.getSegmentDescription( + segments[i], + allDescription, + getSingleItemDescription, + getIncrementDescriptionFormat, + isSegmentRangeWithoutIncrement + ? this.i18n.commaX0ThroughX1 + : getRangeDescriptionFormat, + getDescriptionFormat + ); + if (isSegmentRangeWithoutIncrement) { + currentDescriptionContent = + currentDescriptionContent.replace(", ", ""); + } + descriptionContent += currentDescriptionContent; + } else if (!doesExpressionContainIncrement) { + descriptionContent += getSingleItemDescription(segments[i]); + } else { + descriptionContent += this.getSegmentDescription( + segments[i], + allDescription, + getSingleItemDescription, + getIncrementDescriptionFormat, + getRangeDescriptionFormat, + getDescriptionFormat + ); + } + } + if (!doesExpressionContainIncrement) { + description = stringUtilities_1.StringUtilities.format( + getDescriptionFormat(expression), + descriptionContent + ); + } else { + description = descriptionContent; + } + } else if (doesExpressionContainIncrement) { + var segments = expression.split("/"); + description = stringUtilities_1.StringUtilities.format( + getIncrementDescriptionFormat(segments[1]), + segments[1] + ); + if (segments[0].indexOf("-") > -1) { + var rangeSegmentDescription = + this.generateRangeSegmentDescription( + segments[0], + getRangeDescriptionFormat, + getSingleItemDescription + ); + if (rangeSegmentDescription.indexOf(", ") != 0) { + description += ", "; + } + description += rangeSegmentDescription; + } else if (segments[0].indexOf("*") == -1) { + var rangeItemDescription = + stringUtilities_1.StringUtilities.format( + getDescriptionFormat(segments[0]), + getSingleItemDescription(segments[0]) + ); + rangeItemDescription = rangeItemDescription.replace(", ", ""); + description += stringUtilities_1.StringUtilities.format( + this.i18n.commaStartingX0(), + rangeItemDescription + ); + } + } else if (doesExpressionContainRange) { + description = this.generateRangeSegmentDescription( + expression, + getRangeDescriptionFormat, + getSingleItemDescription + ); + } + return description; + }; + ExpressionDescriptor.prototype.generateRangeSegmentDescription = + function ( + rangeExpression, + getRangeDescriptionFormat, + getSingleItemDescription + ) { + var description = ""; + var rangeSegments = rangeExpression.split("-"); + var rangeSegment1Description = getSingleItemDescription( + rangeSegments[0], + 1 + ); + var rangeSegment2Description = getSingleItemDescription( + rangeSegments[1], + 2 + ); + var rangeDescriptionFormat = + getRangeDescriptionFormat(rangeExpression); + description += stringUtilities_1.StringUtilities.format( + rangeDescriptionFormat, + rangeSegment1Description, + rangeSegment2Description + ); + return description; + }; + ExpressionDescriptor.prototype.formatTime = function ( + hourExpression, + minuteExpression, + secondExpression + ) { + var hourOffset = 0; + var minuteOffset = 0; + if (this.options.tzOffset) { + hourOffset = + this.options.tzOffset > 0 + ? Math.floor(this.options.tzOffset) + : Math.ceil(this.options.tzOffset); + minuteOffset = parseFloat((this.options.tzOffset % 1).toFixed(2)); + if (minuteOffset != 0) { + minuteOffset *= 60; + } + } + var hour = parseInt(hourExpression) + hourOffset; + var minute = parseInt(minuteExpression) + minuteOffset; + if (minute >= 60) { + minute -= 60; + hour += 1; + } else if (minute < 0) { + minute += 60; + hour -= 1; + } + if (hour >= 24) { + hour = hour - 24; + } else if (hour < 0) { + hour = 24 + hour; + } + var period = ""; + var setPeriodBeforeTime = false; + if (!this.options.use24HourTimeFormat) { + setPeriodBeforeTime = !!( + this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime() + ); + period = setPeriodBeforeTime + ? "".concat(this.getPeriod(hour), " ") + : " ".concat(this.getPeriod(hour)); + if (hour > 12) { + hour -= 12; + } + if (hour === 0) { + hour = 12; + } + } + var second = ""; + if (secondExpression) { + second = ":".concat( + ("00" + secondExpression).substring(secondExpression.length) + ); + } + return "" + .concat(setPeriodBeforeTime ? period : "") + .concat( + ("00" + hour.toString()).substring(hour.toString().length), + ":" + ) + .concat( + ("00" + minute.toString()).substring(minute.toString().length) + ) + .concat(second) + .concat(!setPeriodBeforeTime ? period : ""); + }; + ExpressionDescriptor.prototype.transformVerbosity = function ( + description, + useVerboseFormat + ) { + if (!useVerboseFormat) { + description = description.replace( + new RegExp(", ".concat(this.i18n.everyMinute()), "g"), + "" + ); + description = description.replace( + new RegExp(", ".concat(this.i18n.everyHour()), "g"), + "" + ); + description = description.replace( + new RegExp(this.i18n.commaEveryDay(), "g"), + "" + ); + description = description.replace(/\, ?$/, ""); + } + return description; + }; + ExpressionDescriptor.prototype.getPeriod = function (hour) { + return hour >= 12 + ? (this.i18n.pm && this.i18n.pm()) || "PM" + : (this.i18n.am && this.i18n.am()) || "AM"; + }; + ExpressionDescriptor.locales = {}; + return ExpressionDescriptor; + })(); + exports.ExpressionDescriptor = ExpressionDescriptor; + + /***/ + }, + + /***/ 336: /***/ ( + __unused_webpack_module, + exports, + __webpack_require__ + ) => { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.enLocaleLoader = void 0; + var en_1 = __webpack_require__(751); + var enLocaleLoader = (function () { + function enLocaleLoader() {} + enLocaleLoader.prototype.load = function (availableLocales) { + availableLocales["en"] = new en_1.en(); + }; + return enLocaleLoader; + })(); + exports.enLocaleLoader = enLocaleLoader; + + /***/ + }, + + /***/ 751: /***/ (__unused_webpack_module, exports) => { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.en = void 0; + var en = (function () { + function en() {} + en.prototype.atX0SecondsPastTheMinuteGt20 = function () { + return null; + }; + en.prototype.atX0MinutesPastTheHourGt20 = function () { + return null; + }; + en.prototype.commaMonthX0ThroughMonthX1 = function () { + return null; + }; + en.prototype.commaYearX0ThroughYearX1 = function () { + return null; + }; + en.prototype.use24HourTimeFormatByDefault = function () { + return false; + }; + en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = + function () { + return "An error occured when generating the expression description. Check the cron expression syntax."; + }; + en.prototype.everyMinute = function () { + return "every minute"; + }; + en.prototype.everyHour = function () { + return "every hour"; + }; + en.prototype.atSpace = function () { + return "At "; + }; + en.prototype.everyMinuteBetweenX0AndX1 = function () { + return "Every minute between %s and %s"; + }; + en.prototype.at = function () { + return "At"; + }; + en.prototype.spaceAnd = function () { + return " and"; + }; + en.prototype.everySecond = function () { + return "every second"; + }; + en.prototype.everyX0Seconds = function () { + return "every %s seconds"; + }; + en.prototype.secondsX0ThroughX1PastTheMinute = function () { + return "seconds %s through %s past the minute"; + }; + en.prototype.atX0SecondsPastTheMinute = function () { + return "at %s seconds past the minute"; + }; + en.prototype.everyX0Minutes = function () { + return "every %s minutes"; + }; + en.prototype.minutesX0ThroughX1PastTheHour = function () { + return "minutes %s through %s past the hour"; + }; + en.prototype.atX0MinutesPastTheHour = function () { + return "at %s minutes past the hour"; + }; + en.prototype.everyX0Hours = function () { + return "every %s hours"; + }; + en.prototype.betweenX0AndX1 = function () { + return "between %s and %s"; + }; + en.prototype.atX0 = function () { + return "at %s"; + }; + en.prototype.commaEveryDay = function () { + return ", every day"; + }; + en.prototype.commaEveryX0DaysOfTheWeek = function () { + return ", every %s days of the week"; + }; + en.prototype.commaX0ThroughX1 = function () { + return ", %s through %s"; + }; + en.prototype.commaAndX0ThroughX1 = function () { + return ", %s through %s"; + }; + en.prototype.first = function () { + return "first"; + }; + en.prototype.second = function () { + return "second"; + }; + en.prototype.third = function () { + return "third"; + }; + en.prototype.fourth = function () { + return "fourth"; + }; + en.prototype.fifth = function () { + return "fifth"; + }; + en.prototype.commaOnThe = function () { + return ", on the "; + }; + en.prototype.spaceX0OfTheMonth = function () { + return " %s of the month"; + }; + en.prototype.lastDay = function () { + return "the last day"; + }; + en.prototype.commaOnTheLastX0OfTheMonth = function () { + return ", on the last %s of the month"; + }; + en.prototype.commaOnlyOnX0 = function () { + return ", only on %s"; + }; + en.prototype.commaAndOnX0 = function () { + return ", and on %s"; + }; + en.prototype.commaEveryX0Months = function () { + return ", every %s months"; + }; + en.prototype.commaOnlyInX0 = function () { + return ", only in %s"; + }; + en.prototype.commaOnTheLastDayOfTheMonth = function () { + return ", on the last day of the month"; + }; + en.prototype.commaOnTheLastWeekdayOfTheMonth = function () { + return ", on the last weekday of the month"; + }; + en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () { + return ", %s days before the last day of the month"; + }; + en.prototype.firstWeekday = function () { + return "first weekday"; + }; + en.prototype.weekdayNearestDayX0 = function () { + return "weekday nearest day %s"; + }; + en.prototype.commaOnTheX0OfTheMonth = function () { + return ", on the %s of the month"; + }; + en.prototype.commaEveryX0Days = function () { + return ", every %s days"; + }; + en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () { + return ", between day %s and %s of the month"; + }; + en.prototype.commaOnDayX0OfTheMonth = function () { + return ", on day %s of the month"; + }; + en.prototype.commaEveryHour = function () { + return ", every hour"; + }; + en.prototype.commaEveryX0Years = function () { + return ", every %s years"; + }; + en.prototype.commaStartingX0 = function () { + return ", starting %s"; + }; + en.prototype.daysOfTheWeek = function () { + return [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ]; + }; + en.prototype.monthsOfTheYear = function () { + return [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ]; + }; + return en; + })(); + exports.en = en; + + /***/ + }, + + /***/ 586: /***/ (__unused_webpack_module, exports) => { + Object.defineProperty(exports, "__esModule", { value: true }); + function assert(value, message) { + if (!value) { + throw new Error(message); + } + } + var RangeValidator = (function () { + function RangeValidator() {} + RangeValidator.secondRange = function (parse) { + var parsed = parse.split(","); + for (var i = 0; i < parsed.length; i++) { + if (!isNaN(parseInt(parsed[i], 10))) { + var second = parseInt(parsed[i], 10); + assert( + second >= 0 && second <= 59, + "seconds part must be >= 0 and <= 59" + ); + } + } + }; + RangeValidator.minuteRange = function (parse) { + var parsed = parse.split(","); + for (var i = 0; i < parsed.length; i++) { + if (!isNaN(parseInt(parsed[i], 10))) { + var minute = parseInt(parsed[i], 10); + assert( + minute >= 0 && minute <= 59, + "minutes part must be >= 0 and <= 59" + ); + } + } + }; + RangeValidator.hourRange = function (parse) { + var parsed = parse.split(","); + for (var i = 0; i < parsed.length; i++) { + if (!isNaN(parseInt(parsed[i], 10))) { + var hour = parseInt(parsed[i], 10); + assert( + hour >= 0 && hour <= 23, + "hours part must be >= 0 and <= 23" + ); + } + } + }; + RangeValidator.dayOfMonthRange = function (parse) { + var parsed = parse.split(","); + for (var i = 0; i < parsed.length; i++) { + if (!isNaN(parseInt(parsed[i], 10))) { + var dayOfMonth = parseInt(parsed[i], 10); + assert( + dayOfMonth >= 1 && dayOfMonth <= 31, + "DOM part must be >= 1 and <= 31" + ); + } + } + }; + RangeValidator.monthRange = function (parse, monthStartIndexZero) { + var parsed = parse.split(","); + for (var i = 0; i < parsed.length; i++) { + if (!isNaN(parseInt(parsed[i], 10))) { + var month = parseInt(parsed[i], 10); + assert( + month >= 1 && month <= 12, + monthStartIndexZero + ? "month part must be >= 0 and <= 11" + : "month part must be >= 1 and <= 12" + ); + } + } + }; + RangeValidator.dayOfWeekRange = function ( + parse, + dayOfWeekStartIndexZero + ) { + var parsed = parse.split(","); + for (var i = 0; i < parsed.length; i++) { + if (!isNaN(parseInt(parsed[i], 10))) { + var dayOfWeek = parseInt(parsed[i], 10); + assert( + dayOfWeek >= 0 && dayOfWeek <= 6, + dayOfWeekStartIndexZero + ? "DOW part must be >= 0 and <= 6" + : "DOW part must be >= 1 and <= 7" + ); + } + } + }; + return RangeValidator; + })(); + exports["default"] = RangeValidator; + + /***/ + }, + + /***/ 910: /***/ (__unused_webpack_module, exports) => { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.StringUtilities = void 0; + var StringUtilities = (function () { + function StringUtilities() {} + StringUtilities.format = function (template) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + return template.replace(/%s/g, function (substring) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return values.shift(); + }); + }; + StringUtilities.containsAny = function (text, searchStrings) { + return searchStrings.some(function (c) { + return text.indexOf(c) > -1; + }); + }; + return StringUtilities; + })(); + exports.StringUtilities = StringUtilities; + + /***/ + } + + /******/ + }; + /************************************************************************/ + /******/ // The module cache + /******/ var __webpack_module_cache__ = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ // Check if module is in cache + /******/ var cachedModule = __webpack_module_cache__[moduleId]; + /******/ if (cachedModule !== undefined) { + /******/ return cachedModule.exports; + /******/ + } + /******/ // Create a new module (and put it into the cache) + /******/ var module = (__webpack_module_cache__[moduleId] = { + /******/ // no module.id needed + /******/ // no module.loaded needed + /******/ exports: {} + /******/ + }); + /******/ + /******/ // Execute the module function + /******/ __webpack_modules__[moduleId]( + module, + module.exports, + __webpack_require__ + ); + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ + } + /******/ + /************************************************************************/ + var __webpack_exports__ = {}; + // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. + (() => { + var exports = __webpack_exports__; + + Object.defineProperty(exports, "__esModule", { value: true }); + exports.toString = void 0; + var expressionDescriptor_1 = __webpack_require__(728); + var enLocaleLoader_1 = __webpack_require__(336); + expressionDescriptor_1.ExpressionDescriptor.initialize( + new enLocaleLoader_1.enLocaleLoader() + ); + exports["default"] = expressionDescriptor_1.ExpressionDescriptor; + var toString = expressionDescriptor_1.ExpressionDescriptor.toString; + exports.toString = toString; + })(); + + /******/ return __webpack_exports__; + /******/ + })(); +}; diff --git a/dlrs/main/lwc/cronBuilder/cronBuilder.css b/dlrs/main/lwc/cronBuilder/cronBuilder.css new file mode 100644 index 00000000..aa5a4e7a --- /dev/null +++ b/dlrs/main/lwc/cronBuilder/cronBuilder.css @@ -0,0 +1,9 @@ +lightning-datatable { + max-height: 300px; + display: block; + overflow-y: auto; +} + +.error { + color: var(--lwc-colorTextError); +} diff --git a/dlrs/main/lwc/cronBuilder/cronBuilder.html b/dlrs/main/lwc/cronBuilder/cronBuilder.html new file mode 100644 index 00000000..f1c86638 --- /dev/null +++ b/dlrs/main/lwc/cronBuilder/cronBuilder.html @@ -0,0 +1,152 @@ + diff --git a/dlrs/main/lwc/cronBuilder/cronBuilder.js b/dlrs/main/lwc/cronBuilder/cronBuilder.js new file mode 100644 index 00000000..102787fc --- /dev/null +++ b/dlrs/main/lwc/cronBuilder/cronBuilder.js @@ -0,0 +1,361 @@ +import { LightningElement, api } from "lwc"; + +const DAY_TYPE = { + daysOfMonth: "daysOfMonth", + daysOfWeek: "daysOfWeek" +}; + +export default class CronBuilder extends LightningElement { + selectedTemplate = ""; + + enabledSelectors = []; + errors = []; + + _templates; + @api + set templates(val) { + this._templates = val; + this.selectedTemplate = val[0].value; + } + get templates() { + return this._templates; + } + + dayTypes = [ + { label: "Days of the Month", value: DAY_TYPE.daysOfMonth }, + { label: "Days of the Week", value: DAY_TYPE.daysOfWeek } + ]; + + dayType = DAY_TYPE.daysOfMonth; + + columns = [ + { + label: "All", + fieldName: "label", + wrapText: true, + hideDefaultActions: true + } + ]; + + months = [ + { label: "January", value: "JAN" }, + { label: "February", value: "FEB" }, + { label: "March", value: "MAR" }, + { label: "April", value: "APR" }, + { label: "May", value: "MAY" }, + { label: "June", value: "JUN" }, + { label: "July", value: "JUL" }, + { label: "August", value: "AUG" }, + { label: "September", value: "SEP" }, + { label: "October", value: "OCT" }, + { label: "November", value: "NOV" }, + { label: "December", value: "DEC" } + ]; + allMonths = this.months.map((v) => v.value); + + dayCols = [ + { + label: "Day", + fieldName: "label" + } + ]; + + // intentionally limited to 28 + // >28 might not run every month (like Feb) + // need more control? use advanced mode + days = [ + { label: "1", value: "1" }, + { label: "2", value: "2" }, + { label: "3", value: "3" }, + { label: "4", value: "4" }, + { label: "5", value: "5" }, + { label: "6", value: "6" }, + { label: "7", value: "7" }, + { label: "8", value: "8" }, + { label: "9", value: "9" }, + { label: "10", value: "10" }, + { label: "11", value: "11" }, + { label: "12", value: "12" }, + { label: "13", value: "13" }, + { label: "14", value: "14" }, + { label: "15", value: "15" }, + { label: "16", value: "16" }, + { label: "17", value: "17" }, + { label: "18", value: "18" }, + { label: "19", value: "19" }, + { label: "20", value: "20" }, + { label: "21", value: "21" }, + { label: "22", value: "22" }, + { label: "23", value: "23" }, + { label: "24", value: "24" }, + { label: "25", value: "25" }, + { label: "26", value: "26" }, + { label: "27", value: "27" }, + { label: "28", value: "28" }, + { label: "Last day of month", value: "L" } + ]; + allDays = this.days.map((v) => v.value); + + weekdays = [ + { label: "Sunday", value: "SUN" }, + { label: "Monday", value: "MON" }, + { label: "Tuesday", value: "TUE" }, + { label: "Wednesday", value: "WED" }, + { label: "Thursday", value: "THU" }, + { label: "Friday", value: "FRI" }, + { label: "Saturday", value: "SAT" } + ]; + allWeekdays = this.weekdays.map((v) => v.value); + + hourCols = [ + { + label: "Hour", + fieldName: "label" + } + ]; + + hours = [ + { label: "12 Midnight", value: "0" }, + { label: "1 AM", value: "1" }, + { label: "2 AM", value: "2" }, + { label: "3 AM", value: "3" }, + { label: "4 AM", value: "4" }, + { label: "5 AM", value: "5" }, + { label: "6 AM", value: "6" }, + { label: "7 AM", value: "7" }, + { label: "8 AM", value: "8" }, + { label: "9 AM", value: "9" }, + { label: "10 AM", value: "10" }, + { label: "11 AM", value: "11" }, + { label: "12 Noon", value: "12" }, + { label: "1 PM", value: "13" }, + { label: "2 PM", value: "14" }, + { label: "3 PM", value: "15" }, + { label: "4 PM", value: "16" }, + { label: "5 PM", value: "17" }, + { label: "6 PM", value: "18" }, + { label: "7 PM", value: "19" }, + { label: "8 PM", value: "20" }, + { label: "9 PM", value: "21" }, + { label: "10 PM", value: "22" }, + { label: "11 PM", value: "23" } + ]; + allHours = this.hours.map((v) => v.value); + + minuteCols = [ + { + label: "Minute", + fieldName: "label" + } + ]; + // trying to keep it simple, only 5-min granularity + // possibly make it configurable later + minutes = [ + { label: "00", value: "0" }, + { label: "05", value: "5" }, + { label: "10", value: "10" }, + { label: "15", value: "15" }, + { label: "20", value: "20" }, + { label: "25", value: "25" }, + { label: "30", value: "30" }, + { label: "35", value: "35" }, + { label: "40", value: "40" }, + { label: "45", value: "45" }, + { label: "50", value: "50" }, + { label: "55", value: "55" } + ]; + allMinutes = this.minutes.map((v) => v.value); + + selectedMonths = [...this.allMonths]; + + selectedDays = [...this.allDays]; + + selectedWeekdays = ["?"]; + + selectedHours = [...this.allHours]; + selectedMinutes = ["0"]; + + /** + * GETTERS + */ + get chooseIndividualMonths() { + return !this.isEveryMonth; + } + + get shouldDisplaySingleHourSelector() { + return this.enabledSelectors.includes("single-hour"); + } + + get shouldDisplaySingleMinuteSelector() { + return this.enabledSelectors.includes("single-minute"); + } + + // get the first selected hour of the day for single-select combo boxes + get selectedHourOfDay() { + return this.selectedHours[0]; + } + + get selectedMinuteOfTheHour() { + return this.selectedMinutes[0]; + } + + get isWeekDayType() { + return this.dayType === DAY_TYPE.daysOfWeek; + } + + /** + * HANDLERS + */ + + handleTemplateChange(event) { + this.selectedTemplate = event.detail.value; + this.processTemplate(); + } + + handeTabActivate(event) { + if (event.target.value === "templates") { + this.processTemplate(); + return; + } + this.selectedMonths = [...this.allMonths]; + this.selectedDays = [...this.allDays]; + this.selectedHours = [...this.allHours]; + this.selectedWeekdays = ["?"]; + if (event.target.value === "daily") { + // default to early hours of the morning for once-daily template + this.selectedHours = ["3"]; + } + this.publishCronString(); + } + + handleMonthChange(event) { + this.selectedMonths = event.detail.selectedRows.map((r) => r.value); + this.publishCronString(); + } + + handleDayTypeChange(event) { + this.dayType = event.detail.value; + if (this.dayType === DAY_TYPE.daysOfWeek) { + this.selectedWeekdays = [...this.allWeekdays]; + this.selectedDays = ["?"]; + } else { + this.selectedWeekdays = ["?"]; + this.selectedDays = [...this.allDays]; + } + this.publishCronString(); + } + + handleDayChange(event) { + this.selectedDays = event.detail.selectedRows.map((r) => r.value); + this.publishCronString(); + } + + handleWeekdayChange(event) { + this.selectedWeekdays = event.detail.selectedRows.map((r) => r.value); + this.publishCronString(); + } + + handleHourChange(event) { + this.selectedHours = event.detail.selectedRows.map((r) => r.value); + this.publishCronString(); + } + + handleSingleHourChange(event) { + this.selectedHours = [event.detail.value]; + this.publishCronString(); + } + + handleMinuteChange(event) { + this.selectedMinutes = event.detail.selectedRows.map((r) => r.value); + this.publishCronString(); + } + + handleSingleMinuteChange(event) { + this.selectedMinutes = [event.detail.value]; + this.publishCronString(); + } + + /** + * LOGIC + */ + + processTemplate() { + const selectedTemplate = this.templates.find( + (t) => t.value === this.selectedTemplate + ); + // can enable/disable various selected + this.enabledSelectors = selectedTemplate.selectors ?? []; + // take presets from the provided template + this.selectedMinutes = selectedTemplate?.presets?.minutes ?? ["0"]; + this.selectedHours = selectedTemplate?.presets?.hours ?? this.allHours; + this.selectedDays = selectedTemplate?.presets?.days ?? this.allDays; + this.selectedWeekdays = selectedTemplate?.presets?.weekdays ?? ["?"]; + this.selectedMonths = selectedTemplate?.presets?.months ?? this.allMonths; + this.publishCronString(); + } + + publishCronString() { + // emit custom event + this.dispatchEvent( + new CustomEvent("cronupdate", { + detail: { + value: this.buildCronStrings() + } + }) + ); + } + + buildCronStrings() { + this.errors = []; + // for minute input, each variation requires a differen Cron String + // all others can have multiple values + if (this.selectedMonths.length === 0) { + this.errors.push("Must select at least one month"); + } + const months = + this.selectedMonths.length === this.allMonths.length + ? "*" + : this.selectedMonths.join(","); + + if (this.selectedDays.length === 0) { + this.errors.push("Must select at least one day"); + } + const daysOfMonth = + this.selectedDays.length === this.allDays.length + ? "*" + : this.selectedDays.join(","); + + if (this.selectedWeekdays.length === 0) { + this.errors.push("Must select at least one weekday"); + } + const daysOfWeek = + this.selectedWeekdays.length === this.allWeekdays.length + ? "*" + : this.selectedWeekdays.join(","); + + if (this.selectedHours.length === 0) { + this.errors.push("Must select at least one hour"); + } + const hours = + this.selectedHours.length === this.allHours.length + ? "*" + : this.selectedHours.join(","); + const seconds = "0"; + const crons = []; + + if (this.selectedMinutes.length === 0) { + this.errors.push("Must select at least one minute"); + } + if (this.errors.length > 0) { + return crons; + } + // for every minute + for (let min of this.selectedMinutes) { + crons.push( + `${seconds} ${min} ${hours} ${daysOfMonth} ${months} ${daysOfWeek}` + ); + } + console.log("Calculated Cron strings", JSON.stringify(crons)); + return crons; + } +} diff --git a/dlrs/main/lwc/cronBuilder/cronBuilder.js-meta.xml b/dlrs/main/lwc/cronBuilder/cronBuilder.js-meta.xml new file mode 100644 index 00000000..353961ed --- /dev/null +++ b/dlrs/main/lwc/cronBuilder/cronBuilder.js-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + false + \ No newline at end of file diff --git a/dlrs/main/lwc/flexiblePath/__tests__/flexiblePath.test.js b/dlrs/main/lwc/flexiblePath/__tests__/flexiblePath.test.js new file mode 100644 index 00000000..4e62098d --- /dev/null +++ b/dlrs/main/lwc/flexiblePath/__tests__/flexiblePath.test.js @@ -0,0 +1,25 @@ +import { createElement } from 'lwc'; +import FlexiblePath from 'c/flexiblePath'; + +describe('c-flexible-path', () => { + afterEach(() => { + // The jsdom instance is shared across test cases in a single file so reset the DOM + while (document.body.firstChild) { + document.body.removeChild(document.body.firstChild); + } + }); + + it('TODO: test case generated by CLI command, please fill in test logic', () => { + // Arrange + const element = createElement('c-flexible-path', { + is: FlexiblePath + }); + + // Act + document.body.appendChild(element); + + // Assert + // const div = element.shadowRoot.querySelector('div'); + expect(1).toBe(1); + }); +}); \ No newline at end of file diff --git a/dlrs/main/lwc/flexiblePath/flexiblePath.css b/dlrs/main/lwc/flexiblePath/flexiblePath.css new file mode 100644 index 00000000..10517769 --- /dev/null +++ b/dlrs/main/lwc/flexiblePath/flexiblePath.css @@ -0,0 +1,7 @@ +* { + --slds-c-icon-color-foreground-default: white; +} + +.slds-path { + min-height: 2rem; +} diff --git a/dlrs/main/lwc/flexiblePath/flexiblePath.html b/dlrs/main/lwc/flexiblePath/flexiblePath.html new file mode 100644 index 00000000..ec97b8b0 --- /dev/null +++ b/dlrs/main/lwc/flexiblePath/flexiblePath.html @@ -0,0 +1,109 @@ + diff --git a/dlrs/main/lwc/flexiblePath/flexiblePath.js b/dlrs/main/lwc/flexiblePath/flexiblePath.js new file mode 100644 index 00000000..6ee17c4c --- /dev/null +++ b/dlrs/main/lwc/flexiblePath/flexiblePath.js @@ -0,0 +1,75 @@ +import { LightningElement, api } from "lwc"; + +export const PATH_STATES = { + complete: "complete", + current: "current", + incomplete: "incomplete", + failed: "failed" +}; + +/** + * @typedef step + * @property {string} label + * @property {string} name + * @property {keyof typeof PATH_STATES} status + * @property {string?} nextActionLabel + */ + +export default class FlexiblePath extends LightningElement { + _steps; + /** @type {step[]} */ + @api + get steps() { + return this._steps; + } + + set steps(val) { + this._steps = val.map((v) => ({ + ...v, + ["is" + v.status.charAt(0).toUpperCase() + v.status.slice(1)]: true + })); + } + + get nextActionLabel() { + if (!this.steps) { + return "unknown"; + } + let nextCurrent = this.nextAction; + return nextCurrent?.nextActionLabel ?? nextCurrent?.label; + } + + get nextAction() { + return ( + this.steps.find((s) => s.status === "current") ?? + this.steps.find((s) => s.status === "incomplete") + ); + } + + handlePathStepClick(event) { + const step = this.steps.find( + (s) => s.name === event.currentTarget.dataset.step + ); + if (step) { + this.dispatchEvent( + new CustomEvent("nextactionclick", { + detail: { + label: step.label, + name: step.name + } + }) + ); + } + } + + handleNextActionClick() { + const nextAction = this.nextAction; + this.dispatchEvent( + new CustomEvent("nextactionclick", { + detail: { + label: nextAction.label, + name: nextAction.name + } + }) + ); + } +} diff --git a/dlrs/main/lwc/flexiblePath/flexiblePath.js-meta.xml b/dlrs/main/lwc/flexiblePath/flexiblePath.js-meta.xml new file mode 100644 index 00000000..353961ed --- /dev/null +++ b/dlrs/main/lwc/flexiblePath/flexiblePath.js-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + false + \ No newline at end of file diff --git a/dlrs/main/lwc/manageRollups/manageRollups.css b/dlrs/main/lwc/manageRollups/manageRollups.css new file mode 100644 index 00000000..7660a111 --- /dev/null +++ b/dlrs/main/lwc/manageRollups/manageRollups.css @@ -0,0 +1,3 @@ +* { + transition: width 500ms; +} diff --git a/dlrs/main/lwc/manageRollups/manageRollups.html b/dlrs/main/lwc/manageRollups/manageRollups.html new file mode 100644 index 00000000..20b7c492 --- /dev/null +++ b/dlrs/main/lwc/manageRollups/manageRollups.html @@ -0,0 +1,50 @@ + diff --git a/dlrs/main/lwc/manageRollups/manageRollups.js b/dlrs/main/lwc/manageRollups/manageRollups.js new file mode 100644 index 00000000..7487c94f --- /dev/null +++ b/dlrs/main/lwc/manageRollups/manageRollups.js @@ -0,0 +1,511 @@ +import { LightningElement, wire } from "lwc"; +import { ShowToastEvent } from "lightning/platformShowToastEvent"; +import LightningConfirm from "lightning/confirm"; +import { NavigationMixin, CurrentPageReference } from "lightning/navigation"; + +import getAllRollupConfigs from "@salesforce/apex/RollupEditorController.getAllRollupConfigs"; +import deleteRollupConfig from "@salesforce/apex/RollupEditorController.deleteRollupConfig"; +import USER_ID from "@salesforce/user/Id"; +import RollupEditor, { CLASS_SCHEDULER_CONFIG } from "c/rollupEditor"; +import ClassSchedulerModal from "c/classSchedulerModal"; + +// import so we can get a namespace from it +// can't import the Platform Event or CMDT directly +// because they get corrupted +import SCHEDULE_ITEMS_OBJECT from "@salesforce/schema/LookupRollupSummaryScheduleItems__c"; + +import { + subscribe, + unsubscribe, + onError, + isEmpEnabled +} from "lightning/empApi"; + +const STATUS_LABELS = { + Scheduled: "Watch and Process", + Realtime: "Realtime", + "Process Builder": "Automatable", + Developer: "Developer" +}; + +export default class ManageRollups extends NavigationMixin(LightningElement) { + dtColumns = [ + { + type: "button", + label: "Name", + sortable: true, + fieldName: "label", + initialWidth: 300, + typeAttributes: { + label: { fieldName: "label" }, + name: "rollup_select", + title: "Edit", + value: "edit", + variant: "base", + stretch: true + } + }, + { + label: "Parent", + fieldName: "parentObject", + sortable: true + }, + { + label: "Child", + fieldName: "childObject", + sortable: true + }, + { + label: "Field To Aggregate", + fieldName: "fieldToAggregate", + sortable: true + }, + { + label: "Aggregate Result Field", + fieldName: "aggregateResultField", + sortable: true + }, + { + label: "Rollup Type", + fieldName: "aggregateOperation", + sortable: true, + filterable: true + }, + { + label: "Calc Mode", + fieldName: "calculationMode", + sortable: true, + filterable: true + }, + { + label: "Active", + fieldName: "active", + initialWidth: 75, + type: "boolean", + sortable: true, + filterable: true + }, + { + type: "button-icon", + initialWidth: 50, + typeAttributes: { + name: "rollup_delete", + iconName: "action:delete", + value: "delete", + variant: "natrual" + } + } + ]; + + @wire(CurrentPageReference) + pageRef; + + sortByField = "active"; + sortDirection = "desc"; + pendingSaveRollupName; + + channelName = `/event/${this._buildApiName("UserNotification__e")}`; + subscription = {}; + + rollups = {}; + rollupList = []; + searchFilter = ""; + isLoading = true; + selectedRollup = undefined; + filters = {}; + + connectedCallback() { + this.refreshRollups(); + // Register error listener + this.registerErrorListener(); + this.handleSubscribe(); + } + + async refreshRollups() { + this.isLoading = true; + this.rollups = await getAllRollupConfigs(); + + Object.keys(this.rollups).forEach((k) => { + this.rollups[k] = { + ...this.rollups[k], + calculationMode: + STATUS_LABELS[this.rollups[k].calculationMode] ?? + this.rollups[k].calculationMode + }; + }); + + if (this.rollups.length === 0) { + // no rollups in the database, start to create a new one + this.openEditor(null); + } + this.updateColumnFilters(); + this.calcRollupList(); + this.isLoading = false; + } + + updateColumnFilters() { + this.dtColumns = [...this.dtColumns].map(conf => { + if (conf.filterable) { + // reset actions + if (conf.actions) { + conf.actions = conf.actions.filter(action => action.type !== "filter"); + } else { + conf.actions = []; + } + + const availableValues = this.rollups.reduce((result, rollup) => { + const fieldValue = rollup[conf.fieldName]; + + if (!result.includes(fieldValue)) { + result.push(fieldValue) + } + + return result; + }, []); + + conf.actions.push({ + type: "filter", + label: "All", + checked: true, + name: "All" + }); + + availableValues.sort().forEach(val => { + conf.actions.push({ + type: "filter", + label: val, + checked: false, + name: val + }); + }); + + if (conf.fieldName in this.filters) { + const filteredValue = this.filters[conf.fieldName].value; + + // check if currently filtered value is still relevant + if (availableValues.includes(filteredValue)) { + conf.actions.find(a => a.type === "filter" && a.name === "All").checked = false; + conf.actions.find(a => a.type === "filter" && a.name === filteredValue).checked = true; + } else { + // remove filter + delete this.filters[conf.fieldName]; + conf.iconName = ''; + } + } + } + + return conf; + }); + } + + calcRollupList() { + this.rollupList = Object.values(this.rollups).filter((r) => { + return this.meetsSearchFilter(r) && this.meetsColumnFilters(r); + }); + this.rollupList.sort((a, b) => { + const dirModifier = this.sortDirection === "asc" ? 1 : -1; + const aVal = a[this.sortByField]; + const bVal = b[this.sortByField]; + let res = 0; + if (typeof aVal === "boolean") { + if (aVal) { + // pull up + res = 1; + } + if (bVal) { + // pull down + res = res - 1; + } + } else { + res = aVal.localeCompare(bVal); + } + if (res === 0) { + return a.label.localeCompare(b.label) * dirModifier; + } + + return res * dirModifier; + }); + } + + meetsSearchFilter(rollup) { + if (this.searchFilter.trim().length === 0) { + return true; + } + for (const c of this.dtColumns) { + if ( + rollup[c.fieldName] && + ("" + rollup[c.fieldName]).toLowerCase().indexOf(this.searchFilter) >= 0 + ) { + return true; + } + } + // didn't match any of the displayed fields + return false; + } + + meetsColumnFilters(rollup) { + return Object.keys(this.filters).every(fieldName => { + return rollup[fieldName] === this.filters[fieldName].value + }) + } + + rollupSelectHandler(event) { + const action = event.detail.action; + const row = event.detail.row; + switch (action.name) { + case "rollup_select": + this.openEditor(row.developerName); + break; + case "rollup_delete": + this.requestDelete(row.developerName); + break; + default: + throw new Error("unexpected action on rollupSelectHandler"); + } + } + + async openEditor(rollupName) { + const result = await RollupEditor.open({ + description: "Rollup Config Editor", + rollupName + }); + + switch (result?.action) { + case "delete": + this.requestDelete(result.rollupName); + break; + case "deloyStart": + this.isLoading = true; + this.dispatchEvent( + new ShowToastEvent({ + title: "Deployment Started", + message: + "Started Metadata Record Updates in Deployment " + result.jobId, + variant: "info" + }) + ); + this.pendingSaveRollupName = result.rollupName; + break; + case "navigate": + this[NavigationMixin.Navigate](result.config); + break; + default: + break; + } + } + + async requestDelete(rollupName) { + const confirmed = await LightningConfirm.open({ + message: `Are you sure you want to delete the rollup named: ${rollupName}`, + label: "Delete Rollup Configuration", + theme: "warning" + }); + if (confirmed) { + this.dispatchEvent( + new ShowToastEvent({ + title: "Delete Started", + message: `Started request to delete ${rollupName}`, + variant: "info" + }) + ); + this.isLoading = true; + deleteRollupConfig({ rollupName: rollupName }); + } + } + + runCreateNew() { + this.openEditor(null); + } + + async manageRollupJobSchedule() { + await ClassSchedulerModal.open(CLASS_SCHEDULER_CONFIG).then((results) => { + if (results) { + try { + const evt = new ShowToastEvent(results); + this.dispatchEvent(evt); + } catch (err) { + // known issue with Lighting Locker can cause this to fail + console.error("Failed to create toast with outcome", err); + } + } + }); + } + + handleInputChange() { + this.searchFilter = this.template + .querySelector("lightning-input") + .value.toLowerCase(); + this.calcRollupList(); + } + + handleRequestDelete(event) { + this.requestDelete(event.detail.rollupName); + } + + handleOnSort(event) { + // The method onsort event handler + this.sortByField = event.detail.fieldName; + this.sortDirection = event.detail.sortDirection; + // assign the latest attribute with the sorted column fieldName and sorted direction + this.calcRollupList(); + } + + handleHeaderAction(event) { + const filteredFieldName = event.detail.columnDefinition.fieldName; + const columnRef = [...this.dtColumns]; + const currentColumn = columnRef.find(f => f.fieldName === filteredFieldName); + const previousAction = currentColumn.actions.find(action => action.checked); + const currentAction = currentColumn.actions.find(action => action.name === event.detail.action.name); + + if (event.detail.action.type === 'filter') { + if (event.detail.action.name === 'All') { + delete this.filters[filteredFieldName]; + delete currentColumn.iconName; + } else { + this.filters = { + ...this.filters, + [filteredFieldName]: { + type: event.detail.columnDefinition.type, + value: event.detail.action.name + } + } + currentColumn.iconName = 'utility:filterList'; + } + + this.calcRollupList(); + } + + previousAction.checked = false; + currentAction.checked = true; + this.dtColumns = columnRef; + } + + disconnectedCallback() { + this.handleUnsubscribe(); + } + + // Handles subscribe button click + handleSubscribe() { + if (!isEmpEnabled) { + console.error("Emp API Is not currently enabled"); + return; + } + // Callback invoked whenever a new event message is received + const messageCallback = (response) => { + // console.log("New message received: ", JSON.stringify(response)); + // deployment probably changed the rollup definitions, should refresh + this.isLoading = false; + this.refreshRollups(); + if ( + !USER_ID.startsWith( + response.data.payload[this._buildApiName("Recipient__c")] + ) + ) { + // This message isn't for us, don't do anything + return; + } + let title, message, messageData, variant, mode; + const deploymentData = JSON.parse( + response.data.payload[this._buildApiName("Payload__c")] + ); + + switch (response.data.payload[this._buildApiName("Type__c")]) { + case "DeleteRequestResult": + this.pendingSaveRollupName = undefined; + if (deploymentData.success) { + title = "Delete Completed!"; + message = `${deploymentData.metadataNames} deleted successfully`; + variant = "success"; + mode = "dismissible"; + } else { + title = "Delete Failed!"; + message = `Attempt to delete ${deploymentData.metadataNames} returned with errors [${deploymentData.error}]`; + variant = "error"; + mode = "sticky"; + } + break; + case "DeploymentResult": + if (deploymentData.status === "Succeeded") { + title = "Deployment Completed!"; + message = "Metadata saved successfully"; + variant = "success"; + mode = "dismissible"; + } else { + title = "Deployment Failed!"; + message = + "Status of " + + deploymentData.status + + ", errors [" + + deploymentData.details.componentFailures + .map((failure) => `${failure.fullName}: ${failure.problem}`) + .join("\n") + + "], \n{0}"; + // if you know a better way to build this URL please replace this + messageData = [ + { + label: "Click to view Deployment", + url: `/lightning/setup/DeployStatus/page?address=%2Fchangemgmt%2FmonitorDeploymentsDetails.apexp%3FasyncId%3D${deploymentData.id}` + } + ]; + variant = "error"; + mode = "sticky"; + } + + if (this.pendingSaveRollupName) { + let pendingRollupName = this.pendingSaveRollupName; + if (deploymentData.status !== "Succeeded") { + // allows for recovery of non-saved rollup editor state + pendingRollupName = "pending-" + pendingRollupName; + } + this.pendingSaveRollupName = undefined; + this.openEditor(pendingRollupName); + } + break; + default: + break; + } + + const evt = new ShowToastEvent({ + title, + message, + messageData, + variant, + mode + }); + this.dispatchEvent(evt); + // Response contains the payload of the new message received + }; + + // Invoke subscribe method of empApi. Pass reference to messageCallback + subscribe(this.channelName, -1, messageCallback).then((response) => { + // Response contains the subscription information on subscribe call + console.log("EmpAPI Subscribe", JSON.stringify(response)); + this.subscription = response; + }); + } + + // Handles unsubscribe button click + handleUnsubscribe() { + // Invoke unsubscribe method of empApi + unsubscribe(this.subscription, (response) => { + console.log("unsubscribe() response: ", JSON.stringify(response)); + // Response is true for successful unsubscribe + }); + } + + registerErrorListener() { + // Invoke onError empApi method + onError((error) => { + console.error("Received error from server: ", JSON.stringify(error)); + // Error contains the server-side error + }); + } + + // use an imported API name and swap parts to apply namespace to other API names that we can't import correctly + _buildApiName(value) { + return SCHEDULE_ITEMS_OBJECT.objectApiName.replace( + "LookupRollupSummaryScheduleItems__c", + value + ); + } +} diff --git a/dlrs/main/lwc/manageRollups/manageRollups.js-meta.xml b/dlrs/main/lwc/manageRollups/manageRollups.js-meta.xml new file mode 100644 index 00000000..bf718e26 --- /dev/null +++ b/dlrs/main/lwc/manageRollups/manageRollups.js-meta.xml @@ -0,0 +1,11 @@ + + + 62.0 + true + Manage Rollups + Create and modify rollup configurations + + lightning__Tab + lightning__AppPage + + \ No newline at end of file diff --git a/dlrs/main/lwc/objectSelector/objectSelector.css b/dlrs/main/lwc/objectSelector/objectSelector.css new file mode 100644 index 00000000..f320d96e --- /dev/null +++ b/dlrs/main/lwc/objectSelector/objectSelector.css @@ -0,0 +1,6 @@ +img { + border-radius: var( + --slds-c-icon-radius-border, + var(--sds-c-icon-radius-border, var(--lwc-borderRadiusMedium, 0.25rem)) + ); +} diff --git a/dlrs/main/lwc/objectSelector/objectSelector.html b/dlrs/main/lwc/objectSelector/objectSelector.html new file mode 100644 index 00000000..7e63dd27 --- /dev/null +++ b/dlrs/main/lwc/objectSelector/objectSelector.html @@ -0,0 +1,18 @@ + + diff --git a/dlrs/main/lwc/objectSelector/objectSelector.js b/dlrs/main/lwc/objectSelector/objectSelector.js new file mode 100644 index 00000000..bb3baae7 --- /dev/null +++ b/dlrs/main/lwc/objectSelector/objectSelector.js @@ -0,0 +1,123 @@ +import { LightningElement, api, wire } from "lwc"; +import getAllObjects from "@salesforce/apex/ObjectSelectorController.getParentObjList"; +import { getObjectInfos } from "lightning/uiObjectInfoApi"; + +export default class ObjectSelector extends LightningElement { + // public properties with initial default values + @api label = "Object"; + @api placeholder = "Select on object"; + @api helperText = ''; + @api iconName = "standard:custom"; // would be awesome to use the correct icon + _currentSelection; + @api + get currentSelection() { + return this._currentSelection; + } + set currentSelection(val) { + this._currentSelection = val; + this.selectObject(val); + } + // private properties + searchThreshold = 3; + searchRequired = true; + maxSearchResults = 5; + objectApiNames = []; + selectedRecord = ""; + objects = []; + connectedCallback() { + //GET LIST OF ALL OBJECTS + getAllObjects() + .then((objects) => { + if (objects != null) { + this.objects = objects.map((o) => { + return { ...o, iconName: this.iconName }; + }); + this.objectApiNames = objects.map((o) => o.fullName); + if (this.currentSelection) { + this.selectObject(this.currentSelection); + } + } + }) + .catch((error) => { + this.error = error; + this.objects = {}; + }) + } + + // use the UI API to determine the iconName for each object + // this call is slow and if you're interacting with the UI before this loads + // you'll get the generic/fallback icon + @wire(getObjectInfos, { objectApiNames: "$objectApiNames" }) + wiredObjectInfos({ data }) { + if (data) { + // try and extract the Icon path from + const iconNameRegEx = /(\w+)\/(\w+)(?:_\d+)\./; + const objectIconCache = data.results + .filter((r) => r.statusCode === 200) + .filter((r) => r.result.themeInfo) + .reduce((t, v) => { + t[v.result.apiName] = v.result?.themeInfo; + return t; + }, {}); + this.objects = this.objects.map((o) => { + if (!objectIconCache[o.fullName]?.iconUrl) { + return o; + } + o.iconUrl = objectIconCache[o.fullName].iconUrl; + o.iconColor = `#${objectIconCache[o.fullName].color}`; + o.iconStyle = `background-color: #${ + objectIconCache[o.fullName].color + };`; + if (o.iconUrl) { + const matches = iconNameRegEx.exec(o.iconUrl); + if (matches) { + o.iconName = `${matches[1]}:${matches[2]}`; + } + } + return o; + }); + } + } + + get objectsLoading() { + return this.objects.length === 0; + } + + get objectOptions() { + return this.objects.map(o => { + return { + value: o.fullName, + label: `${o.label} (${o.fullName})`, + icon: o.iconName, + } + }); + } + + // method to update selected record from search result + handleSelectedRecord(event) { + const selectedName = event.detail.selectedOption.value; // get selected record Id from list + this.selectObject(selectedName); + this.lookupUpdatehandler(selectedName); // update value on parent component as well from helper function + } + + selectObject(val) { + if (!val || val.trim().length === 0) { + return; + } + // data isn't ready yet, will auto-retry on data loaded + if (this.objectsLoading) { + return; + } + const obj = this.objects.find((o) => o.fullName === val); + this.selectedRecord = obj.fullName; + } + + // send selected lookup record to parent component using custom event + lookupUpdatehandler(value) { + //Send only the API Name in the event + const oEvent = new CustomEvent("lookupupdate", { + detail: { selectedRecord: value } + }); + this.dispatchEvent(oEvent); + } +} diff --git a/dlrs/main/lwc/objectSelector/objectSelector.js-meta.xml b/dlrs/main/lwc/objectSelector/objectSelector.js-meta.xml new file mode 100644 index 00000000..d2a440c0 --- /dev/null +++ b/dlrs/main/lwc/objectSelector/objectSelector.js-meta.xml @@ -0,0 +1,9 @@ + + + 62.0 + true + + lightning__AppPage + lightning__HomePage + + \ No newline at end of file diff --git a/dlrs/main/lwc/rollupEditor/__tests__/rollupEditor.test.js b/dlrs/main/lwc/rollupEditor/__tests__/rollupEditor.test.js new file mode 100644 index 00000000..45cf7e8a --- /dev/null +++ b/dlrs/main/lwc/rollupEditor/__tests__/rollupEditor.test.js @@ -0,0 +1,25 @@ +import { createElement } from "lwc"; +import RollupEditor from "c/rollupEditor"; + +describe("c-rollup-editor", () => { + afterEach(() => { + // The jsdom instance is shared across test cases in a single file so reset the DOM + while (document.body.firstChild) { + document.body.removeChild(document.body.firstChild); + } + }); + + it("TODO: test case generated by CLI command, please fill in test logic", () => { + // Arrange + const element = createElement("c-rollup-editor", { + is: RollupEditor + }); + + // Act + document.body.appendChild(element); + + // Assert + // const div = element.shadowRoot.querySelector('div'); + expect(1).toBe(1); + }); +}); diff --git a/dlrs/main/lwc/rollupEditor/rollupEditor.css b/dlrs/main/lwc/rollupEditor/rollupEditor.css new file mode 100644 index 00000000..c4f572d5 --- /dev/null +++ b/dlrs/main/lwc/rollupEditor/rollupEditor.css @@ -0,0 +1,16 @@ +.testcodearea { + --slds-c-textarea-sizing-min-height: 300px; +} + +.record-has-errors { + color: var(--lwc-colorTextError); +} + +summary { + cursor: pointer; +} + +details:not([open]) .summary-down, +details[open] .summary-right { + display: none; +} diff --git a/dlrs/main/lwc/rollupEditor/rollupEditor.html b/dlrs/main/lwc/rollupEditor/rollupEditor.html new file mode 100644 index 00000000..8548eb1a --- /dev/null +++ b/dlrs/main/lwc/rollupEditor/rollupEditor.html @@ -0,0 +1,572 @@ + diff --git a/dlrs/main/lwc/rollupEditor/rollupEditor.js b/dlrs/main/lwc/rollupEditor/rollupEditor.js new file mode 100644 index 00000000..fe471590 --- /dev/null +++ b/dlrs/main/lwc/rollupEditor/rollupEditor.js @@ -0,0 +1,558 @@ +import { api, track, wire } from "lwc"; + +import LightningModal from "lightning/modal"; +import { ShowToastEvent } from "lightning/platformShowToastEvent"; + +import { PATH_STATES } from "c/flexiblePath"; + +import getRollupConfig from "@salesforce/apex/RollupEditorController.getRollupConfig"; +import validateRollupConfig from "@salesforce/apex/RollupEditorController.validateRollupConfig"; +import saveRollupConfig from "@salesforce/apex/RollupEditorController.saveRollupConfig"; +import getFieldOptions from "@salesforce/apex/RollupEditorController.getFieldOptions"; +import getManageTriggerPageUrl from "@salesforce/apex/RollupEditorController.getManageTriggerPageUrl"; +import getFullCalculatePageUrl from "@salesforce/apex/RollupEditorController.getFullCalculatePageUrl"; +import getScheduleCalculatePageUrl from "@salesforce/apex/RollupEditorController.getScheduleCalculatePageUrl"; +import hasChildTriggerDeployed from "@salesforce/apex/LookupRollupStatusCheckController.hasChildTriggerDeployed"; +import getScheduledFullCalculates from "@salesforce/apex/LookupRollupStatusCheckController.getScheduledFullCalculates"; +import getScheduledJobs from "@salesforce/apex/LookupRollupStatusCheckController.getScheduledJobs"; +import getOutstandingScheduledItemsForLookup from "@salesforce/apex/LookupRollupStatusCheckController.getOutstandingScheduledItemsForLookup"; +import ClassSchedulerModal from "c/classSchedulerModal"; + +const DEFAULT_ROLLUP_VALUES = Object.freeze({ + active: false, + calculationMode: "Scheduled", + calculationSharingMode: "System" +}); + +const STEPS = Object.freeze({ + configure: { + label: "Configure", + name: "save", + nextActionLabel: "Save", + status: PATH_STATES.complete + }, + schedule: { + label: "Schedule Job", + name: "scheduleJob", + nextActionLabel: "Schedule", + status: PATH_STATES.incomplete + }, + trigger: { + label: "Deploy Trigger", + name: "deployTrigger", + nextActionLabel: "Manage Triggers", + status: PATH_STATES.incomplete + }, + activate: { + label: "Activate", + name: "activate", + nextActionLabel: "Save & Activate", + status: PATH_STATES.incomplete + } +}); + +const STEP_TEMPLATES = Object.freeze({ + Realtime: [STEPS.configure, STEPS.trigger, STEPS.activate], + Scheduled: [STEPS.configure, STEPS.schedule, STEPS.trigger, STEPS.activate], + other: [STEPS.configure, STEPS.activate] +}); + +export const CLASS_SCHEDULER_CONFIG = { + label: "Process Scheduled Items", + description: + "Manage RollupJob schedules to process all pending Scheduled Item records for all rollups", + className: "RollupJob", + size: "small", + templates: [ + { + label: "Once Every Day", + value: "daily", + selectors: ["single-hour"], + presets: { hours: ["3"] } + }, + { + label: "Once Every Hour", + value: "hourly", + selectors: ["single-minute"] + }, + { + label: "Every 15 minutes", + value: "every15", + selectors: [], + presets: { minutes: ["0", "15", "30", "45"] } + } + ] +}; + +export default class RollupEditor extends LightningModal { + isLoading = false; + childTriggerIsDeployed = false; + rollupId; + nextFullCalculateAt = ""; + + @wire(getOutstandingScheduledItemsForLookup, { lookupID: "$rollupId" }) + outstandingScheduledItems; + + @track + rollup = { ...DEFAULT_ROLLUP_VALUES }; + errors = {}; + + @track + parentRFieldOptions = []; + + @track + childRFieldOptions = []; + + @track + steps = []; + + get rollupName() { + return this._rollupName; + } + @api + set rollupName(val) { + this._rollupName = val; + } + + get cardHeader() { + return this.rollup.id ? `Edit ${this.rollup.label}` : "New Rollup"; + } + + get saveButtonLabel() { + return this.rollup.id ? "Save" : "Create"; + } + + async connectedCallback() { + await this.getRollup(); + } + + get rollupCanBeActivated() { + return this.rollup.id && !this.rollup.active; + } + + get rollupCanBeDeactivated() { + return this.rollup.id && this.rollup.active; + } + + get scheduledItemsIcon() { + if (!this.rollup.id || !this.outstandingScheduledItems?.data) { + return ""; + } + + return "utility:warning"; + } + + get relationshipCriteriaPlaceholder() { + return "Example_Field1__c\r\nExample_Field2__c"; + } + + get childFieldOptionsPending() { + return this.childRFieldOptions.length === 0; + } + + get parentFieldOptionsPending() { + return this.parentRFieldOptions.length === 0; + } + + async getRollup() { + if (!this.rollupName) { + this.rollup = { ...DEFAULT_ROLLUP_VALUES }; + } else { + try { + this.rollup = window.sessionStorage.getItem(this.rollupName); + if (this.rollup) { + window.sessionStorage.removeItem(this.rollupName); + this.rollup = JSON.parse(this.rollup); + } else { + // necessary to prevent HTML from trying to access a null object + this.rollup = { ...DEFAULT_ROLLUP_VALUES }; + this.rollup = await getRollupConfig({ + rollupName: this.rollupName + }); + } + + this.rollupId = this.rollup.id; + this.nextFullCalculateAt = await getScheduledFullCalculates({ + lookupID: this.rollupId + }); + } catch (error) { + this.errors.record = [error.message]; + } + } + this.configureSteps(); + await this.getRelationshipFieldOptions(); + } + + async getRelationshipFieldOptions() { + await this.getParentRelationshipFieldOptions(); + await this.getChildRelationshipFieldOptions(); + } + + async getParentRelationshipFieldOptions() { + if (this.rollup.parentObject) { + this.parentRFieldOptions = ( + await getFieldOptions({ + objectName: this.rollup.parentObject + }) + ).sort((a, b) => a.label.localeCompare(b.label)); + } else { + this.parentRFieldOptions = []; + } + } + + async configureSteps() { + const newSteps = []; + const scheduledJobCount = await getScheduledJobs(); + this.childTriggerIsDeployed = await hasChildTriggerDeployed({ + lookupID: this.rollup.id + }); + for (let s of STEP_TEMPLATES[this.rollup.calculationMode] || + STEP_TEMPLATES.other) { + if (s.name === "deployTrigger") { + s.status = this.childTriggerIsDeployed + ? PATH_STATES.complete + : PATH_STATES.incomplete; + } + if (s.name === "scheduleJob") { + s.status = + scheduledJobCount > 0 ? PATH_STATES.complete : PATH_STATES.incomplete; + } + if (s.name === "activate") { + s.status = this.rollup.active + ? PATH_STATES.complete + : PATH_STATES.incomplete; + } + newSteps.push(s); + } + + // mark first incomplete as current + const firstIncomplete = newSteps.find( + (s) => s.status === PATH_STATES.incomplete + ); + if (firstIncomplete) { + firstIncomplete.status = PATH_STATES.current; + } + + this.steps = newSteps; + } + + async getChildRelationshipFieldOptions() { + if (this.rollup.childObject) { + this.childRFieldOptions = ( + await getFieldOptions({ + objectName: this.rollup.childObject + }) + ).sort((a, b) => a.label.localeCompare(b.label)); + } else { + this.childRFieldOptions = []; + } + } + + async runValidate() { + this.errors = await validateRollupConfig({ + rollup: JSON.stringify(this.rollup) + }); + } + + cancelClickHandler() { + this.close(); + } + + cloneClickHandler() { + delete this.rollup.developerName; + delete this.rollup.id; + this.rollupId = undefined; + this.errors = {}; + } + + deleteClickHandler() { + this.close({ action: "delete", rollupName: this.rollup.developerName }); + } + + activateClickHandler() { + this.rollup.active = true; + this.runSave(); + } + + deactivateClickHandler() { + this.rollup.active = false; + this.runSave(); + } + + rollupTypeChangeHandler(event) { + this.rollup.aggregateOperation = event.detail.value; + } + + async pathClickHandler(event) { + console.log("Path clicked", event.detail.label); + switch (event.detail.name) { + case "deployTrigger": + this.manageTriggerHandler(); + break; + case "activate": + this.activateClickHandler(); + break; + case "scheduleJob": + await ClassSchedulerModal.open(CLASS_SCHEDULER_CONFIG).then( + (results) => { + if (results) { + try { + const evt = new ShowToastEvent(results); + this.dispatchEvent(evt); + } catch (err) { + // known issue with Lighting Locker can cause this to fail + console.error("Failed to create toast with outcome", err); + } + } + } + ); + // recalculate Path after Schedule is created + this.configureSteps(); + break; + case "save": + this.runSave(); + break; + default: + console.error("Unexpected action", event.detail.label); + break; + } + } + + async manageTriggerHandler() { + const url = await getManageTriggerPageUrl({ rollupId: this.rollup.id }); + this.close({ + action: "navigate", + config: { + type: "standard__webPage", + attributes: { + url + } + } + }); + } + + async recalculateNowHandler() { + const url = await getFullCalculatePageUrl({ rollupId: this.rollup.id }); + this.close({ + action: "navigate", + config: { + type: "standard__webPage", + attributes: { + url + } + } + }); + } + + async schedulRecalculateHandler() { + const url = await getScheduleCalculatePageUrl({ rollupId: this.rollup.id }); + this.close({ + action: "navigate", + config: { + type: "standard__webPage", + attributes: { + url + } + } + }); + } + + onLabelBlurHandler(event) { + const devNameElem = this.template.querySelector( + '[data-name="rollup_developerName"]' + ); + if (!devNameElem || devNameElem.value.trim().length > 0) { + return; + } + this.rollup.developerName = this._makeApiSafe(event.currentTarget.value); + devNameElem.value = this.rollup.developerName; + } + + relationshipFieldSelectedHandler(event) { + console.log("Relationship Field Selected", event.detail.selectedOption); + const refs = event.detail?.selectedOption?.referencesTo; + if (refs && refs.length === 1) { + this.rollup.parentObject = refs[0]; + this.rollup.aggregateResultField = undefined; + this.getParentRelationshipFieldOptions(); + } + } + + calculationModeChangeHandler(event) { + this.rollup.calculationMode = event.detail.value; + this.configureSteps(); + } + + _makeApiSafe(val) { + return val.replace(/^([0-9])/, "X$1").replace(/[^0-9a-zA-Z]+/g, "_"); + } + + async runSave() { + if (!this.assembleRollupFromForm()) { + console.error("data form is invalid"); + return; + } + this.isLoading = true; + await this.runValidate(); + if (Object.keys(this.errors).length > 0) { + console.error("Record has errors", this.errors); + return; + } + const jobId = await saveRollupConfig({ + rollup: JSON.stringify(this.rollup) + }); + + try { + window.sessionStorage.setItem( + "pending-" + this.rollup.developerName, + JSON.stringify(this.rollup) + ); + } catch (err) { + console.error("Error setting session storage", err); + } + + this.close({ + action: "deloyStart", + jobId, + rollupName: this.rollup.developerName + }); + this.isLoading = false; + } + + assembleRollupFromForm() { + const fieldNames = [ + "label", + "developerName", + "description", + "relationshipField", + "relationshipCriteria", + "relationshipCriteriaFields", + "fieldToAggregate", + "fieldToOrderBy", + "aggregateOperation", + "aggregateResultField", + "aggregateAllRows", + "rowLimit", + "active", // No Input Element for this field + "calculationMode", + "calculationSharingMode", + "concatenateDelimiter", + "testCode", + "testCodeParent", + "testCodeSeeAllData", + "bypassPermissionApiName" + ]; + + let isValid = true; + + const checkboxFields = ["active", "aggregateAllRows", "testCodeSeeAllData"]; + + fieldNames.forEach((fieldName) => { + const inputElement = this.template.querySelector( + `[data-name="rollup_${fieldName}"]` + ); + if (inputElement) { + if (inputElement.checkValidity) { + if (!inputElement.checkValidity()) { + isValid = false; + + // had a weird problem where I couldn't do multiple fields in the same loop, had to separate them + // probably a better way to do this + // eslint-disable-next-line @lwc/lwc/no-async-operation + setTimeout(() => { + inputElement.reportValidity(); + }, 20); + } + } + + const attribute = checkboxFields.includes(fieldName) + ? "checked" + : "value"; + this.rollup[fieldName] = inputElement[attribute]; + if ( + typeof this.rollup[fieldName] == "string" && + this.rollup[fieldName].trim().length === 0 + ) { + this.rollup[fieldName] = undefined; + } + console.log(`fieldName (${fieldName}) : ${this.rollup[fieldName]}`); + } + }); + return isValid; + } + + childObjectSelected(event) { + this.rollup.childObject = event.detail.selectedRecord; + this.getChildRelationshipFieldOptions(); + this.rollup.fieldToAggregate = undefined; + this.rollup.relationshipField = undefined; + this.configureSteps(); + } + + parentObjectSelected(event) { + this.rollup.parentObject = event.detail.selectedRecord; + this.getParentRelationshipFieldOptions(); + this.rollup.aggregateResultField = undefined; + this.configureSteps(); + } + + get supportsTrigger() { + return ( + this.rollup.id && + ["Scheduled", "Realtime"].includes(this.rollup.calculationMode) + ); + } + + get aggregateOptions() { + return [ + { label: "Sum", value: "Sum" }, + { label: "Max", value: "Max" }, + { label: "Min", value: "Min" }, + { label: "Avg", value: "Avg" }, + { label: "Count", value: "Count" }, + { label: "Count Distinct", value: "Count Distinct" }, + { label: "Concatenate", value: "Concatenate" }, + { label: "Concatenate Distinct", value: "Concatenate Distinct" }, + { label: "First", value: "First" }, + { label: "Last", value: "Last" } + ]; + } + + get calculationModes() { + return [ + { label: "Watch for Changes and Process Later", value: "Scheduled" }, + { label: "Realtime", value: "Realtime" }, + { label: "Invocable by Automation", value: "Process Builder" }, + { label: "Developer", value: "Developer" } + ]; + } + + get calculationSharingModes() { + return [ + { label: "User", value: "User" }, + { label: "System", value: "System" } + ]; + } + + get shouldDisableConcatDelim() { + return !["Concatenate", "Concatenate Distinct"].includes( + this.rollup.aggregateOperation + ); + } + + get shouldDisableFieldToOrderBy() { + return !["Concatenate", "Concatenate Distinct", "First", "Last"].includes( + this.rollup.aggregateOperation + ); + } + + get shouldDisableRowLimit() { + return !["Concatenate", "Concatenate Distinct", "Last"].includes( + this.rollup.aggregateOperation + ); + } + + get hasErrors() { + return Object.keys(this.errors).length > 0; + } +} diff --git a/dlrs/main/lwc/rollupEditor/rollupEditor.js-meta.xml b/dlrs/main/lwc/rollupEditor/rollupEditor.js-meta.xml new file mode 100644 index 00000000..353961ed --- /dev/null +++ b/dlrs/main/lwc/rollupEditor/rollupEditor.js-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + false + \ No newline at end of file diff --git a/dlrs/main/lwc/rollupEditorError/__tests__/rollupEditorError.test.js b/dlrs/main/lwc/rollupEditorError/__tests__/rollupEditorError.test.js new file mode 100644 index 00000000..34cceaa6 --- /dev/null +++ b/dlrs/main/lwc/rollupEditorError/__tests__/rollupEditorError.test.js @@ -0,0 +1,25 @@ +import { createElement } from "lwc"; +import RollupEditorError from "c/rollupEditorError"; + +describe("c-rollup-editor-error", () => { + afterEach(() => { + // The jsdom instance is shared across test cases in a single file so reset the DOM + while (document.body.firstChild) { + document.body.removeChild(document.body.firstChild); + } + }); + + it("TODO: test case generated by CLI command, please fill in test logic", () => { + // Arrange + const element = createElement("c-rollup-editor-error", { + is: RollupEditorError + }); + + // Act + document.body.appendChild(element); + + // Assert + // const div = element.shadowRoot.querySelector('div'); + expect(1).toBe(1); + }); +}); diff --git a/dlrs/main/lwc/rollupEditorError/rollupEditorError.css b/dlrs/main/lwc/rollupEditorError/rollupEditorError.css new file mode 100644 index 00000000..8b03e07a --- /dev/null +++ b/dlrs/main/lwc/rollupEditorError/rollupEditorError.css @@ -0,0 +1,3 @@ +div { + color: var(--lwc-colorTextError); +} diff --git a/dlrs/main/lwc/rollupEditorError/rollupEditorError.html b/dlrs/main/lwc/rollupEditorError/rollupEditorError.html new file mode 100644 index 00000000..9c0c2fc5 --- /dev/null +++ b/dlrs/main/lwc/rollupEditorError/rollupEditorError.html @@ -0,0 +1,5 @@ + diff --git a/dlrs/main/lwc/rollupEditorError/rollupEditorError.js b/dlrs/main/lwc/rollupEditorError/rollupEditorError.js new file mode 100644 index 00000000..adc71a92 --- /dev/null +++ b/dlrs/main/lwc/rollupEditorError/rollupEditorError.js @@ -0,0 +1,10 @@ +import { LightningElement, api } from "lwc"; + +export default class RollupEditorError extends LightningElement { + @api + errors; + + get hasErrors() { + return !!this.errors; + } +} diff --git a/dlrs/main/lwc/rollupEditorError/rollupEditorError.js-meta.xml b/dlrs/main/lwc/rollupEditorError/rollupEditorError.js-meta.xml new file mode 100644 index 00000000..353961ed --- /dev/null +++ b/dlrs/main/lwc/rollupEditorError/rollupEditorError.js-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + false + \ No newline at end of file diff --git a/dlrs/main/objects/DeclarativeLookupRollupSummaries__c/fields/DisableDLRSGlobally__c.field-meta.xml b/dlrs/main/objects/DeclarativeLookupRollupSummaries__c/fields/DisableDLRSGlobally__c.field-meta.xml new file mode 100644 index 00000000..cdb19433 --- /dev/null +++ b/dlrs/main/objects/DeclarativeLookupRollupSummaries__c/fields/DisableDLRSGlobally__c.field-meta.xml @@ -0,0 +1,11 @@ + + + DisableDLRSGlobally__c + false + Turns off all DLRS calculations + false + Disable DLRS calculations, useful for bulk loading or other large-scale actions + + false + Checkbox + diff --git a/dlrs/main/objects/DeclarativeLookupRollupSummaries__c/fields/DisableProblemEmails__c.field-meta.xml b/dlrs/main/objects/DeclarativeLookupRollupSummaries__c/fields/DisableProblemEmails__c.field-meta.xml new file mode 100644 index 00000000..1dcbad71 --- /dev/null +++ b/dlrs/main/objects/DeclarativeLookupRollupSummaries__c/fields/DisableProblemEmails__c.field-meta.xml @@ -0,0 +1,11 @@ + + + DisableProblemEmails__c + false + Stop DLRS from sending emails when unexpected problems occur during calculation + false + Disable calculation problem emails + + false + Checkbox + diff --git a/dlrs/main/objects/LookupRollupSummary2__mdt/fields/BypassPermissionApiName__c.field-meta.xml b/dlrs/main/objects/LookupRollupSummary2__mdt/fields/BypassPermissionApiName__c.field-meta.xml new file mode 100644 index 00000000..be4def99 --- /dev/null +++ b/dlrs/main/objects/LookupRollupSummary2__mdt/fields/BypassPermissionApiName__c.field-meta.xml @@ -0,0 +1,14 @@ + + + BypassPermissionApiName__c + false + false + DeveloperControlled + API name of a Custom Permission, if the running user has that permission then this rollup is skipped + + 255 + false + Text + false + diff --git a/dlrs/main/objects/UserNotification__e/UserNotification__e.object-meta.xml b/dlrs/main/objects/UserNotification__e/UserNotification__e.object-meta.xml new file mode 100644 index 00000000..683b901b --- /dev/null +++ b/dlrs/main/objects/UserNotification__e/UserNotification__e.object-meta.xml @@ -0,0 +1,9 @@ + + + Deployed + Channel to send updates to users from async actions + HighVolume + + User Notifications + PublishAfterCommit + diff --git a/dlrs/main/objects/UserNotification__e/fields/Payload__c.field-meta.xml b/dlrs/main/objects/UserNotification__e/fields/Payload__c.field-meta.xml new file mode 100644 index 00000000..f22df04d --- /dev/null +++ b/dlrs/main/objects/UserNotification__e/fields/Payload__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Payload__c + JSON Payload Body + false + false + false + false + + 32768 + LongTextArea + 3 + diff --git a/dlrs/main/objects/UserNotification__e/fields/Recipient__c.field-meta.xml b/dlrs/main/objects/UserNotification__e/fields/Recipient__c.field-meta.xml new file mode 100644 index 00000000..f0152e1a --- /dev/null +++ b/dlrs/main/objects/UserNotification__e/fields/Recipient__c.field-meta.xml @@ -0,0 +1,15 @@ + + + Recipient__c + $User.Id + Target User this event is intended to be received by + false + false + false + false + + 255 + true + Text + false + diff --git a/dlrs/main/objects/UserNotification__e/fields/Type__c.field-meta.xml b/dlrs/main/objects/UserNotification__e/fields/Type__c.field-meta.xml new file mode 100644 index 00000000..00d8fc4f --- /dev/null +++ b/dlrs/main/objects/UserNotification__e/fields/Type__c.field-meta.xml @@ -0,0 +1,15 @@ + + + Type__c + Categorical type, one of the following +DeploymentResult + false + false + false + false + + 255 + true + Text + false + diff --git a/dlrs/main/pages/RollupSummaryView.page-meta.xml b/dlrs/main/pages/RollupSummaryView.page-meta.xml index 487fdae3..402add6c 100644 --- a/dlrs/main/pages/RollupSummaryView.page-meta.xml +++ b/dlrs/main/pages/RollupSummaryView.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/managelookuprollupsummaries.page-meta.xml b/dlrs/main/pages/managelookuprollupsummaries.page-meta.xml index e834b9cd..7f322da4 100644 --- a/dlrs/main/pages/managelookuprollupsummaries.page-meta.xml +++ b/dlrs/main/pages/managelookuprollupsummaries.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/managelookuprollupsummaries_New.page-meta.xml b/dlrs/main/pages/managelookuprollupsummaries_New.page-meta.xml index c3f3c225..4151ac22 100644 --- a/dlrs/main/pages/managelookuprollupsummaries_New.page-meta.xml +++ b/dlrs/main/pages/managelookuprollupsummaries_New.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 true false diff --git a/dlrs/main/pages/managetrigger.page-meta.xml b/dlrs/main/pages/managetrigger.page-meta.xml index c69e6441..7d5c0113 100644 --- a/dlrs/main/pages/managetrigger.page-meta.xml +++ b/dlrs/main/pages/managetrigger.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/managetriggermdt.page-meta.xml b/dlrs/main/pages/managetriggermdt.page-meta.xml index 7386390e..c27ad5a8 100644 --- a/dlrs/main/pages/managetriggermdt.page-meta.xml +++ b/dlrs/main/pages/managetriggermdt.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupcalculate.page-meta.xml b/dlrs/main/pages/rollupcalculate.page-meta.xml index 3cc57ede..6d43898e 100644 --- a/dlrs/main/pages/rollupcalculate.page-meta.xml +++ b/dlrs/main/pages/rollupcalculate.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupcalculatemdt.page-meta.xml b/dlrs/main/pages/rollupcalculatemdt.page-meta.xml index 99e202b7..0d97c4af 100644 --- a/dlrs/main/pages/rollupcalculatemdt.page-meta.xml +++ b/dlrs/main/pages/rollupcalculatemdt.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupscheduledcalculate.page-meta.xml b/dlrs/main/pages/rollupscheduledcalculate.page-meta.xml index 88fba998..c13fbf14 100644 --- a/dlrs/main/pages/rollupscheduledcalculate.page-meta.xml +++ b/dlrs/main/pages/rollupscheduledcalculate.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupscheduledcalculatemdt.page-meta.xml b/dlrs/main/pages/rollupscheduledcalculatemdt.page-meta.xml index 8ffd5a32..b41dc16a 100644 --- a/dlrs/main/pages/rollupscheduledcalculatemdt.page-meta.xml +++ b/dlrs/main/pages/rollupscheduledcalculatemdt.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupsummaryenhanced.page-meta.xml b/dlrs/main/pages/rollupsummaryenhanced.page-meta.xml index 85885d66..cc0dffc8 100644 --- a/dlrs/main/pages/rollupsummaryenhanced.page-meta.xml +++ b/dlrs/main/pages/rollupsummaryenhanced.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupsummaryenhancednew.page-meta.xml b/dlrs/main/pages/rollupsummaryenhancednew.page-meta.xml index 2810a1f5..fe70d6a6 100644 --- a/dlrs/main/pages/rollupsummaryenhancednew.page-meta.xml +++ b/dlrs/main/pages/rollupsummaryenhancednew.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/rollupsummarylogdelete.page-meta.xml b/dlrs/main/pages/rollupsummarylogdelete.page-meta.xml index 4f287bc2..b308f3d0 100644 --- a/dlrs/main/pages/rollupsummarylogdelete.page-meta.xml +++ b/dlrs/main/pages/rollupsummarylogdelete.page-meta.xml @@ -1,6 +1,6 @@ - 60.0 + 62.0 false false diff --git a/dlrs/main/pages/welcome.page b/dlrs/main/pages/welcome.page index f30be1b8..0b93647f 100644 --- a/dlrs/main/pages/welcome.page +++ b/dlrs/main/pages/welcome.page @@ -2,7 +2,7 @@ tabStyle="LookupRollupSummary__c" standardStylesheets="true" lightningStylesheets="true" action="{!checkMetadataAPIConnection}"> + +``` + +#### CDN + +A simple way to load the library in a browser is by using the [unpkg](https://unpkg.com/) CDN, which is a +"fast, global content delivery network for everything on npm". To use it, include a script tag like this in your file: + +```html + +``` + +Using the "latest" tag will result in a 302 redirect to the latest version tag so it is recommended to use a specific version tag such as https://unpkg.com/cronstrue@1.48.0/dist/cronstrue.min.js to avoid this redirect. + +## Usage + +```js +cronstrue.toString("* * * * *"); +> "Every minute" + +cronstrue.toString("0 23 ? * MON-FRI"); +> "At 11:00 PM, Monday through Friday" + +cronstrue.toString("0 23 * * *", { verbose: true }); +> "At 11:00 PM, every day" + +cronstrue.toString("23 12 * * SUN#2"); +> "At 12:23 PM, on the second Sunday of the month" + +cronstrue.toString("23 14 * * SUN#2", { use24HourTimeFormat: true }); +> "At 14:23, on the second Sunday of the month" + +cronstrue.toString("* * * ? * 2-6/2", { dayOfWeekStartIndexZero: false }); +> "Every second, every 2 days of the week, Monday through Friday" + +cronstrue.toString("* * * 6-8 *", { monthStartIndexZero: true }); +> "Every minute, July through September" +``` + +For more usage examples, including a demonstration of how cRonstrue can handle some very complex cron expressions, you can [reference the unit tests](https://github.com/bradymholt/cRonstrue/blob/main/test/cronstrue.ts). + +### CLI Usage + +```sh +$ npm install -g cronstrue + +$ cronstrue 1 2 3 4 5 +At 02:01 AM, on day 3 of the month, and on Friday, only in April + +$ cronstrue 1 2 3 +Error: too few arguments (3): 1 2 3 +Usage (5 args): cronstrue minute hour day-of-month month day-of-week +or +Usage (6 args): cronstrue second minute hour day-of-month month day-of-week +or +Usage (7 args): cronstrue second minute hour day-of-month month day-of-week year +``` + +## Options + +An options object can be passed as the second parameter to `cronstrue.toString`. The following options are available: + +- **throwExceptionOnParseError: boolean** - If exception occurs when trying to parse expression and generate description, whether to throw or catch and output the Exception message as the description. (Default: true) +- **verbose: boolean** - Whether to use a verbose description (Default: false) +- **dayOfWeekStartIndexZero: boolean** - Whether to interpret cron expression DOW `1` as Sunday or Monday. (Default: true) +- **monthStartIndexZero: boolean** - Wether to interpret January as `0` or `1`. (Default: false) +- **use24HourTimeFormat: boolean** - If true, descriptions will use a [24-hour clock](https://en.wikipedia.org/wiki/24-hour_clock) (Default: false but some translations will default to true) +- **locale: string** - The locale to use (Default: "en") +- **tzOffset: number** - Your time offset (in hours) from UTC (Default: 0) + +## i18n + +To use the i18n support cRonstrue provides, you can either import all the supported locales at once (using `cronstrue/i18n`) or import individual locales (using `cronstrue/locales/[locale]`). Then, when calling `toString` you pass in the name of the locale you want to use. For example, for the es (Spanish) locale, you would use: `cronstrue.toString("* * * * *", { locale: "es" })`. + +### All Locales + +You can import all locales at once with `cronstrue/i18n`. This approach has the advantage of only having to load one module and having access to all supported locales. The tradeoff with this approach is a larger module (~130k, minified) that will take longer to load, particularly when sending down to a browser. + +```js +// Node / CommonJS +const cronstrue = require('cronstrue/i18n'); + +// ESM / webpack / TypeScript +import cronstrue from 'cronstrue/i18n'; + +// Browser + + +cronstrue.toString("*/5 * * * *", { locale: "fr" }); // => Toutes les 5 minutes +cronstrue.toString("*/5 * * * *", { locale: "es" }); // => Cada 5 minutos +``` + +### Individual Locales + +You can also load the main cronstrue module and then load individual locale modules you want to have access to. This works well when you have one or more locales you know you need access to and want to minimize load time, particularly when sending down to a browser. The main cronstrue module is about 42k (minified) and each locale is about 4k (minified) in size. + +```js +// Node / CommonJS +const cronstrue = require('cronstrue'); +require('cronstrue/locales/fr'); +require('cronstrue/locales/es'); + +// ESM / webpack / TypeScript +import cronstrue from 'cronstrue'; +import 'cronstrue/locales/fr'; +import 'cronstrue/locales/es'; + +// Browser + + + + +cronstrue.toString("*/5 * * * *", { locale: "fr" }); // => Toutes les 5 minutes +cronstrue.toString("*/5 * * * *", { locale: "es" }); // => Cada 5 minutos +``` + +## Frequently Asked Questions + +1. The cron expression I am passing in is not valid and this library is giving strange output. What should I do? + + This library does not do full validation of cron expressions and assumes the expression passed in is valid. If you need to validate an expression consider using a library like [cron-parser](https://www.npmjs.com/package/cron-parser). Example validation with cron-parser: + + ``` + const cronParser = require("cron-parser"); + const cronstrue = require("cronstrue"); + + const expression = "* * * * * *"; + + // Validate expression first + let isCronValid = true; + try { cronParser.parseExpression(expression) } catch(e) { isCronValid = false; } + + // If valid, then pass into cRonstrue + if (isCronValid) { + console.log(cronstrue.toString("* * * * *")); + } + ``` + +2. Can cRonstrue output the next occurrence of the cron expression? + + No, cRonstrue does not support this. This library simply describes a cron expression that is passed in. + +### Supported Locales + +The following locales can be passed in for the `locale` option. Thank you to the author (shown below) of each translation! + +- en - English ([Brady Holt](https://github.com/bradymholt)) +- af - Afrikaans (Michael van Niekerk(https://github.com/mvniekerk)) +- ar - Arabic ([Mohamed Nehad Shalabi](https://github.com/mohamednehad450)) +- be - Belarusian ([Kirill Mikulich](https://github.com/KirillMikulich)) +- bg - Bulgarian ([kamenf](https://github.com/kamenf)) +- ca - Catalan ([Francisco Javier Barrena](https://github.com/fjbarrena)) +- cs - Czech ([hanbar](https://github.com/hanbar)) +- es - Spanish ([Ivan Santos](https://github.com/ivansg)) +- da - Danish ([Rasmus Melchior Jacobsen](https://github.com/rmja)) +- de - German ([Michael Schuler](https://github.com/mschuler)) +- fi - Finnish ([Mikael Rosenberg](https://github.com/MR77FI)) +- fr - French ([Arnaud TAMAILLON](https://github.com/Greybird)) +- fa - Farsi ([A. Bahrami](https://github.com/alirezakoo)) +- he - Hebrew ([Ilan Firsov](https://github.com/IlanF)) +- hu - Hungarian ([Orcsity Norbert](https://github.com/Northber), Szabó Dániel) +- it - Italian ([rinaldihno](https://github.com/rinaldihno)) +- id - Indonesia ([Hasan Basri](https://github.com/hasanbasri1993)) +- ja - Japanese ([Alin Sarivan](https://github.com/asarivan)) +- ko - Korean ([Ion Mincu](https://github.com/ionmincu)) +- my - Malay (Malaysia) ([Ikhwan Abdullah](https://github.com/leychay)) +- nb - Norwegian ([Siarhei Khalipski](https://github.com/KhalipskiSiarhei)) +- nl - Dutch ([TotalMace](https://github.com/TotalMace)) +- pl - Polish ([foka](https://github.com/foka)) +- pt_BR - Portuguese (Brazil) ([Renato Lima](https://github.com/natenho)) +- pt_PT - Portuguese (Portugal) ([POFerro](https://github.com/POFerro)) +- ro - Romanian ([Illegitimis](https://github.com/illegitimis)) +- ru - Russian ([LbISS](https://github.com/LbISS)) +- sk - Slovakian ([hanbar](https://github.com/hanbar)) +- sl - Slovenian ([Jani Bevk](https://github.com/jenzy)) +- sw - Swahili ([Leylow Lujuo](https://github.com/leyluj)) +- sv - Swedish ([roobin](https://github.com/roobin)) +- th - Thai ([Teerapat Prommarak](https://github.com/xeusteerapat)) +- tr - Turkish ([Mustafa SADEDİL](https://github.com/sadedil)) +- uk - Ukrainian ([Taras](https://github.com/tbudurovych)) +- vi - Vietnamese ([Nguyen Tan Phap](https://github.com/rikkapro0128)) +- zh_CN - Chinese (Simplified) ([Star Peng](https://github.com/starpeng)) +- zh_TW - Chinese (Traditional) ([Ricky Chiang](https://github.com/metavige)) + +## Sponsors + +Thank you to the following sponsors of this project! + +robjtede +robjtede +robjtede +robjtede +robjtede + + +## License + +cRonstrue is freely distributable under the terms of the [MIT license](https://github.com/bradymholt/cronstrue/blob/main/LICENSE). diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/dist/cronstrue-i18n.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/dist/cronstrue-i18n.min.js new file mode 100644 index 00000000..c97835f3 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/dist/cronstrue-i18n.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("cronstrue",[],e):"object"==typeof exports?exports.cronstrue=e():t.cronstrue=e()}(globalThis,(()=>(()=>{"use strict";var t={794:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronParser=void 0;var o=n(586),r=function(){function t(t,e,n){void 0===e&&(e=!0),void 0===n&&(n=!1),this.expression=t,this.dayOfWeekStartIndexZero=e,this.monthStartIndexZero=n}return t.prototype.parse=function(){var t=this.extractParts(this.expression);return this.normalize(t),this.validate(t),t},t.prototype.extractParts=function(t){if(!this.expression)throw new Error("cron expression is empty");for(var e=t.trim().split(/[ ]+/),n=0;n7)throw new Error("Expression has ".concat(e.length," parts; too many!"));return e},t.prototype.normalize=function(t){var e=this;if(t[3]=t[3].replace("?","*"),t[5]=t[5].replace("?","*"),t[2]=t[2].replace("?","*"),0==t[0].indexOf("0/")&&(t[0]=t[0].replace("0/","*/")),0==t[1].indexOf("0/")&&(t[1]=t[1].replace("0/","*/")),0==t[2].indexOf("0/")&&(t[2]=t[2].replace("0/","*/")),0==t[3].indexOf("1/")&&(t[3]=t[3].replace("1/","*/")),0==t[4].indexOf("1/")&&(t[4]=t[4].replace("1/","*/")),0==t[6].indexOf("1/")&&(t[6]=t[6].replace("1/","*/")),t[5]=t[5].replace(/(^\d)|([^#/\s]\d)/g,(function(t){var n=t.replace(/\D/,""),o=n;return e.dayOfWeekStartIndexZero?"7"==n&&(o="0"):o=(parseInt(n)-1).toString(),t.replace(n,o)})),"L"==t[5]&&(t[5]="6"),"?"==t[3]&&(t[3]="*"),t[3].indexOf("W")>-1&&(t[3].indexOf(",")>-1||t[3].indexOf("-")>-1))throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");var n={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6};for(var o in n)t[5]=t[5].replace(new RegExp(o,"gi"),n[o].toString());t[4]=t[4].replace(/(^\d{1,2})|([^#/\s]\d{1,2})/g,(function(t){var n=t.replace(/\D/,""),o=n;return e.monthStartIndexZero&&(o=(parseInt(n)+1).toString()),t.replace(n,o)}));var r={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12};for(var u in r)t[4]=t[4].replace(new RegExp(u,"gi"),r[u].toString());"0"==t[0]&&(t[0]=""),/\*|\-|\,|\//.test(t[2])||!/\*|\//.test(t[1])&&!/\*|\//.test(t[0])||(t[2]+="-".concat(t[2]));for(var a=0;a-1&&!/^\*|\-|\,/.test(t[a])){var i=null;switch(a){case 4:i="12";break;case 5:i="6";break;case 6:i="9999";break;default:i=null}if(null!==i){var p=t[a].split("/");t[a]="".concat(p[0],"-").concat(i,"/").concat(p[1])}}},t.prototype.validate=function(t){this.assertNoInvalidCharacters("DOW",t[5]),this.assertNoInvalidCharacters("DOM",t[3]),this.validateRange(t)},t.prototype.validateRange=function(t){o.default.secondRange(t[0]),o.default.minuteRange(t[1]),o.default.hourRange(t[2]),o.default.dayOfMonthRange(t[3]),o.default.monthRange(t[4],this.monthStartIndexZero),o.default.dayOfWeekRange(t[5],this.dayOfWeekStartIndexZero)},t.prototype.assertNoInvalidCharacters=function(t,e){var n=e.match(/[A-KM-VX-Z]+/gi);if(n&&n.length)throw new Error("".concat(t," part contains invalid values: '").concat(n.toString(),"'"))},t}();e.CronParser=r},728:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ExpressionDescriptor=void 0;var o=n(910),r=n(794),u=function(){function t(e,n){if(this.expression=e,this.options=n,this.expressionParts=new Array(5),!this.options.locale&&t.defaultLocale&&(this.options.locale=t.defaultLocale),!t.locales[this.options.locale]){var o=Object.keys(t.locales)[0];console.warn("Locale '".concat(this.options.locale,"' could not be found; falling back to '").concat(o,"'.")),this.options.locale=o}this.i18n=t.locales[this.options.locale],void 0===n.use24HourTimeFormat&&(n.use24HourTimeFormat=this.i18n.use24HourTimeFormatByDefault())}return t.toString=function(e,n){var o=void 0===n?{}:n,r=o.throwExceptionOnParseError,u=void 0===r||r,a=o.verbose,i=void 0!==a&&a,p=o.dayOfWeekStartIndexZero,s=void 0===p||p,c=o.monthStartIndexZero,y=void 0!==c&&c,f=o.use24HourTimeFormat,m=o.locale,h=void 0===m?null:m,d=o.tzOffset;return new t(e,{throwExceptionOnParseError:u,verbose:i,dayOfWeekStartIndexZero:s,monthStartIndexZero:y,use24HourTimeFormat:f,locale:h,tzOffset:void 0===d?0:d}).getFullDescription()},t.initialize=function(e,n){void 0===n&&(n="en"),t.specialCharacters=["/","-",",","*"],t.defaultLocale=n,e.load(t.locales)},t.prototype.getFullDescription=function(){var t="";try{var e=new r.CronParser(this.expression,this.options.dayOfWeekStartIndexZero,this.options.monthStartIndexZero);this.expressionParts=e.parse();var n=this.getTimeOfDayDescription(),o=this.getDayOfMonthDescription(),u=this.getMonthDescription();t+=n+o+this.getDayOfWeekDescription()+u+this.getYearDescription(),t=(t=this.transformVerbosity(t,!!this.options.verbose)).charAt(0).toLocaleUpperCase()+t.substr(1)}catch(e){if(this.options.throwExceptionOnParseError)throw"".concat(e);t=this.i18n.anErrorOccuredWhenGeneratingTheExpressionD()}return t},t.prototype.getTimeOfDayDescription=function(){var e=this.expressionParts[0],n=this.expressionParts[1],r=this.expressionParts[2],u="";if(o.StringUtilities.containsAny(n,t.specialCharacters)||o.StringUtilities.containsAny(r,t.specialCharacters)||o.StringUtilities.containsAny(e,t.specialCharacters))if(e||!(n.indexOf("-")>-1)||n.indexOf(",")>-1||n.indexOf("/")>-1||o.StringUtilities.containsAny(r,t.specialCharacters))if(!e&&r.indexOf(",")>-1&&-1==r.indexOf("-")&&-1==r.indexOf("/")&&!o.StringUtilities.containsAny(n,t.specialCharacters)){var a=r.split(",");u+=this.i18n.at();for(var i=0;i1){var u=r[r.length-1].index;n=n.substring(0,u)+":59"+n.substring(u+3)}}return n},t.prototype.getDayOfWeekDescription=function(){var t=this,e=this.i18n.daysOfTheWeek();return"*"==this.expressionParts[5]?"":this.getSegmentDescription(this.expressionParts[5],this.i18n.commaEveryDay(),(function(n,o){var r=n;n.indexOf("#")>-1?r=n.substring(0,n.indexOf("#")):n.indexOf("L")>-1&&(r=r.replace("L",""));var u=parseInt(r);if(t.options.tzOffset){var a=t.expressionParts[2],i=parseInt(a)+(t.options.tzOffset?t.options.tzOffset:0);i>=24?u++:i<0&&u--,u>6?u=0:u<0&&(u=6)}var p=t.i18n.daysOfTheWeekInCase?t.i18n.daysOfTheWeekInCase(o)[u]:e[u];if(n.indexOf("#")>-1){var s=null,c=n.substring(n.indexOf("#")+1),y=n.substring(0,n.indexOf("#"));switch(c){case"1":s=t.i18n.first(y);break;case"2":s=t.i18n.second(y);break;case"3":s=t.i18n.third(y);break;case"4":s=t.i18n.fourth(y);break;case"5":s=t.i18n.fifth(y)}p=s+" "+p}return p}),(function(e){return 1==parseInt(e)?"":o.StringUtilities.format(t.i18n.commaEveryX0DaysOfTheWeek(e),e)}),(function(e){var n=e.substring(0,e.indexOf("-"));return"*"!=t.expressionParts[3]?t.i18n.commaAndX0ThroughX1(n):t.i18n.commaX0ThroughX1(n)}),(function(e){var n=null;if(e.indexOf("#")>-1){var o=e.substring(e.indexOf("#")+1);n=t.i18n.commaOnThe(o).trim()+t.i18n.spaceX0OfTheMonth()}else if(e.indexOf("L")>-1)n=t.i18n.commaOnTheLastX0OfTheMonth(e.replace("L",""));else{n="*"!=t.expressionParts[3]?t.i18n.commaAndOnX0():t.i18n.commaOnlyOnX0(e)}return n}))},t.prototype.getMonthDescription=function(){var t=this,e=this.i18n.monthsOfTheYear();return this.getSegmentDescription(this.expressionParts[4],"",(function(n,o){return o&&t.i18n.monthsOfTheYearInCase?t.i18n.monthsOfTheYearInCase(o)[parseInt(n)-1]:e[parseInt(n)-1]}),(function(e){return 1==parseInt(e)?"":o.StringUtilities.format(t.i18n.commaEveryX0Months(e),e)}),(function(e){return t.i18n.commaMonthX0ThroughMonthX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInMonthX0?t.i18n.commaOnlyInMonthX0():t.i18n.commaOnlyInX0()}))},t.prototype.getDayOfMonthDescription=function(){var t=this,e=null,n=this.expressionParts[3];switch(n){case"L":e=this.i18n.commaOnTheLastDayOfTheMonth();break;case"WL":case"LW":e=this.i18n.commaOnTheLastWeekdayOfTheMonth();break;default:var r=n.match(/(\d{1,2}W)|(W\d{1,2})/);if(r){var u=parseInt(r[0].replace("W","")),a=1==u?this.i18n.firstWeekday():o.StringUtilities.format(this.i18n.weekdayNearestDayX0(),u.toString());e=o.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(),a);break}var i=n.match(/L-(\d{1,2})/);if(i){var p=i[1];e=o.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(p),p);break}if("*"==n&&"*"!=this.expressionParts[5])return"";e=this.getSegmentDescription(n,this.i18n.commaEveryDay(),(function(e){return"L"==e?t.i18n.lastDay():t.i18n.dayX0?o.StringUtilities.format(t.i18n.dayX0(),e):e}),(function(e){return"1"==e?t.i18n.commaEveryDay():t.i18n.commaEveryX0Days(e)}),(function(e){return t.i18n.commaBetweenDayX0AndX1OfTheMonth(e)}),(function(e){return t.i18n.commaOnDayX0OfTheMonth(e)}))}return e},t.prototype.getYearDescription=function(){var t=this;return this.getSegmentDescription(this.expressionParts[6],"",(function(t){return/^\d+$/.test(t)?new Date(parseInt(t),1).getFullYear().toString():t}),(function(e){return o.StringUtilities.format(t.i18n.commaEveryX0Years(e),e)}),(function(e){return t.i18n.commaYearX0ThroughYearX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInYearX0?t.i18n.commaOnlyInYearX0():t.i18n.commaOnlyInX0()}))},t.prototype.getSegmentDescription=function(t,e,n,r,u,a){var i=null,p=t.indexOf("/")>-1,s=t.indexOf("-")>-1,c=t.indexOf(",")>-1;if(t)if("*"===t)i=e;else if(p||s||c)if(c){for(var y=t.split(","),f="",m=0;m0&&y.length>2&&(f+=",",m0&&y.length>1&&(m==y.length-1||2==y.length)&&(f+="".concat(this.i18n.spaceAnd()," ")),y[m].indexOf("/")>-1||y[m].indexOf("-")>-1){var h=y[m].indexOf("-")>-1&&-1==y[m].indexOf("/"),d=this.getSegmentDescription(y[m],e,n,r,h?this.i18n.commaX0ThroughX1:u,a);h&&(d=d.replace(", ","")),f+=d}else f+=p?this.getSegmentDescription(y[m],e,n,r,u,a):n(y[m]);i=p?f:o.StringUtilities.format(a(t),f)}else if(p){y=t.split("/");if(i=o.StringUtilities.format(r(y[1]),y[1]),y[0].indexOf("-")>-1){var X=this.generateRangeSegmentDescription(y[0],u,n);0!=X.indexOf(", ")&&(i+=", "),i+=X}else if(-1==y[0].indexOf("*")){var l=o.StringUtilities.format(a(y[0]),n(y[0]));l=l.replace(", ",""),i+=o.StringUtilities.format(this.i18n.commaStartingX0(),l)}}else s&&(i=this.generateRangeSegmentDescription(t,u,n));else i=o.StringUtilities.format(a(t),n(t));else i="";return i},t.prototype.generateRangeSegmentDescription=function(t,e,n){var r="",u=t.split("-"),a=n(u[0],1),i=n(u[1],2),p=e(t);return r+=o.StringUtilities.format(p,a,i)},t.prototype.formatTime=function(t,e,n){var o=0,r=0;this.options.tzOffset&&(o=this.options.tzOffset>0?Math.floor(this.options.tzOffset):Math.ceil(this.options.tzOffset),0!=(r=parseFloat((this.options.tzOffset%1).toFixed(2)))&&(r*=60));var u=parseInt(t)+o,a=parseInt(e)+r;a>=60?(a-=60,u+=1):a<0&&(a+=60,u-=1),u>=24?u-=24:u<0&&(u=24+u);var i="",p=!1;this.options.use24HourTimeFormat||(i=(p=!(!this.i18n.setPeriodBeforeTime||!this.i18n.setPeriodBeforeTime()))?"".concat(this.getPeriod(u)," "):" ".concat(this.getPeriod(u)),u>12&&(u-=12),0===u&&(u=12));var s="";return n&&(s=":".concat(("00"+n).substring(n.length))),"".concat(p?i:"").concat(("00"+u.toString()).substring(u.toString().length),":").concat(("00"+a.toString()).substring(a.toString().length)).concat(s).concat(p?"":i)},t.prototype.transformVerbosity=function(t,e){return e||(t=(t=(t=(t=t.replace(new RegExp(", ".concat(this.i18n.everyMinute()),"g"),"")).replace(new RegExp(", ".concat(this.i18n.everyHour()),"g"),"")).replace(new RegExp(this.i18n.commaEveryDay(),"g"),"")).replace(/\, ?$/,"")),t},t.prototype.getPeriod=function(t){return t>=12?this.i18n.pm&&this.i18n.pm()||"PM":this.i18n.am&&this.i18n.am()||"AM"},t.locales={},t}();e.ExpressionDescriptor=u},980:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bg=e.my=e.vi=e.ar=e.th=e.af=e.hu=e.be=e.ca=e.fa=e.sw=e.sl=e.fi=e.sk=e.cs=e.he=e.ja=e.zh_TW=e.zh_CN=e.uk=e.tr=e.ru=e.ro=e.pt_PT=e.pt_BR=e.pl=e.sv=e.nb=e.nl=e.ko=e.id=e.it=e.fr=e.es=e.de=e.da=e.en=void 0;var o=n(751);Object.defineProperty(e,"en",{enumerable:!0,get:function(){return o.en}});var r=n(904);Object.defineProperty(e,"da",{enumerable:!0,get:function(){return r.da}});var u=n(511);Object.defineProperty(e,"de",{enumerable:!0,get:function(){return u.de}});var a=n(470);Object.defineProperty(e,"es",{enumerable:!0,get:function(){return a.es}});var i=n(953);Object.defineProperty(e,"fr",{enumerable:!0,get:function(){return i.fr}});var p=n(128);Object.defineProperty(e,"it",{enumerable:!0,get:function(){return p.it}});var s=n(258);Object.defineProperty(e,"id",{enumerable:!0,get:function(){return s.id}});var c=n(305);Object.defineProperty(e,"ko",{enumerable:!0,get:function(){return c.ko}});var y=n(771);Object.defineProperty(e,"nl",{enumerable:!0,get:function(){return y.nl}});var f=n(869);Object.defineProperty(e,"nb",{enumerable:!0,get:function(){return f.nb}});var m=n(673);Object.defineProperty(e,"sv",{enumerable:!0,get:function(){return m.sv}});var h=n(665);Object.defineProperty(e,"pl",{enumerable:!0,get:function(){return h.pl}});var d=n(461);Object.defineProperty(e,"pt_BR",{enumerable:!0,get:function(){return d.pt_BR}});var X=n(713);Object.defineProperty(e,"pt_PT",{enumerable:!0,get:function(){return X.pt_PT}});var l=n(408);Object.defineProperty(e,"ro",{enumerable:!0,get:function(){return l.ro}});var T=n(392);Object.defineProperty(e,"ru",{enumerable:!0,get:function(){return T.ru}});var v=n(999);Object.defineProperty(e,"tr",{enumerable:!0,get:function(){return v.tr}});var O=n(716);Object.defineProperty(e,"uk",{enumerable:!0,get:function(){return O.uk}});var g=n(419);Object.defineProperty(e,"zh_CN",{enumerable:!0,get:function(){return g.zh_CN}});var M=n(139);Object.defineProperty(e,"zh_TW",{enumerable:!0,get:function(){return M.zh_TW}});var k=n(949);Object.defineProperty(e,"ja",{enumerable:!0,get:function(){return k.ja}});var D=n(389);Object.defineProperty(e,"he",{enumerable:!0,get:function(){return D.he}});var b=n(674);Object.defineProperty(e,"cs",{enumerable:!0,get:function(){return b.cs}});var P=n(203);Object.defineProperty(e,"sk",{enumerable:!0,get:function(){return P.sk}});var S=n(578);Object.defineProperty(e,"fi",{enumerable:!0,get:function(){return S.fi}});var E=n(738);Object.defineProperty(e,"sl",{enumerable:!0,get:function(){return E.sl}});var A=n(286);Object.defineProperty(e,"sw",{enumerable:!0,get:function(){return A.sw}});var w=n(384);Object.defineProperty(e,"fa",{enumerable:!0,get:function(){return w.fa}});var H=n(708);Object.defineProperty(e,"ca",{enumerable:!0,get:function(){return H.ca}});var j=n(445);Object.defineProperty(e,"be",{enumerable:!0,get:function(){return j.be}});var W=n(560);Object.defineProperty(e,"hu",{enumerable:!0,get:function(){return W.hu}});var L=n(675);Object.defineProperty(e,"af",{enumerable:!0,get:function(){return L.af}});var x=n(312);Object.defineProperty(e,"th",{enumerable:!0,get:function(){return x.th}});var B=n(935);Object.defineProperty(e,"ar",{enumerable:!0,get:function(){return B.ar}});var Y=n(533);Object.defineProperty(e,"vi",{enumerable:!0,get:function(){return Y.vi}});var z=n(863);Object.defineProperty(e,"my",{enumerable:!0,get:function(){return z.my}});var G=n(431);Object.defineProperty(e,"bg",{enumerable:!0,get:function(){return G.bg}})},282:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.allLocalesLoader=void 0;var o=n(980),r=function(){function t(){}return t.prototype.load=function(t){for(var e in o)o.hasOwnProperty(e)&&(t[e]=new o[e])},t}();e.allLocalesLoader=r},675:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.af=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return", jaar %s na %s"},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Daar was 'n fout om die tydsuitdrukking the genereer. Raadpleeg asb die uitdrukking formaat."},t.prototype.everyMinute=function(){return"elke minuut"},t.prototype.everyHour=function(){return"elke uur"},t.prototype.atSpace=function(){return"Teen "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Elke minuut tussen %s en %s"},t.prototype.at=function(){return"Teen"},t.prototype.spaceAnd=function(){return" en"},t.prototype.everySecond=function(){return"elke sekonde"},t.prototype.everyX0Seconds=function(){return"elke %s sekonde"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekonde %s deur na %s na die minuut"},t.prototype.atX0SecondsPastTheMinute=function(){return"teen %s sekondes na die minuut"},t.prototype.everyX0Minutes=function(){return"elke %s minute"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minute %s deur na %s na die uur"},t.prototype.atX0MinutesPastTheHour=function(){return"teen %s minute na die uur"},t.prototype.everyX0Hours=function(){return"elke %s ure"},t.prototype.betweenX0AndX1=function(){return"tussen %s en %s"},t.prototype.atX0=function(){return"teen %s"},t.prototype.commaEveryDay=function(){return", elke dag"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", elke %s dae van die week"},t.prototype.commaX0ThroughX1=function(){return", %s deur na %s"},t.prototype.commaAndX0ThroughX1=function(){return", en %s deur na %s"},t.prototype.first=function(){return"eerste"},t.prototype.second=function(){return"tweede"},t.prototype.third=function(){return"derde"},t.prototype.fourth=function(){return"vierde"},t.prototype.fifth=function(){return"vyfde"},t.prototype.commaOnThe=function(){return", op die "},t.prototype.spaceX0OfTheMonth=function(){return" %s van die maand"},t.prototype.lastDay=function(){return"die laaste dag"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", op die laaste %s van die maand"},t.prototype.commaOnlyOnX0=function(){return", net op %s"},t.prototype.commaAndOnX0=function(){return", en op %s"},t.prototype.commaEveryX0Months=function(){return", elke %s maande"},t.prototype.commaOnlyInX0=function(){return", net in %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", op die laaste dag van die maand"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", op die laaste weeksdag van die maand"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dae voor die laaste dag van die maand"},t.prototype.firstWeekday=function(){return"eerste weeksdag"},t.prototype.weekdayNearestDayX0=function(){return"weeksdag naaste aan dag %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", op die %s van die maande"},t.prototype.commaEveryX0Days=function(){return", elke %s dae"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", tussen dag %s en %s van die maand"},t.prototype.commaOnDayX0OfTheMonth=function(){return", op dag %s van die maand"},t.prototype.commaEveryHour=function(){return", elke uur"},t.prototype.commaEveryX0Years=function(){return", elke %s jare"},t.prototype.commaStartingX0=function(){return", beginnende %s"},t.prototype.daysOfTheWeek=function(){return["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"]},t.prototype.monthsOfTheYear=function(){return["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"]},t}();e.af=n},935:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ar=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"حدث خطأ في إنشاء وصف المصطلح٠ تأكد من تركيب مصطلح الكرون"},t.prototype.everyMinute=function(){return"كل دقيقة"},t.prototype.everyHour=function(){return"كل ساعة"},t.prototype.atSpace=function(){return" "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"كل دقيقة بين %s و %s"},t.prototype.at=function(){return""},t.prototype.spaceAnd=function(){return" و"},t.prototype.everySecond=function(){return"كل ثانية"},t.prototype.everyX0Seconds=function(){return"كل %s ثواني"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"الثواني %s حتى %s من بداية الدقيقة"},t.prototype.atX0SecondsPastTheMinute=function(){return"الثانية %s من بداية الدقيقة"},t.prototype.everyX0Minutes=function(){return"كل %s دقائق"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"الدقائق %s حتى %s من بداية الساعة"},t.prototype.atX0MinutesPastTheHour=function(){return"الدقيقة %s من بداية الساعة"},t.prototype.everyX0Hours=function(){return"كل %s ساعات"},t.prototype.betweenX0AndX1=function(){return"بين %s و %s"},t.prototype.atX0=function(){return"%s"},t.prototype.commaEveryDay=function(){return"، كل يوم"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return"، كل %s من أيام الأسبوع"},t.prototype.commaX0ThroughX1=function(){return"، %s حتى %s"},t.prototype.commaAndX0ThroughX1=function(){return"، و %s حتى %s"},t.prototype.first=function(){return"أول"},t.prototype.second=function(){return"ثاني"},t.prototype.third=function(){return"ثالث"},t.prototype.fourth=function(){return"رابع"},t.prototype.fifth=function(){return"خامس"},t.prototype.commaOnThe=function(){return"، في ال"},t.prototype.spaceX0OfTheMonth=function(){return" %s من الشهر"},t.prototype.lastDay=function(){return"اليوم الأخير"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return"، في اخر %s من الشهر"},t.prototype.commaOnlyOnX0=function(){return"، %s فقط"},t.prototype.commaAndOnX0=function(){return"، وفي %s"},t.prototype.commaEveryX0Months=function(){return"، كل %s أشهر"},t.prototype.commaOnlyInX0=function(){return"، %s فقط"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return"، في اخر يوم من الشهر"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return"، في اخر يوم أسبوع من الشهر"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return"، %s أيام قبل اخر يوم من الشهر"},t.prototype.firstWeekday=function(){return"اول ايام الأسبوع"},t.prototype.weekdayNearestDayX0=function(){return"يوم الأسبوع الأقرب ليوم %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return"، في %s من الشهر"},t.prototype.commaEveryX0Days=function(){return"، كل %s أيام"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return"، بين يوم %s و %s من الشهر"},t.prototype.commaOnDayX0OfTheMonth=function(){return"، في اليوم %s من الشهر"},t.prototype.commaEveryHour=function(){return"، كل ساعة"},t.prototype.commaEveryX0Years=function(){return"، كل %s سنوات"},t.prototype.commaStartingX0=function(){return"، بداية من %s"},t.prototype.daysOfTheWeek=function(){return["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},t.prototype.monthsOfTheYear=function(){return["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},t}();e.ar=n},445:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.be=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.everyMinute=function(){return"кожную хвіліну"},t.prototype.everyHour=function(){return"кожную гадзіну"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Адбылася памылка падчас генерацыі апісання выразы. Праверце сінтаксіс крон-выразы."},t.prototype.atSpace=function(){return"У "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Кожную хвіліну з %s да %s"},t.prototype.at=function(){return"У"},t.prototype.spaceAnd=function(){return" і"},t.prototype.everySecond=function(){return"кожную секунду"},t.prototype.everyX0Seconds=function(){return"кожныя %s секунд"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"секунды з %s па %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"у %s секунд"},t.prototype.everyX0Minutes=function(){return"кожныя %s хвілін"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"хвіліны з %s па %s"},t.prototype.atX0MinutesPastTheHour=function(){return"у %s хвілін"},t.prototype.everyX0Hours=function(){return"кожныя %s гадзін"},t.prototype.betweenX0AndX1=function(){return"з %s па %s"},t.prototype.atX0=function(){return"у %s"},t.prototype.commaEveryDay=function(){return", кожны дзень"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", кожныя %s дзён тыдня"},t.prototype.commaX0ThroughX1=function(){return", %s па %s"},t.prototype.commaAndX0ThroughX1=function(){return", і %s па %s"},t.prototype.first=function(){return"першы"},t.prototype.second=function(){return"другі"},t.prototype.third=function(){return"трэці"},t.prototype.fourth=function(){return"чацвёрты"},t.prototype.fifth=function(){return"пяты"},t.prototype.commaOnThe=function(){return", у "},t.prototype.spaceX0OfTheMonth=function(){return" %s месяца"},t.prototype.lastDay=function(){return"апошні дзень"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", у апошні %s месяца"},t.prototype.commaOnlyOnX0=function(){return", толькі ў %s"},t.prototype.commaAndOnX0=function(){return", і ў %s"},t.prototype.commaEveryX0Months=function(){return", кожныя %s месяцаў"},t.prototype.commaOnlyInX0=function(){return", толькі ў %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", у апошні дзень месяца"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", у апошні будні дзень месяца"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s дзён да апошняга дня месяца"},t.prototype.firstWeekday=function(){return"першы будны дзень"},t.prototype.weekdayNearestDayX0=function(){return"найбліжэйшы будны дзень да %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", у %s месяцы"},t.prototype.commaEveryX0Days=function(){return", кожныя %s дзён"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", з %s па %s лік месяца"},t.prototype.commaOnDayX0OfTheMonth=function(){return", у %s лік месяца"},t.prototype.commaEveryX0Years=function(){return", кожныя %s гадоў"},t.prototype.commaStartingX0=function(){return", пачатак %s"},t.prototype.daysOfTheWeek=function(){return["нядзеля","панядзелак","аўторак","серада","чацвер","пятніца","субота"]},t.prototype.monthsOfTheYear=function(){return["студзень","люты","сакавік","красавік","травень","чэрвень","ліпень","жнівень","верасень","кастрычнік","лістапад","снежань"]},t}();e.be=n},431:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bg=void 0;var n=function(t,e){return(null!=t?Number(t):0)<2?e[0]:e[1]},o=function(t,e){return e[[1,0,0,1,0,0,1][null!=t?Number(t):0]]},r=function(t,e){var n=null!=t?Number(t):1;n=Math.max(Math.min(n<10||n>20&&n%10!=0?n%10:3,3),1)-1;var o=["м","ж","ср"].indexOf(e);return["в","р","т"][n]+["и","а","о"][o]},u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"всяка минута"},t.prototype.everyHour=function(){return"всеки час"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Възникна грешка при генериране на описанието на израза. Проверете синтаксиса на cron израза."},t.prototype.atSpace=function(){return"В "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Всяка минута от %s до %s"},t.prototype.at=function(){return"В"},t.prototype.spaceAnd=function(){return" и"},t.prototype.everySecond=function(){return"всяка секунда"},t.prototype.everyX0Seconds=function(t){return"всеки %s секунди"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"секунди от %s до %s"},t.prototype.atX0SecondsPastTheMinute=function(t){return"%s-".concat(r(t,"ж")," секунда")},t.prototype.everyX0Minutes=function(t){return"всеки %s минути"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"минути от %s до %s"},t.prototype.atX0MinutesPastTheHour=function(t){return"%s-".concat(r(t,"ж")," минутa")},t.prototype.everyX0Hours=function(t){return"всеки %s часа"},t.prototype.betweenX0AndX1=function(){return"от %s до %s"},t.prototype.atX0=function(){return"в %s"},t.prototype.commaEveryDay=function(){return", всеки ден"},t.prototype.commaEveryX0DaysOfTheWeek=function(t){return n(t,[", всеки %s ден от седмицата",", всеки %s дена от седмицата"])},t.prototype.commaX0ThroughX1=function(t){return", от %s до %s"},t.prototype.commaAndX0ThroughX1=function(t){return" и от %s до %s"},t.prototype.first=function(t){return o(t,["первият","первата"])},t.prototype.second=function(t){return o(t,["вторият","втората"])},t.prototype.third=function(t){return o(t,["третият","третата"])},t.prototype.fourth=function(t){return o(t,["четвертият","четвертата"])},t.prototype.fifth=function(t){return o(t,["петият","петата"])},t.prototype.commaOnThe=function(t){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s на месеца"},t.prototype.lastDay=function(){return"последният ден"},t.prototype.commaOnTheLastX0OfTheMonth=function(t){return o(t,[", в последният %s от месеца",", в последната %s отмесеца"])},t.prototype.commaOnlyOnX0=function(t){return", %s"},t.prototype.commaAndOnX0=function(){return" и %s"},t.prototype.commaEveryX0Months=function(t){return" всеки %s месеца"},t.prototype.commaOnlyInMonthX0=function(){return", %s"},t.prototype.commaOnlyInX0=function(){return", в %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", в последният ден на месеца"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", в последния делничен ден от месеца"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(t){return n(t,[", %s ден преди края на месеца",", %s дена преди края на месеца"])},t.prototype.firstWeekday=function(){return"първият делничен ден"},t.prototype.weekdayNearestDayX0=function(){return"най-близкият делничен ден до %s число"},t.prototype.commaOnTheX0OfTheMonth=function(){return", на %s число от месеца"},t.prototype.commaEveryX0Days=function(t){return n(t,[", всеки %s ден",", всеки %s дена"])},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(t){var e,n=null!==(e=null==t?void 0:t.split("-"))&&void 0!==e?e:[];return", от %s-".concat(r(n[0],"ср")," до %s-").concat(r(n[1],"ср")," число на месеца")},t.prototype.commaOnDayX0OfTheMonth=function(t){return", на %s-".concat(r(t,"ср")," число от месеца")},t.prototype.commaEveryX0Years=function(t){return n(t,[", всяка %s година",", всеки %s години"])},t.prototype.commaStartingX0=function(){return", започвайки %s"},t.prototype.daysOfTheWeek=function(){return["неделя","понеделник","вторник","сряда","четвъртък","петък","събота"]},t.prototype.monthsOfTheYear=function(){return["януари","февруари","март","април","май","юни","юли","август","септевмври","октомври","ноември","декември"]},t}();e.bg=u},708:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ca=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"S'ha produït un error mentres es generava la descripció de l'expressió. Revisi la sintaxi de la expressió de cron."},t.prototype.at=function(){return"A les"},t.prototype.atSpace=function(){return"A les "},t.prototype.atX0=function(){return"a les %s"},t.prototype.atX0MinutesPastTheHour=function(){return"als %s minuts de l'hora"},t.prototype.atX0SecondsPastTheMinute=function(){return"als %s segonds del minut"},t.prototype.betweenX0AndX1=function(){return"entre les %s i les %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre els dies %s i %s del mes"},t.prototype.commaEveryDay=function(){return", cada dia"},t.prototype.commaEveryX0Days=function(){return", cada %s dies"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", cada %s dies de la setmana"},t.prototype.commaEveryX0Months=function(){return", cada %s mesos"},t.prototype.commaOnDayX0OfTheMonth=function(){return", el dia %s del mes"},t.prototype.commaOnlyInX0=function(){return", sólo en %s"},t.prototype.commaOnlyOnX0=function(){return", només el %s"},t.prototype.commaAndOnX0=function(){return", i el %s"},t.prototype.commaOnThe=function(){return", en el "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", en l'últim dia del mes"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", en l'últim dia de la setmana del mes"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dies abans de l'últim dia del mes"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", en l'últim %s del mes"},t.prototype.commaOnTheX0OfTheMonth=function(){return", en el %s del mes"},t.prototype.commaX0ThroughX1=function(){return", de %s a %s"},t.prototype.commaAndX0ThroughX1=function(){return", i de %s a %s"},t.prototype.everyHour=function(){return"cada hora"},t.prototype.everyMinute=function(){return"cada minut"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"cada minut entre les %s i les %s"},t.prototype.everySecond=function(){return"cada segon"},t.prototype.everyX0Hours=function(){return"cada %s hores"},t.prototype.everyX0Minutes=function(){return"cada %s minuts"},t.prototype.everyX0Seconds=function(){return"cada %s segons"},t.prototype.fifth=function(){return"cinquè"},t.prototype.first=function(){return"primer"},t.prototype.firstWeekday=function(){return"primer dia de la setmana"},t.prototype.fourth=function(){return"quart"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"del minut %s al %s passada l'hora"},t.prototype.second=function(){return"segon"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"En els segons %s al %s de cada minut"},t.prototype.spaceAnd=function(){return" i"},t.prototype.spaceX0OfTheMonth=function(){return" %s del mes"},t.prototype.lastDay=function(){return"l'últim dia"},t.prototype.third=function(){return"tercer"},t.prototype.weekdayNearestDayX0=function(){return"dia de la setmana més proper al %s"},t.prototype.commaEveryX0Years=function(){return", cada %s anys"},t.prototype.commaStartingX0=function(){return", començant %s"},t.prototype.daysOfTheWeek=function(){return["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"]},t.prototype.monthsOfTheYear=function(){return["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"]},t}();e.ca=n},674:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.cs=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Při vytváření popisu došlo k chybě. Zkontrolujte prosím správnost syntaxe cronu."},t.prototype.everyMinute=function(){return"každou minutu"},t.prototype.everyHour=function(){return"každou hodinu"},t.prototype.atSpace=function(){return"V "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Každou minutu mezi %s a %s"},t.prototype.at=function(){return"V"},t.prototype.spaceAnd=function(){return" a"},t.prototype.everySecond=function(){return"každou sekundu"},t.prototype.everyX0Seconds=function(){return"každých %s sekund"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundy od %s do %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"v %s sekund"},t.prototype.everyX0Minutes=function(){return"každých %s minut"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuty od %s do %s"},t.prototype.atX0MinutesPastTheHour=function(){return"v %s minut"},t.prototype.everyX0Hours=function(){return"každých %s hodin"},t.prototype.betweenX0AndX1=function(){return"mezi %s a %s"},t.prototype.atX0=function(){return"v %s"},t.prototype.commaEveryDay=function(){return", každý den"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", každých %s dní v týdnu"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", a od %s do %s"},t.prototype.first=function(){return"první"},t.prototype.second=function(){return"druhý"},t.prototype.third=function(){return"třetí"},t.prototype.fourth=function(){return"čtvrtý"},t.prototype.fifth=function(){return"pátý"},t.prototype.commaOnThe=function(){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s v měsíci"},t.prototype.lastDay=function(){return"poslední den"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", poslední %s v měsíci"},t.prototype.commaOnlyOnX0=function(){return", pouze v %s"},t.prototype.commaAndOnX0=function(){return", a v %s"},t.prototype.commaEveryX0Months=function(){return", každých %s měsíců"},t.prototype.commaOnlyInX0=function(){return", pouze v %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", poslední den v měsíci"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", poslední pracovní den v měsíci"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dní před posledním dnem v měsíci"},t.prototype.firstWeekday=function(){return"první pracovní den"},t.prototype.weekdayNearestDayX0=function(){return"pracovní den nejblíže %s. dni"},t.prototype.commaOnTheX0OfTheMonth=function(){return", v %s v měsíci"},t.prototype.commaEveryX0Days=function(){return", každých %s dnů"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mezi dny %s a %s v měsíci"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s. den v měsíci"},t.prototype.commaEveryX0Years=function(){return", každých %s roků"},t.prototype.commaStartingX0=function(){return", začínající %s"},t.prototype.daysOfTheWeek=function(){return["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"]},t.prototype.monthsOfTheYear=function(){return["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"]},t}();e.cs=n},904:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.da=void 0;var n=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Der opstod en fejl ved generering af udtryksbeskrivelsen. Tjek cron-ekspressionssyntaxen."},t.prototype.at=function(){return"kl"},t.prototype.atSpace=function(){return"kl "},t.prototype.atX0=function(){return"kl %s"},t.prototype.atX0MinutesPastTheHour=function(){return"%s minutter efter timeskift"},t.prototype.atX0SecondsPastTheMinute=function(){return"%s sekunder efter minutskift"},t.prototype.betweenX0AndX1=function(){return"mellem %s og %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mellem dag %s og %s i måneden"},t.prototype.commaEveryDay=function(){return", hver dag"},t.prototype.commaEveryX0Days=function(){return", hver %s. dag"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", hver %s. ugedag"},t.prototype.commaEveryX0Months=function(){return", hver %s. måned"},t.prototype.commaEveryX0Years=function(){return", hvert %s. år"},t.prototype.commaOnDayX0OfTheMonth=function(){return", på dag %s i måneden"},t.prototype.commaOnlyInX0=function(){return", kun i %s"},t.prototype.commaOnlyOnX0=function(){return", kun på %s"},t.prototype.commaAndOnX0=function(){return", og på %s"},t.prototype.commaOnThe=function(){return", på den "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", på den sidste dag i måneden"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", på den sidste hverdag i måneden"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dage før den sidste dag i måneden"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", på den sidste %s i måneden"},t.prototype.commaOnTheX0OfTheMonth=function(){return", på den %s i måneden"},t.prototype.commaX0ThroughX1=function(){return", %s til og med %s"},t.prototype.commaAndX0ThroughX1=function(){return", og %s til og med %s"},t.prototype.everyHour=function(){return"hver time"},t.prototype.everyMinute=function(){return"hvert minut"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"hvert minut mellem %s og %s"},t.prototype.everySecond=function(){return"hvert sekund"},t.prototype.everyX0Hours=function(){return"hver %s. time"},t.prototype.everyX0Minutes=function(){return"hvert %s. minut"},t.prototype.everyX0Seconds=function(){return"hvert %s. sekund"},t.prototype.fifth=function(){return"femte"},t.prototype.first=function(){return"første"},t.prototype.firstWeekday=function(){return"første hverdag"},t.prototype.fourth=function(){return"fjerde"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutterne fra %s til og med %s hver time"},t.prototype.second=function(){return"anden"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunderne fra %s til og med %s hvert minut"},t.prototype.spaceAnd=function(){return" og"},t.prototype.spaceX0OfTheMonth=function(){return" %s i måneden"},t.prototype.lastDay=function(){return"sidste dag"},t.prototype.third=function(){return"tredje"},t.prototype.weekdayNearestDayX0=function(){return"hverdag nærmest dag %s"},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.commaStartingX0=function(){return", startende %s"},t.prototype.daysOfTheWeek=function(){return["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},t.prototype.monthsOfTheYear=function(){return["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"]},t}();e.da=n},511:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.de=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"jede Minute"},t.prototype.everyHour=function(){return"jede Stunde"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Beim Generieren der Ausdrucksbeschreibung ist ein Fehler aufgetreten. Überprüfen Sie die Syntax des Cron-Ausdrucks."},t.prototype.atSpace=function(){return"Um "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Jede Minute zwischen %s und %s"},t.prototype.at=function(){return"Um"},t.prototype.spaceAnd=function(){return" und"},t.prototype.everySecond=function(){return"Jede Sekunde"},t.prototype.everyX0Seconds=function(){return"alle %s Sekunden"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"Sekunden %s bis %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"bei Sekunde %s"},t.prototype.everyX0Minutes=function(){return"alle %s Minuten"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"Minuten %s bis %s"},t.prototype.atX0MinutesPastTheHour=function(){return"bei Minute %s"},t.prototype.everyX0Hours=function(){return"alle %s Stunden"},t.prototype.betweenX0AndX1=function(){return"zwischen %s und %s"},t.prototype.atX0=function(){return"um %s"},t.prototype.commaEveryDay=function(){return", jeden Tag"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", alle %s Tage der Woche"},t.prototype.commaX0ThroughX1=function(){return", %s bis %s"},t.prototype.commaAndX0ThroughX1=function(){return", und %s bis %s"},t.prototype.first=function(){return"ersten"},t.prototype.second=function(){return"zweiten"},t.prototype.third=function(){return"dritten"},t.prototype.fourth=function(){return"vierten"},t.prototype.fifth=function(){return"fünften"},t.prototype.commaOnThe=function(){return", am "},t.prototype.spaceX0OfTheMonth=function(){return" %s des Monats"},t.prototype.lastDay=function(){return"der letzte Tag"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", am letzten %s des Monats"},t.prototype.commaOnlyOnX0=function(){return", nur jeden %s"},t.prototype.commaAndOnX0=function(){return", und jeden %s"},t.prototype.commaEveryX0Months=function(){return", alle %s Monate"},t.prototype.commaOnlyInX0=function(){return", nur im %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", am letzten Tag des Monats"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", am letzten Werktag des Monats"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s tage vor dem letzten Tag des Monats"},t.prototype.firstWeekday=function(){return"ersten Werktag"},t.prototype.weekdayNearestDayX0=function(){return"Werktag am nächsten zum %s Tag"},t.prototype.commaOnTheX0OfTheMonth=function(){return", am %s des Monats"},t.prototype.commaEveryX0Days=function(){return", alle %s Tage"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", zwischen Tag %s und %s des Monats"},t.prototype.commaOnDayX0OfTheMonth=function(){return", an Tag %s des Monats"},t.prototype.commaEveryX0Years=function(){return", alle %s Jahre"},t.prototype.commaStartingX0=function(){return", beginnend %s"},t.prototype.daysOfTheWeek=function(){return["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},t.prototype.monthsOfTheYear=function(){return["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},t}();e.de=n},751:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.en=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"An error occured when generating the expression description. Check the cron expression syntax."},t.prototype.everyMinute=function(){return"every minute"},t.prototype.everyHour=function(){return"every hour"},t.prototype.atSpace=function(){return"At "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Every minute between %s and %s"},t.prototype.at=function(){return"At"},t.prototype.spaceAnd=function(){return" and"},t.prototype.everySecond=function(){return"every second"},t.prototype.everyX0Seconds=function(){return"every %s seconds"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconds %s through %s past the minute"},t.prototype.atX0SecondsPastTheMinute=function(){return"at %s seconds past the minute"},t.prototype.everyX0Minutes=function(){return"every %s minutes"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},t.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},t.prototype.everyX0Hours=function(){return"every %s hours"},t.prototype.betweenX0AndX1=function(){return"between %s and %s"},t.prototype.atX0=function(){return"at %s"},t.prototype.commaEveryDay=function(){return", every day"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", every %s days of the week"},t.prototype.commaX0ThroughX1=function(){return", %s through %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s through %s"},t.prototype.first=function(){return"first"},t.prototype.second=function(){return"second"},t.prototype.third=function(){return"third"},t.prototype.fourth=function(){return"fourth"},t.prototype.fifth=function(){return"fifth"},t.prototype.commaOnThe=function(){return", on the "},t.prototype.spaceX0OfTheMonth=function(){return" %s of the month"},t.prototype.lastDay=function(){return"the last day"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", on the last %s of the month"},t.prototype.commaOnlyOnX0=function(){return", only on %s"},t.prototype.commaAndOnX0=function(){return", and on %s"},t.prototype.commaEveryX0Months=function(){return", every %s months"},t.prototype.commaOnlyInX0=function(){return", only in %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", on the last day of the month"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", on the last weekday of the month"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s days before the last day of the month"},t.prototype.firstWeekday=function(){return"first weekday"},t.prototype.weekdayNearestDayX0=function(){return"weekday nearest day %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", on the %s of the month"},t.prototype.commaEveryX0Days=function(){return", every %s days"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", between day %s and %s of the month"},t.prototype.commaOnDayX0OfTheMonth=function(){return", on day %s of the month"},t.prototype.commaEveryHour=function(){return", every hour"},t.prototype.commaEveryX0Years=function(){return", every %s years"},t.prototype.commaStartingX0=function(){return", starting %s"},t.prototype.daysOfTheWeek=function(){return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},t.prototype.monthsOfTheYear=function(){return["January","February","March","April","May","June","July","August","September","October","November","December"]},t}();e.en=n},470:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.es=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ocurrió un error mientras se generaba la descripción de la expresión. Revise la sintaxis de la expresión de cron."},t.prototype.at=function(){return"A las"},t.prototype.atSpace=function(){return"A las "},t.prototype.atX0=function(){return"a las %s"},t.prototype.atX0MinutesPastTheHour=function(){return"a los %s minutos de la hora"},t.prototype.atX0SecondsPastTheMinute=function(){return"a los %s segundos del minuto"},t.prototype.betweenX0AndX1=function(){return"entre las %s y las %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre los días %s y %s del mes"},t.prototype.commaEveryDay=function(){return", cada día"},t.prototype.commaEveryX0Days=function(){return", cada %s días"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", cada %s días de la semana"},t.prototype.commaEveryX0Months=function(){return", cada %s meses"},t.prototype.commaOnDayX0OfTheMonth=function(){return", el día %s del mes"},t.prototype.commaOnlyInX0=function(){return", sólo en %s"},t.prototype.commaOnlyOnX0=function(){return", sólo el %s"},t.prototype.commaAndOnX0=function(){return", y el %s"},t.prototype.commaOnThe=function(){return", en el "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", en el último día del mes"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", en el último día de la semana del mes"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s días antes del último día del mes"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", en el último %s del mes"},t.prototype.commaOnTheX0OfTheMonth=function(){return", en el %s del mes"},t.prototype.commaX0ThroughX1=function(){return", de %s a %s"},t.prototype.commaAndX0ThroughX1=function(){return", y de %s a %s"},t.prototype.everyHour=function(){return"cada hora"},t.prototype.everyMinute=function(){return"cada minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"cada minuto entre las %s y las %s"},t.prototype.everySecond=function(){return"cada segundo"},t.prototype.everyX0Hours=function(){return"cada %s horas"},t.prototype.everyX0Minutes=function(){return"cada %s minutos"},t.prototype.everyX0Seconds=function(){return"cada %s segundos"},t.prototype.fifth=function(){return"quinto"},t.prototype.first=function(){return"primero"},t.prototype.firstWeekday=function(){return"primer día de la semana"},t.prototype.fourth=function(){return"cuarto"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"del minuto %s al %s pasada la hora"},t.prototype.second=function(){return"segundo"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"En los segundos %s al %s de cada minuto"},t.prototype.spaceAnd=function(){return" y"},t.prototype.spaceX0OfTheMonth=function(){return" %s del mes"},t.prototype.lastDay=function(){return"el último día"},t.prototype.third=function(){return"tercer"},t.prototype.weekdayNearestDayX0=function(){return"día de la semana más próximo al %s"},t.prototype.commaEveryX0Years=function(){return", cada %s años"},t.prototype.commaStartingX0=function(){return", comenzando %s"},t.prototype.daysOfTheWeek=function(){return["domingo","lunes","martes","miércoles","jueves","viernes","sábado"]},t.prototype.monthsOfTheYear=function(){return["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"]},t}();e.es=n},384:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.fa=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"خطایی در نمایش توضیحات این وظیفه رخ داد. لطفا ساختار آن را بررسی کنید."},t.prototype.everyMinute=function(){return"هر دقیقه"},t.prototype.everyHour=function(){return"هر ساعت"},t.prototype.atSpace=function(){return"در "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"هر دقیقه بین %s و %s"},t.prototype.at=function(){return"در"},t.prototype.spaceAnd=function(){return" و"},t.prototype.everySecond=function(){return"هر ثانیه"},t.prototype.everyX0Seconds=function(){return"هر %s ثانیه"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"ثانیه %s تا %s دقیقه گذشته"},t.prototype.atX0SecondsPastTheMinute=function(){return"در %s قانیه از دقیقه گذشته"},t.prototype.everyX0Minutes=function(){return"هر %s دقیقه"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"دقیقه %s تا %s ساعت گذشته"},t.prototype.atX0MinutesPastTheHour=function(){return"در %s دقیقه پس از ساعت"},t.prototype.everyX0Hours=function(){return"هر %s ساعت"},t.prototype.betweenX0AndX1=function(){return"بین %s و %s"},t.prototype.atX0=function(){return"در %s"},t.prototype.commaEveryDay=function(){return", هر روز"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", هر %s روز از هفته"},t.prototype.commaX0ThroughX1=function(){return", %s تا %s"},t.prototype.commaAndX0ThroughX1=function(){return", و %s تا %s"},t.prototype.first=function(){return"اول"},t.prototype.second=function(){return"دوم"},t.prototype.third=function(){return"سوم"},t.prototype.fourth=function(){return"چهارم"},t.prototype.fifth=function(){return"پنجم"},t.prototype.commaOnThe=function(){return", در "},t.prototype.spaceX0OfTheMonth=function(){return" %s ماه"},t.prototype.lastDay=function(){return"آخرین روز"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", در %s ماه"},t.prototype.commaOnlyOnX0=function(){return", فقط در %s"},t.prototype.commaAndOnX0=function(){return", و در %s"},t.prototype.commaEveryX0Months=function(){return", هر %s ماه"},t.prototype.commaOnlyInX0=function(){return", فقط در %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", در آخرین روز ماه"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", در آخرین روز ماه"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s روز قبل از آخرین روز ماه"},t.prototype.firstWeekday=function(){return"اولین روز"},t.prototype.weekdayNearestDayX0=function(){return"روز نزدیک به روز %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", در %s ماه"},t.prototype.commaEveryX0Days=function(){return", هر %s روز"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", بین روز %s و %s ماه"},t.prototype.commaOnDayX0OfTheMonth=function(){return", در %s ماه"},t.prototype.commaEveryMinute=function(){return", هر minute"},t.prototype.commaEveryHour=function(){return", هر ساعت"},t.prototype.commaEveryX0Years=function(){return", هر %s سال"},t.prototype.commaStartingX0=function(){return", آغاز %s"},t.prototype.daysOfTheWeek=function(){return["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه"]},t.prototype.monthsOfTheYear=function(){return["ژانویه","فوریه","مارس","آپریل","مه","ژوئن","ژوئیه","آگوست","سپتامبر","اکتبر","نوامبر","دسامبر"]},t}();e.fa=n},578:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.fi=void 0;var n=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Virhe kuvauksen generoinnissa. Tarkista cron-syntaksi."},t.prototype.at=function(){return"Klo"},t.prototype.atSpace=function(){return"Klo "},t.prototype.atX0=function(){return"klo %s"},t.prototype.atX0MinutesPastTheHour=function(){return"%s minuuttia yli"},t.prototype.atX0MinutesPastTheHourGt20=function(){return"%s minuuttia yli"},t.prototype.atX0SecondsPastTheMinute=function(){return"%s sekunnnin jälkeen"},t.prototype.betweenX0AndX1=function(){return"%s - %s välillä"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", kuukauden päivien %s ja %s välillä"},t.prototype.commaEveryDay=function(){return", joka päivä"},t.prototype.commaEveryHour=function(){return", joka tunti"},t.prototype.commaEveryMinute=function(){return", joka minuutti"},t.prototype.commaEveryX0Days=function(){return", joka %s. päivä"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", joka %s. viikonpäivä"},t.prototype.commaEveryX0Months=function(){return", joka %s. kuukausi"},t.prototype.commaEveryX0Years=function(){return", joka %s. vuosi"},t.prototype.commaOnDayX0OfTheMonth=function(){return", kuukauden %s päivä"},t.prototype.commaOnlyInX0=function(){return", vain %s"},t.prototype.commaOnlyOnX0=function(){return", vain %s"},t.prototype.commaOnThe=function(){return","},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", kuukauden viimeisenä päivänä"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", kuukauden viimeisenä viikonpäivänä"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", kuukauden viimeinen %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", kuukauden %s"},t.prototype.commaX0ThroughX1=function(){return", %s - %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s - %s"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s päivää ennen kuukauden viimeistä päivää"},t.prototype.commaStartingX0=function(){return", alkaen %s"},t.prototype.everyHour=function(){return"joka tunti"},t.prototype.everyMinute=function(){return"joka minuutti"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"joka minuutti %s - %s välillä"},t.prototype.everySecond=function(){return"joka sekunti"},t.prototype.everyX0Hours=function(){return"joka %s. tunti"},t.prototype.everyX0Minutes=function(){return"joka %s. minuutti"},t.prototype.everyX0Seconds=function(){return"joka %s. sekunti"},t.prototype.fifth=function(){return"viides"},t.prototype.first=function(){return"ensimmäinen"},t.prototype.firstWeekday=function(){return"ensimmäinen viikonpäivä"},t.prototype.fourth=function(){return"neljäs"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"joka tunti minuuttien %s - %s välillä"},t.prototype.second=function(){return"toinen"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"joka minuutti sekunttien %s - %s välillä"},t.prototype.spaceAnd=function(){return" ja"},t.prototype.spaceAndSpace=function(){return" ja "},t.prototype.spaceX0OfTheMonth=function(){return" %s kuukaudessa"},t.prototype.third=function(){return"kolmas"},t.prototype.weekdayNearestDayX0=function(){return"viikonpäivä lähintä %s päivää"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.lastDay=function(){return"viimeinen päivä"},t.prototype.commaAndOnX0=function(){return", ja edelleen %s"},t.prototype.daysOfTheWeek=function(){return["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},t.prototype.monthsOfTheYear=function(){return["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"]},t}();e.fi=n},953:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.fr=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"toutes les minutes"},t.prototype.everyHour=function(){return"toutes les heures"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Une erreur est survenue en générant la description de l'expression cron. Vérifiez sa syntaxe."},t.prototype.atSpace=function(){return"À "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Toutes les minutes entre %s et %s"},t.prototype.at=function(){return"À"},t.prototype.spaceAnd=function(){return" et"},t.prototype.everySecond=function(){return"toutes les secondes"},t.prototype.everyX0Seconds=function(){return"toutes les %s secondes"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"les secondes entre %s et %s après la minute"},t.prototype.atX0SecondsPastTheMinute=function(){return"%s secondes après la minute"},t.prototype.everyX0Minutes=function(){return"toutes les %s minutes"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"les minutes entre %s et %s après l'heure"},t.prototype.atX0MinutesPastTheHour=function(){return"%s minutes après l'heure"},t.prototype.everyX0Hours=function(){return"toutes les %s heures"},t.prototype.betweenX0AndX1=function(){return"de %s à %s"},t.prototype.atX0=function(){return"à %s"},t.prototype.commaEveryDay=function(){return", tous les jours"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", tous les %s jours de la semaine"},t.prototype.commaX0ThroughX1=function(){return", de %s à %s"},t.prototype.commaAndX0ThroughX1=function(){return", et de %s à %s"},t.prototype.first=function(){return"premier"},t.prototype.second=function(){return"second"},t.prototype.third=function(){return"troisième"},t.prototype.fourth=function(){return"quatrième"},t.prototype.fifth=function(){return"cinquième"},t.prototype.commaOnThe=function(){return", le "},t.prototype.spaceX0OfTheMonth=function(){return" %s du mois"},t.prototype.lastDay=function(){return"le dernier jour"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", le dernier %s du mois"},t.prototype.commaOnlyOnX0=function(){return", uniquement le %s"},t.prototype.commaAndOnX0=function(){return", et %s"},t.prototype.commaEveryX0Months=function(){return", tous les %s mois"},t.prototype.commaOnlyInX0=function(){return", uniquement en %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", le dernier jour du mois"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", le dernier jour ouvrable du mois"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s jours avant le dernier jour du mois"},t.prototype.firstWeekday=function(){return"premier jour ouvrable"},t.prototype.weekdayNearestDayX0=function(){return"jour ouvrable le plus proche du %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", le %s du mois"},t.prototype.commaEveryX0Days=function(){return", tous les %s jours"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", du %s au %s du mois"},t.prototype.commaOnDayX0OfTheMonth=function(){return", le %s du mois"},t.prototype.commaEveryX0Years=function(){return", tous les %s ans"},t.prototype.commaDaysX0ThroughX1=function(){return", du %s au %s"},t.prototype.commaStartingX0=function(){return", à partir de %s"},t.prototype.daysOfTheWeek=function(){return["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},t.prototype.monthsOfTheYear=function(){return["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]},t}();e.fr=n},389:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.he=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"אירעה שגיאה בעת יצירת תיאור הביטוי. בדוק את תחביר הביטוי cron."},t.prototype.everyMinute=function(){return"כל דקה"},t.prototype.everyHour=function(){return"כל שעה"},t.prototype.atSpace=function(){return"ב "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"כל דקה %s עד %s"},t.prototype.at=function(){return"ב"},t.prototype.spaceAnd=function(){return" ו"},t.prototype.everySecond=function(){return"כל שניה"},t.prototype.everyX0Seconds=function(){return"כל %s שניות"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"%s עד %s שניות של הדקה"},t.prototype.atX0SecondsPastTheMinute=function(){return"ב %s שניות של הדקה"},t.prototype.everyX0Minutes=function(){return"כל %s דקות"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"%s עד %s דקות של השעה"},t.prototype.atX0MinutesPastTheHour=function(){return"ב %s דקות של השעה"},t.prototype.everyX0Hours=function(){return"כל %s שעות"},t.prototype.betweenX0AndX1=function(){return"%s עד %s"},t.prototype.atX0=function(){return"ב %s"},t.prototype.commaEveryDay=function(){return", כל יום"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", כל %s ימים בשבוע"},t.prototype.commaX0ThroughX1=function(){return", %s עד %s"},t.prototype.commaAndX0ThroughX1=function(){return", ו %s עד %s"},t.prototype.first=function(){return"ראשון"},t.prototype.second=function(){return"שני"},t.prototype.third=function(){return"שלישי"},t.prototype.fourth=function(){return"רביעי"},t.prototype.fifth=function(){return"חמישי"},t.prototype.commaOnThe=function(){return", ב "},t.prototype.spaceX0OfTheMonth=function(){return" %s של החודש"},t.prototype.lastDay=function(){return"היום האחרון"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", רק ב %s של החודש"},t.prototype.commaOnlyOnX0=function(){return", רק ב %s"},t.prototype.commaAndOnX0=function(){return", וב %s"},t.prototype.commaEveryX0Months=function(){return", כל %s חודשים"},t.prototype.commaOnlyInX0=function(){return", רק ב %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ביום האחרון של החודש"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ביום החול האחרון של החודש"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s ימים לפני היום האחרון בחודש"},t.prototype.firstWeekday=function(){return"יום החול הראשון"},t.prototype.weekdayNearestDayX0=function(){return"יום החול הראשון הקרוב אל %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", ביום ה%s של החודש"},t.prototype.commaEveryX0Days=function(){return", כל %s ימים"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", בין היום ה%s וה%s של החודש"},t.prototype.commaOnDayX0OfTheMonth=function(){return", ביום ה%s של החודש"},t.prototype.commaEveryX0Years=function(){return", כל %s שנים"},t.prototype.commaStartingX0=function(){return", החל מ %s"},t.prototype.daysOfTheWeek=function(){return["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"]},t.prototype.monthsOfTheYear=function(){return["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"]},t}();e.he=n},560:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.hu=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Hiba történt a kifejezésleírás generálásakor. Ellenőrizze a cron kifejezés szintaxisát."},t.prototype.everyMinute=function(){return"minden percben"},t.prototype.everyHour=function(){return"minden órában"},t.prototype.atSpace=function(){return"Ekkor: "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"percenként %s és %s között"},t.prototype.at=function(){return"Ekkor:"},t.prototype.spaceAnd=function(){return" és"},t.prototype.everySecond=function(){return"minden másodpercben"},t.prototype.everyX0Seconds=function(){return"%s másodpercenként"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"%s. másodpercben %s perc után"},t.prototype.atX0SecondsPastTheMinute=function(){return"%s. másodpercben"},t.prototype.everyX0Minutes=function(){return"minden %s. percben"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"%s. percben %s óra után"},t.prototype.atX0MinutesPastTheHour=function(){return"%s. percben"},t.prototype.everyX0Hours=function(){return"minden %s órában"},t.prototype.betweenX0AndX1=function(){return"%s és %s között"},t.prototype.atX0=function(){return"ekkor %s"},t.prototype.commaEveryDay=function(){return", minden nap"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", a hét minden %s napján"},t.prototype.commaX0ThroughX1=function(){return", %s - %s"},t.prototype.commaAndX0ThroughX1=function(){return", és %s - %s"},t.prototype.first=function(){return"első"},t.prototype.second=function(){return"második"},t.prototype.third=function(){return"harmadik"},t.prototype.fourth=function(){return"negyedik"},t.prototype.fifth=function(){return"ötödik"},t.prototype.commaOnThe=function(){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s a hónapban"},t.prototype.lastDay=function(){return"az utolsó nap"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", a hónap utolsó %s"},t.prototype.commaOnlyOnX0=function(){return", csak ekkor: %s"},t.prototype.commaAndOnX0=function(){return", és %s"},t.prototype.commaEveryX0Months=function(){return", minden %s hónapban"},t.prototype.commaOnlyInX0=function(){return", csak ekkor: %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", a hónap utolsó napján"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", a hónap utolsó hétköznapján"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s nappal a hónap utolsó napja előtt"},t.prototype.firstWeekday=function(){return"első hétköznap"},t.prototype.weekdayNearestDayX0=function(){return"hétköznap legközelebbi nap %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", a hónap %s"},t.prototype.commaEveryX0Days=function(){return", %s naponként"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", a hónap %s és %s napja között"},t.prototype.commaOnDayX0OfTheMonth=function(){return", a hónap %s napján"},t.prototype.commaEveryHour=function(){return", minden órában"},t.prototype.commaEveryX0Years=function(){return", %s évente"},t.prototype.commaStartingX0=function(){return", %s kezdettel"},t.prototype.daysOfTheWeek=function(){return["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"]},t.prototype.monthsOfTheYear=function(){return["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"]},t}();e.hu=n},258:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.id=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Terjadi kesalahan saat membuat deskripsi ekspresi. Periksa sintaks ekspresi cron."},t.prototype.everyMinute=function(){return"setiap menit"},t.prototype.everyHour=function(){return"setiap jam"},t.prototype.atSpace=function(){return"Pada "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Setiap menit diantara %s dan %s"},t.prototype.at=function(){return"Pada"},t.prototype.spaceAnd=function(){return" dan"},t.prototype.everySecond=function(){return"setiap detik"},t.prototype.everyX0Seconds=function(){return"setiap %s detik"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"detik ke %s sampai %s melewati menit"},t.prototype.atX0SecondsPastTheMinute=function(){return"pada %s detik lewat satu menit"},t.prototype.everyX0Minutes=function(){return"setiap %s menit"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"menit ke %s sampai %s melewati jam"},t.prototype.atX0MinutesPastTheHour=function(){return"pada %s menit melewati jam"},t.prototype.everyX0Hours=function(){return"setiap %s jam"},t.prototype.betweenX0AndX1=function(){return"diantara %s dan %s"},t.prototype.atX0=function(){return"pada %s"},t.prototype.commaEveryDay=function(){return", setiap hari"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", setiap hari %s dalam seminggu"},t.prototype.commaX0ThroughX1=function(){return", %s sampai %s"},t.prototype.commaAndX0ThroughX1=function(){return", dan %s sampai %s"},t.prototype.first=function(){return"pertama"},t.prototype.second=function(){return"kedua"},t.prototype.third=function(){return"ketiga"},t.prototype.fourth=function(){return"keempat"},t.prototype.fifth=function(){return"kelima"},t.prototype.commaOnThe=function(){return", di "},t.prototype.spaceX0OfTheMonth=function(){return" %s pada bulan"},t.prototype.lastDay=function(){return"hari terakhir"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", pada %s terakhir bulan ini"},t.prototype.commaOnlyOnX0=function(){return", hanya pada %s"},t.prototype.commaAndOnX0=function(){return", dan pada %s"},t.prototype.commaEveryX0Months=function(){return", setiap bulan %s "},t.prototype.commaOnlyInX0=function(){return", hanya pada %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", pada hari terakhir bulan ini"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", pada hari kerja terakhir setiap bulan"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s hari sebelum hari terakhir setiap bulan"},t.prototype.firstWeekday=function(){return"hari kerja pertama"},t.prototype.weekdayNearestDayX0=function(){return"hari kerja terdekat %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", pada %s bulan ini"},t.prototype.commaEveryX0Days=function(){return", setiap %s hari"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", antara hari %s dan %s dalam sebulan"},t.prototype.commaOnDayX0OfTheMonth=function(){return", pada hari %s dalam sebulan"},t.prototype.commaEveryHour=function(){return", setiap jam"},t.prototype.commaEveryX0Years=function(){return", setiap %s tahun"},t.prototype.commaStartingX0=function(){return", mulai pada %s"},t.prototype.daysOfTheWeek=function(){return["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},t.prototype.monthsOfTheYear=function(){return["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]},t}();e.id=n},128:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.it=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"È verificato un errore durante la generazione la descrizione espressione. Controllare la sintassi delle espressioni cron."},t.prototype.at=function(){return"Alle"},t.prototype.atSpace=function(){return"Alle "},t.prototype.atX0=function(){return"alle %s"},t.prototype.atX0MinutesPastTheHour=function(){return"al %s minuto passata l'ora"},t.prototype.atX0SecondsPastTheMinute=function(){return"al %s secondo passato il minuto"},t.prototype.betweenX0AndX1=function(){return"tra le %s e le %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", tra il giorno %s e %s del mese"},t.prototype.commaEveryDay=function(){return", ogni giorno"},t.prototype.commaEveryX0Days=function(){return", ogni %s giorni"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", ogni %s giorni della settimana"},t.prototype.commaEveryX0Months=function(){return", ogni %s mesi"},t.prototype.commaEveryX0Years=function(){return", ogni %s anni"},t.prototype.commaOnDayX0OfTheMonth=function(){return", il giorno %s del mese"},t.prototype.commaOnlyInX0=function(){return", solo in %s"},t.prototype.commaOnlyOnX0=function(){return", solo il %s"},t.prototype.commaAndOnX0=function(){return", e il %s"},t.prototype.commaOnThe=function(){return", il "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", l'ultimo giorno del mese"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", nell'ultima settimana del mese"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s giorni prima dell'ultimo giorno del mese"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", l'ultimo %s del mese"},t.prototype.commaOnTheX0OfTheMonth=function(){return", il %s del mese"},t.prototype.commaX0ThroughX1=function(){return", %s al %s"},t.prototype.commaAndX0ThroughX1=function(){return", e %s al %s"},t.prototype.everyHour=function(){return"ogni ora"},t.prototype.everyMinute=function(){return"ogni minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Ogni minuto tra le %s e le %s"},t.prototype.everySecond=function(){return"ogni secondo"},t.prototype.everyX0Hours=function(){return"ogni %s ore"},t.prototype.everyX0Minutes=function(){return"ogni %s minuti"},t.prototype.everyX0Seconds=function(){return"ogni %s secondi"},t.prototype.fifth=function(){return"quinto"},t.prototype.first=function(){return"primo"},t.prototype.firstWeekday=function(){return"primo giorno della settimana"},t.prototype.fourth=function(){return"quarto"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuti %s al %s dopo l'ora"},t.prototype.second=function(){return"secondo"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"secondi %s al %s oltre il minuto"},t.prototype.spaceAnd=function(){return" e"},t.prototype.spaceX0OfTheMonth=function(){return" %s del mese"},t.prototype.lastDay=function(){return"l'ultimo giorno"},t.prototype.third=function(){return"terzo"},t.prototype.weekdayNearestDayX0=function(){return"giorno della settimana più vicino al %s"},t.prototype.commaStartingX0=function(){return", a partire %s"},t.prototype.daysOfTheWeek=function(){return["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"]},t.prototype.monthsOfTheYear=function(){return["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"]},t}();e.it=n},949:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ja=void 0;var n=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"毎分"},t.prototype.everyHour=function(){return"毎時"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"式の記述を生成する際にエラーが発生しました。Cron 式の構文を確認してください。"},t.prototype.atSpace=function(){return"次において実施"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"%s から %s まで毎分"},t.prototype.at=function(){return"次において実施"},t.prototype.spaceAnd=function(){return"と"},t.prototype.everySecond=function(){return"毎秒"},t.prototype.everyX0Seconds=function(){return"%s 秒ごと"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"毎分 %s 秒から %s 秒まで"},t.prototype.atX0SecondsPastTheMinute=function(){return"毎分 %s 秒過ぎ"},t.prototype.everyX0Minutes=function(){return"%s 分ごと"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"毎時 %s 分から %s 分まで"},t.prototype.atX0MinutesPastTheHour=function(){return"毎時 %s 分過ぎ"},t.prototype.everyX0Hours=function(){return"%s 時間ごと"},t.prototype.betweenX0AndX1=function(){return"%s と %s の間"},t.prototype.atX0=function(){return"次において実施 %s"},t.prototype.commaEveryDay=function(){return"、毎日"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return"、週のうち %s 日ごと"},t.prototype.commaX0ThroughX1=function(){return"、%s から %s まで"},t.prototype.commaAndX0ThroughX1=function(){return"、%s から %s まで"},t.prototype.first=function(){return"1 番目"},t.prototype.second=function(){return"2 番目"},t.prototype.third=function(){return"3 番目"},t.prototype.fourth=function(){return"4 番目"},t.prototype.fifth=function(){return"5 番目"},t.prototype.commaOnThe=function(){return"次に"},t.prototype.spaceX0OfTheMonth=function(){return"月のうち %s"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return"月の最後の %s に"},t.prototype.commaOnlyOnX0=function(){return"%s にのみ"},t.prototype.commaEveryX0Months=function(){return"、%s か月ごと"},t.prototype.commaOnlyInX0=function(){return"%s でのみ"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return"次の最終日に"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return"月の最後の平日に"},t.prototype.firstWeekday=function(){return"最初の平日"},t.prototype.weekdayNearestDayX0=function(){return"%s 日の直近の平日"},t.prototype.commaOnTheX0OfTheMonth=function(){return"月の %s に"},t.prototype.commaEveryX0Days=function(){return"、%s 日ごと"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return"、月の %s 日から %s 日の間"},t.prototype.commaOnDayX0OfTheMonth=function(){return"、月の %s 日目"},t.prototype.spaceAndSpace=function(){return"と"},t.prototype.commaEveryMinute=function(){return"、毎分"},t.prototype.commaEveryHour=function(){return"、毎時"},t.prototype.commaEveryX0Years=function(){return"、%s 年ごと"},t.prototype.commaStartingX0=function(){return"、%s に開始"},t.prototype.aMPeriod=function(){return"AM"},t.prototype.pMPeriod=function(){return"PM"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return"月の最終日の %s 日前"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.lastDay=function(){return"最終日"},t.prototype.commaAndOnX0=function(){return"、〜と %s"},t.prototype.daysOfTheWeek=function(){return["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},t.prototype.monthsOfTheYear=function(){return["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]},t}();e.ja=n},305:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ko=void 0;var n=function(){function t(){}return t.prototype.setPeriodBeforeTime=function(){return!0},t.prototype.pm=function(){return"오후"},t.prototype.am=function(){return"오전"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"표현식 설명을 생성하는 중 오류가 발생했습니다. cron 표현식 구문을 확인하십시오."},t.prototype.everyMinute=function(){return"1분마다"},t.prototype.everyHour=function(){return"1시간마다"},t.prototype.atSpace=function(){return"시간 "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"%s 및 %s 사이에 매 분"},t.prototype.at=function(){return"시간"},t.prototype.spaceAnd=function(){return" 및"},t.prototype.everySecond=function(){return"1초마다"},t.prototype.everyX0Seconds=function(){return"%s초마다"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"정분 후 %s초에서 %s초까지"},t.prototype.atX0SecondsPastTheMinute=function(){return"정분 후 %s초에서"},t.prototype.everyX0Minutes=function(){return"%s분마다"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"정시 후 %s분에서 %s분까지"},t.prototype.atX0MinutesPastTheHour=function(){return"정시 후 %s분에서"},t.prototype.everyX0Hours=function(){return"%s시간마다"},t.prototype.betweenX0AndX1=function(){return"%s에서 %s 사이"},t.prototype.atX0=function(){return"%s에서"},t.prototype.commaEveryDay=function(){return", 매일"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", 주 중 %s일마다"},t.prototype.commaX0ThroughX1=function(){return", %s에서 %s까지"},t.prototype.commaAndX0ThroughX1=function(){return", 및 %s에서 %s까지"},t.prototype.first=function(){return"첫 번째"},t.prototype.second=function(){return"두 번째"},t.prototype.third=function(){return"세 번째"},t.prototype.fourth=function(){return"네 번째"},t.prototype.fifth=function(){return"다섯 번째"},t.prototype.commaOnThe=function(){return", 해당 "},t.prototype.spaceX0OfTheMonth=function(){return" 해당 월의 %s"},t.prototype.lastDay=function(){return"마지막 날"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", 해당 월의 마지막 %s"},t.prototype.commaOnlyOnX0=function(){return", %s에만"},t.prototype.commaAndOnX0=function(){return", 및 %s에"},t.prototype.commaEveryX0Months=function(){return", %s개월마다"},t.prototype.commaOnlyInX0=function(){return", %s에만"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", 해당 월의 마지막 날에"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", 해당 월의 마지막 평일에"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", 해당 월의 마지막 날 %s일 전"},t.prototype.firstWeekday=function(){return"첫 번째 평일"},t.prototype.weekdayNearestDayX0=function(){return"%s일과 가장 가까운 평일"},t.prototype.commaOnTheX0OfTheMonth=function(){return", 해당 월의 %s에"},t.prototype.commaEveryX0Days=function(){return", %s일마다"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", 해당 월의 %s일에서 %s일까지"},t.prototype.commaOnDayX0OfTheMonth=function(){return", 해당 월의 %s일에"},t.prototype.commaEveryMinute=function(){return", 1분마다"},t.prototype.commaEveryHour=function(){return", 1시간마다"},t.prototype.commaEveryX0Years=function(){return", %s년마다"},t.prototype.commaStartingX0=function(){return", %s부터"},t.prototype.daysOfTheWeek=function(){return["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},t.prototype.monthsOfTheYear=function(){return["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},t}();e.ko=n},863:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.my=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Terdapat ralat semasa menjana penerangan ungkapan. Sila periksa sintaks ungkapan cron."},t.prototype.everyMinute=function(){return"setiap minit"},t.prototype.everyHour=function(){return"setiap jam"},t.prototype.atSpace=function(){return"Pada "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Setiap minit antara %s dan %s"},t.prototype.at=function(){return"Pada"},t.prototype.spaceAnd=function(){return" dan"},t.prototype.everySecond=function(){return"setiap saat"},t.prototype.everyX0Seconds=function(){return"setiap %s saat"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"saat ke %s hingga %s selepas minit"},t.prototype.atX0SecondsPastTheMinute=function(){return"pada %s saat selepas minit"},t.prototype.everyX0Minutes=function(){return"setiap %s minit"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minit ke %s hingga %s selepas jam"},t.prototype.atX0MinutesPastTheHour=function(){return"pada %s minit selepas jam"},t.prototype.everyX0Hours=function(){return"setiap %s jam"},t.prototype.betweenX0AndX1=function(){return"antara %s dan %s"},t.prototype.atX0=function(){return"pada %s"},t.prototype.commaEveryDay=function(){return", setiap hari"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", setiap %s hari dalam minggu"},t.prototype.commaX0ThroughX1=function(){return", %s hingga %s"},t.prototype.commaAndX0ThroughX1=function(){return", dan %s hingga %s"},t.prototype.first=function(){return"pertama"},t.prototype.second=function(){return"kedua"},t.prototype.third=function(){return"ketiga"},t.prototype.fourth=function(){return"keempat"},t.prototype.fifth=function(){return"kelima"},t.prototype.commaOnThe=function(){return", pada "},t.prototype.spaceX0OfTheMonth=function(){return" %s pada bulan"},t.prototype.lastDay=function(){return"hari terakhir"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", pada %s terakhir bulan"},t.prototype.commaOnlyOnX0=function(){return", hanya pada %s"},t.prototype.commaAndOnX0=function(){return", dan pada %s"},t.prototype.commaEveryX0Months=function(){return", setiap bulan %s"},t.prototype.commaOnlyInX0=function(){return", hanya pada %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", pada hari terakhir bulan"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", pada minggu terakhir bulan"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s hari sebelum hari terakhir bulan"},t.prototype.firstWeekday=function(){return"hari pertama minggu bekerja"},t.prototype.weekdayNearestDayX0=function(){return"hari bekerja yang terdekat dengan %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", pada %s bulan"},t.prototype.commaEveryX0Days=function(){return", setiap %s hari"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", antara hari %s dan %s dalam bulan"},t.prototype.commaOnDayX0OfTheMonth=function(){return", pada hari %s dalam bulan"},t.prototype.commaEveryHour=function(){return", setiap jam"},t.prototype.commaEveryX0Years=function(){return", setiap %s tahun"},t.prototype.commaStartingX0=function(){return", bermula %s"},t.prototype.daysOfTheWeek=function(){return["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"]},t.prototype.monthsOfTheYear=function(){return["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"]},t}();e.my=n},869:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.nb=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"En feil inntraff ved generering av uttrykksbeskrivelse. Sjekk cron syntaks."},t.prototype.at=function(){return"Kl."},t.prototype.atSpace=function(){return"Kl."},t.prototype.atX0=function(){return"på %s"},t.prototype.atX0MinutesPastTheHour=function(){return"på %s minutter etter timen"},t.prototype.atX0SecondsPastTheMinute=function(){return"på %s sekunder etter minuttet"},t.prototype.betweenX0AndX1=function(){return"mellom %s og %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mellom dag %s og %s av måneden"},t.prototype.commaEveryDay=function(){return", hver dag"},t.prototype.commaEveryX0Days=function(){return", hver %s dag"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", hver %s ukedag"},t.prototype.commaEveryX0Months=function(){return", hver %s måned"},t.prototype.commaEveryX0Years=function(){return", hvert %s år"},t.prototype.commaOnDayX0OfTheMonth=function(){return", på dag %s av måneden"},t.prototype.commaOnlyInX0=function(){return", bare i %s"},t.prototype.commaOnlyOnX0=function(){return", på %s"},t.prototype.commaAndOnX0=function(){return", og på %s"},t.prototype.commaOnThe=function(){return", på "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", på den siste dagen i måneden"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", den siste ukedagen i måneden"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dager før den siste dagen i måneden"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", på den siste %s av måneden"},t.prototype.commaOnTheX0OfTheMonth=function(){return", på den %s av måneden"},t.prototype.commaX0ThroughX1=function(){return", %s til og med %s"},t.prototype.commaAndX0ThroughX1=function(){return", og %s til og med %s"},t.prototype.everyHour=function(){return"hver time"},t.prototype.everyMinute=function(){return"hvert minutt"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Hvert minutt mellom %s og %s"},t.prototype.everySecond=function(){return"hvert sekund"},t.prototype.everyX0Hours=function(){return"hver %s time"},t.prototype.everyX0Minutes=function(){return"hvert %s minutt"},t.prototype.everyX0Seconds=function(){return"hvert %s sekund"},t.prototype.fifth=function(){return"femte"},t.prototype.first=function(){return"første"},t.prototype.firstWeekday=function(){return"første ukedag"},t.prototype.fourth=function(){return"fjerde"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuttene fra %s til og med %s etter timen"},t.prototype.second=function(){return"sekund"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundene fra %s til og med %s etter minuttet"},t.prototype.spaceAnd=function(){return" og"},t.prototype.spaceX0OfTheMonth=function(){return" %s i måneden"},t.prototype.lastDay=function(){return"den siste dagen"},t.prototype.third=function(){return"tredje"},t.prototype.weekdayNearestDayX0=function(){return"ukedag nærmest dag %s"},t.prototype.commaStartingX0=function(){return", starter %s"},t.prototype.daysOfTheWeek=function(){return["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},t.prototype.monthsOfTheYear=function(){return["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"]},t}();e.nb=n},771:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.nl=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"elke minuut"},t.prototype.everyHour=function(){return"elk uur"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Er is een fout opgetreden bij het vertalen van de gegevens. Controleer de gegevens."},t.prototype.atSpace=function(){return"Op "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Elke minuut tussen %s en %s"},t.prototype.at=function(){return"Op"},t.prototype.spaceAnd=function(){return" en"},t.prototype.everySecond=function(){return"elke seconde"},t.prototype.everyX0Seconds=function(){return"elke %s seconden"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconden %s t/m %s na de minuut"},t.prototype.atX0SecondsPastTheMinute=function(){return"op %s seconden na de minuut"},t.prototype.everyX0Minutes=function(){return"elke %s minuten"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuut %s t/m %s na het uur"},t.prototype.atX0MinutesPastTheHour=function(){return"op %s minuten na het uur"},t.prototype.everyX0Hours=function(){return"elke %s uur"},t.prototype.betweenX0AndX1=function(){return"tussen %s en %s"},t.prototype.atX0=function(){return"op %s"},t.prototype.commaEveryDay=function(){return", elke dag"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", elke %s dagen van de week"},t.prototype.commaX0ThroughX1=function(){return", %s t/m %s"},t.prototype.commaAndX0ThroughX1=function(){return", en %s t/m %s"},t.prototype.first=function(){return"eerste"},t.prototype.second=function(){return"tweede"},t.prototype.third=function(){return"derde"},t.prototype.fourth=function(){return"vierde"},t.prototype.fifth=function(){return"vijfde"},t.prototype.commaOnThe=function(){return", op de "},t.prototype.spaceX0OfTheMonth=function(){return" %s van de maand"},t.prototype.lastDay=function(){return"de laatste dag"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", op de laatste %s van de maand"},t.prototype.commaOnlyOnX0=function(){return", alleen op %s"},t.prototype.commaAndOnX0=function(){return", en op %s"},t.prototype.commaEveryX0Months=function(){return", elke %s maanden"},t.prototype.commaOnlyInX0=function(){return", alleen in %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", op de laatste dag van de maand"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", op de laatste werkdag van de maand"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dagen vóór de laatste dag van de maand"},t.prototype.firstWeekday=function(){return"eerste werkdag"},t.prototype.weekdayNearestDayX0=function(){return"werkdag dichtst bij dag %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", op de %s van de maand"},t.prototype.commaEveryX0Days=function(){return", elke %s dagen"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", tussen dag %s en %s van de maand"},t.prototype.commaOnDayX0OfTheMonth=function(){return", op dag %s van de maand"},t.prototype.commaEveryX0Years=function(){return", elke %s jaren"},t.prototype.commaStartingX0=function(){return", beginnend %s"},t.prototype.daysOfTheWeek=function(){return["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},t.prototype.monthsOfTheYear=function(){return["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"]},t}();e.nl=n},665:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.pl=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Wystąpił błąd podczas generowania opisu wyrażenia cron. Sprawdź składnię wyrażenia cron."},t.prototype.at=function(){return"O"},t.prototype.atSpace=function(){return"O "},t.prototype.atX0=function(){return"o %s"},t.prototype.atX0MinutesPastTheHour=function(){return"w %s minucie"},t.prototype.atX0SecondsPastTheMinute=function(){return"w %s sekundzie"},t.prototype.betweenX0AndX1=function(){return"od %s do %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", od %s-ego do %s-ego dnia miesiąca"},t.prototype.commaEveryDay=function(){return", co dzień"},t.prototype.commaEveryX0Days=function(){return", co %s dni"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", co %s dni tygodnia"},t.prototype.commaEveryX0Months=function(){return", co %s miesięcy"},t.prototype.commaEveryX0Years=function(){return", co %s lat"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s-ego dnia miesiąca"},t.prototype.commaOnlyInX0=function(){return", tylko %s"},t.prototype.commaOnlyOnX0=function(){return", tylko %s"},t.prototype.commaAndOnX0=function(){return", i %s"},t.prototype.commaOnThe=function(){return", "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ostatni dzień miesiąca"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ostatni dzień roboczy miesiąca"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dni przed ostatnim dniem miesiąca"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", ostatni %s miesiąca"},t.prototype.commaOnTheX0OfTheMonth=function(){return", %s miesiąca"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", i od %s do %s"},t.prototype.everyHour=function(){return"co godzinę"},t.prototype.everyMinute=function(){return"co minutę"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Co minutę od %s do %s"},t.prototype.everySecond=function(){return"co sekundę"},t.prototype.everyX0Hours=function(){return"co %s godzin"},t.prototype.everyX0Minutes=function(){return"co %s minut"},t.prototype.everyX0Seconds=function(){return"co %s sekund"},t.prototype.fifth=function(){return"piąty"},t.prototype.first=function(){return"pierwszy"},t.prototype.firstWeekday=function(){return"pierwszy dzień roboczy"},t.prototype.fourth=function(){return"czwarty"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuty od %s do %s"},t.prototype.second=function(){return"drugi"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundy od %s do %s"},t.prototype.spaceAnd=function(){return" i"},t.prototype.spaceX0OfTheMonth=function(){return" %s miesiąca"},t.prototype.lastDay=function(){return"ostatni dzień"},t.prototype.third=function(){return"trzeci"},t.prototype.weekdayNearestDayX0=function(){return"dzień roboczy najbliższy %s-ego dnia"},t.prototype.commaStartingX0=function(){return", startowy %s"},t.prototype.daysOfTheWeek=function(){return["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"]},t.prototype.monthsOfTheYear=function(){return["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"]},t}();e.pl=n},461:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.pt_BR=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ocorreu um erro ao gerar a descrição da expressão Cron."},t.prototype.at=function(){return"às"},t.prototype.atSpace=function(){return"às "},t.prototype.atX0=function(){return"Às %s"},t.prototype.atX0MinutesPastTheHour=function(){return"aos %s minutos da hora"},t.prototype.atX0SecondsPastTheMinute=function(){return"aos %s segundos do minuto"},t.prototype.betweenX0AndX1=function(){return"entre %s e %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre os dias %s e %s do mês"},t.prototype.commaEveryDay=function(){return", a cada dia"},t.prototype.commaEveryX0Days=function(){return", a cada %s dias"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", a cada %s dias de semana"},t.prototype.commaEveryX0Months=function(){return", a cada %s meses"},t.prototype.commaOnDayX0OfTheMonth=function(){return", no dia %s do mês"},t.prototype.commaOnlyInX0=function(t){return t&&t.length>1&&"-"===t[1]?"somente %s":", somente em %s"},t.prototype.commaOnlyOnX0=function(t){return t&&t.length>1&&"-"===t[1]?", somente %s":", somente de %s"},t.prototype.commaAndOnX0=function(){return", e de %s"},t.prototype.commaOnThe=function(){return", na "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", no último dia do mês"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", no último dia da semana do mês"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dias antes do último dia do mês"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", na última %s do mês"},t.prototype.commaOnTheX0OfTheMonth=function(){return", no %s do mês"},t.prototype.commaX0ThroughX1=function(){return", de %s a %s"},t.prototype.commaAndX0ThroughX1=function(){return", e de %s a %s"},t.prototype.everyHour=function(){return"a cada hora"},t.prototype.everyMinute=function(){return"a cada minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"a cada minuto entre %s e %s"},t.prototype.everySecond=function(){return"a cada segundo"},t.prototype.everyX0Hours=function(){return"a cada %s horas"},t.prototype.everyX0Minutes=function(){return"a cada %s minutos"},t.prototype.everyX0Seconds=function(){return"a cada %s segundos"},t.prototype.fifth=function(){return"quinta"},t.prototype.first=function(){return"primeira"},t.prototype.firstWeekday=function(){return"primeiro dia da semana"},t.prototype.fourth=function(){return"quarta"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"do minuto %s até %s de cada hora"},t.prototype.second=function(){return"segunda"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"No segundo %s até %s de cada minuto"},t.prototype.spaceAnd=function(){return" e"},t.prototype.spaceX0OfTheMonth=function(){return" %s do mês"},t.prototype.lastDay=function(){return"o último dia"},t.prototype.third=function(){return"terceira"},t.prototype.weekdayNearestDayX0=function(){return"dia da semana mais próximo do dia %s"},t.prototype.commaEveryX0Years=function(){return", a cada %s anos"},t.prototype.commaStartingX0=function(){return", iniciando %s"},t.prototype.daysOfTheWeek=function(){return["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},t.prototype.monthsOfTheYear=function(){return["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},t}();e.pt_BR=n},713:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.pt_PT=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ocorreu um erro ao gerar a descrição da expressão Cron."},t.prototype.at=function(){return"às"},t.prototype.atSpace=function(){return"às "},t.prototype.atX0=function(){return"Às %s"},t.prototype.atX0MinutesPastTheHour=function(){return"aos %s minutos da hora"},t.prototype.atX0SecondsPastTheMinute=function(){return"aos %s segundos do minuto"},t.prototype.betweenX0AndX1=function(){return"entre %s e %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre os dias %s e %s do mês"},t.prototype.commaEveryDay=function(){return", a cada dia"},t.prototype.commaEveryX0Days=function(){return", a cada %s dias"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", a cada %s dias de semana"},t.prototype.commaEveryX0Months=function(){return", a cada %s meses"},t.prototype.commaOnDayX0OfTheMonth=function(){return", no dia %s do mês"},t.prototype.commaOnlyInX0=function(){return", somente em %s"},t.prototype.commaOnlyOnX0=function(){return", somente de %s"},t.prototype.commaAndOnX0=function(){return", e de %s"},t.prototype.commaOnThe=function(){return", na "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", no último dia do mês"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", no último dia da semana do mês"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dias antes do último dia do mês"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", na última %s do mês"},t.prototype.commaOnTheX0OfTheMonth=function(){return", no %s do mês"},t.prototype.commaX0ThroughX1=function(){return", de %s a %s"},t.prototype.commaAndX0ThroughX1=function(){return", e de %s a %s"},t.prototype.everyHour=function(){return"a cada hora"},t.prototype.everyMinute=function(){return"a cada minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"a cada minuto entre %s e %s"},t.prototype.everySecond=function(){return"a cada segundo"},t.prototype.everyX0Hours=function(){return"a cada %s horas"},t.prototype.everyX0Minutes=function(){return"a cada %s minutos"},t.prototype.everyX0Seconds=function(){return"a cada %s segundos"},t.prototype.fifth=function(){return"quinta"},t.prototype.first=function(){return"primeira"},t.prototype.firstWeekday=function(){return"primeiro dia da semana"},t.prototype.fourth=function(){return"quarta"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"do minuto %s até %s de cada hora"},t.prototype.second=function(){return"segunda"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"No segundo %s até %s de cada minuto"},t.prototype.spaceAnd=function(){return" e"},t.prototype.spaceX0OfTheMonth=function(){return" %s do mês"},t.prototype.lastDay=function(){return"o último dia"},t.prototype.third=function(){return"terceira"},t.prototype.weekdayNearestDayX0=function(){return"dia da semana mais próximo do dia %s"},t.prototype.commaEveryX0Years=function(){return", a cada %s anos"},t.prototype.commaStartingX0=function(){return", iniciando %s"},t.prototype.daysOfTheWeek=function(){return["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},t.prototype.monthsOfTheYear=function(){return["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},t}();e.pt_PT=n},408:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ro=void 0;var n=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Eroare la generarea descrierii. Verificați sintaxa."},t.prototype.at=function(){return"La"},t.prototype.atSpace=function(){return"La "},t.prototype.atX0=function(){return"la %s"},t.prototype.atX0MinutesPastTheHour=function(){return"la și %s minute"},t.prototype.atX0SecondsPastTheMinute=function(){return"la și %s secunde"},t.prototype.betweenX0AndX1=function(){return"între %s și %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", între zilele %s și %s ale lunii"},t.prototype.commaEveryDay=function(){return", în fiecare zi"},t.prototype.commaEveryX0Days=function(){return", la fiecare %s zile"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", la fiecare a %s-a zi a săptămânii"},t.prototype.commaEveryX0Months=function(){return", la fiecare %s luni"},t.prototype.commaEveryX0Years=function(){return", o dată la %s ani"},t.prototype.commaOnDayX0OfTheMonth=function(){return", în ziua %s a lunii"},t.prototype.commaOnlyInX0=function(){return", doar în %s"},t.prototype.commaOnlyOnX0=function(){return", doar %s"},t.prototype.commaAndOnX0=function(){return", și %s"},t.prototype.commaOnThe=function(){return", în "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", în ultima zi a lunii"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", în ultima zi lucrătoare a lunii"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s zile înainte de ultima zi a lunii"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", în ultima %s a lunii"},t.prototype.commaOnTheX0OfTheMonth=function(){return", în %s a lunii"},t.prototype.commaX0ThroughX1=function(){return", de %s până %s"},t.prototype.commaAndX0ThroughX1=function(){return", și de %s până %s"},t.prototype.everyHour=function(){return"în fiecare oră"},t.prototype.everyMinute=function(){return"în fiecare minut"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"În fiecare minut între %s și %s"},t.prototype.everySecond=function(){return"în fiecare secundă"},t.prototype.everyX0Hours=function(){return"la fiecare %s ore"},t.prototype.everyX0Minutes=function(){return"la fiecare %s minute"},t.prototype.everyX0Seconds=function(){return"la fiecare %s secunde"},t.prototype.fifth=function(){return"a cincea"},t.prototype.first=function(){return"prima"},t.prototype.firstWeekday=function(){return"prima zi a săptămânii"},t.prototype.fourth=function(){return"a patra"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"între minutele %s și %s"},t.prototype.second=function(){return"a doua"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"între secunda %s și secunda %s"},t.prototype.spaceAnd=function(){return" și"},t.prototype.spaceX0OfTheMonth=function(){return" %s a lunii"},t.prototype.lastDay=function(){return"ultima zi"},t.prototype.third=function(){return"a treia"},t.prototype.weekdayNearestDayX0=function(){return"cea mai apropiată zi a săptămânii de ziua %s"},t.prototype.commaMonthX0ThroughMonthX1=function(){return", din %s până în %s"},t.prototype.commaYearX0ThroughYearX1=function(){return", din %s până în %s"},t.prototype.atX0MinutesPastTheHourGt20=function(){return"la și %s de minute"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return"la și %s de secunde"},t.prototype.commaStartingX0=function(){return", pornire %s"},t.prototype.daysOfTheWeek=function(){return["duminică","luni","marți","miercuri","joi","vineri","sâmbătă"]},t.prototype.monthsOfTheYear=function(){return["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"]},t}();e.ro=n},392:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ru=void 0;var n=function(t,e){var n=Number(t);return void 0!==n?e[n%100>4&&n%100<20?2:[2,0,1,1,1,2][n%10<5?Math.abs(n)%10:5]]:e[2]},o=function(t,e){var n=Number(t);return void 0!==n?e[0===n?0:1===n||2===n||4===n?1:2]:e[1]},r=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"каждую минуту"},t.prototype.everyHour=function(){return"каждый час"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Произошла ошибка во время генерации описания выражения. Проверьте синтаксис крон-выражения."},t.prototype.atSpace=function(){return"В "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Каждую минуту с %s по %s"},t.prototype.at=function(){return"В"},t.prototype.spaceAnd=function(){return" и"},t.prototype.everySecond=function(){return"каждую секунду"},t.prototype.everyX0Seconds=function(t){return n(t,["каждую %s секунду","каждые %s секунды","каждые %s секунд"])},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"секунды с %s по %s"},t.prototype.atX0SecondsPastTheMinute=function(t){return n(t,["в %s секунду","в %s секунды","в %s секунд"])},t.prototype.everyX0Minutes=function(t){return n(t,["каждую %s минуту","каждые %s минуты","каждые %s минут"])},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"минуты с %s по %s"},t.prototype.atX0MinutesPastTheHour=function(t){return n(t,["в %s минуту","в %s минуты","в %s минут"])},t.prototype.everyX0Hours=function(t){return n(t,["каждый %s час","каждые %s часа","каждые %s часов"])},t.prototype.betweenX0AndX1=function(){return"с %s по %s"},t.prototype.atX0=function(){return"в %s"},t.prototype.commaEveryDay=function(){return", каждый день"},t.prototype.commaEveryX0DaysOfTheWeek=function(t){return n(t,["",", каждые %s дня недели",", каждые %s дней недели"])},t.prototype.commaX0ThroughX1=function(t){return!t||"2"!=t[0]&&"3"!=t[0]?", с %s по %s":", со %s по %s"},t.prototype.commaAndX0ThroughX1=function(t){return!t||"2"!=t[0]&&"3"!=t[0]?" и с %s по %s":" и со %s по %s"},t.prototype.first=function(t){return o(t,["первое","первый","первую"])},t.prototype.second=function(t){return o(t,["второе","второй","вторую"])},t.prototype.third=function(t){return o(t,["третье","третий","третью"])},t.prototype.fourth=function(t){return o(t,["четвертое","четвертый","четвертую"])},t.prototype.fifth=function(t){return o(t,["пятое","пятый","пятую"])},t.prototype.commaOnThe=function(t){return"2"===t?", во ":", в "},t.prototype.spaceX0OfTheMonth=function(){return" %s месяца"},t.prototype.lastDay=function(){return"последний день"},t.prototype.commaOnTheLastX0OfTheMonth=function(t){return o(t,[", в последнее %s месяца",", в последний %s месяца",", в последнюю %s месяца"])},t.prototype.commaOnlyOnX0=function(t){return t&&"2"===t[0]?", только во %s":", только в %s"},t.prototype.commaAndOnX0=function(){return", и %s"},t.prototype.commaEveryX0Months=function(t){return n(t,[""," каждые %s месяца"," каждые %s месяцев"])},t.prototype.commaOnlyInMonthX0=function(){return", только %s"},t.prototype.commaOnlyInX0=function(){return", только в %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", в последний день месяца"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", в последний будний день месяца"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(t){return n(t,[", за %s день до конца месяца",", за %s дня до конца месяца",", за %s дней до конца месяца"])},t.prototype.firstWeekday=function(){return"первый будний день"},t.prototype.weekdayNearestDayX0=function(){return"ближайший будний день к %s числу"},t.prototype.commaOnTheX0OfTheMonth=function(){return", в %s месяца"},t.prototype.commaEveryX0Days=function(t){return n(t,[", каждый %s день",", каждые %s дня",", каждые %s дней"])},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(t){return t&&"2"==t.substring(0,t.indexOf("-"))?", со %s по %s число месяца":", с %s по %s число месяца"},t.prototype.commaOnDayX0OfTheMonth=function(t){return t&&"2"==t[0]?", во %s число месяца":", в %s число месяца"},t.prototype.commaEveryX0Years=function(t){return n(t,[", каждый %s год",", каждые %s года",", каждые %s лет"])},t.prototype.commaStartingX0=function(){return", начало %s"},t.prototype.daysOfTheWeek=function(){return["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"]},t.prototype.daysOfTheWeekInCase=function(t){return void 0===t&&(t=2),1==t?["воскресенья","понедельника","вторника","среды","четверга","пятницы","субботы"]:["воскресенье","понедельник","вторник","среду","четверг","пятницу","субботу"]},t.prototype.monthsOfTheYear=function(){return["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"]},t.prototype.monthsOfTheYearInCase=function(t){return 1==t?["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"]:this.monthsOfTheYear()},t}();e.ru=r},203:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.sk=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Pri vytváraní popisu došlo k chybe. Skontrolujte prosím správnosť syntaxe cronu."},t.prototype.everyMinute=function(){return"každú minútu"},t.prototype.everyHour=function(){return"každú hodinu"},t.prototype.atSpace=function(){return"V "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Každú minútu medzi %s a %s"},t.prototype.at=function(){return"V"},t.prototype.spaceAnd=function(){return" a"},t.prototype.everySecond=function(){return"každú sekundu"},t.prototype.everyX0Seconds=function(){return"každých %s sekúnd"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundy od %s do %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"v %s sekúnd"},t.prototype.everyX0Minutes=function(){return"každých %s minút"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minúty od %s do %s"},t.prototype.atX0MinutesPastTheHour=function(){return"v %s minút"},t.prototype.everyX0Hours=function(){return"každých %s hodín"},t.prototype.betweenX0AndX1=function(){return"medzi %s a %s"},t.prototype.atX0=function(){return"v %s"},t.prototype.commaEveryDay=function(){return", každý deň"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", každých %s dní v týždni"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", a od %s do %s"},t.prototype.first=function(){return"prvý"},t.prototype.second=function(){return"druhý"},t.prototype.third=function(){return"tretí"},t.prototype.fourth=function(){return"štvrtý"},t.prototype.fifth=function(){return"piaty"},t.prototype.commaOnThe=function(){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s v mesiaci"},t.prototype.lastDay=function(){return"posledný deň"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", posledný %s v mesiaci"},t.prototype.commaOnlyOnX0=function(){return", iba v %s"},t.prototype.commaAndOnX0=function(){return", a v %s"},t.prototype.commaEveryX0Months=function(){return", každých %s mesiacov"},t.prototype.commaOnlyInX0=function(){return", iba v %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", posledný deň v mesiaci"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", posledný pracovný deň v mesiaci"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dní pred posledným dňom v mesiaci"},t.prototype.firstWeekday=function(){return"prvý pracovný deň"},t.prototype.weekdayNearestDayX0=function(){return"pracovný deň najbližšie %s. dňu"},t.prototype.commaOnTheX0OfTheMonth=function(){return", v %s v mesiaci"},t.prototype.commaEveryX0Days=function(){return", každých %s dní"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", medzi dňami %s a %s v mesiaci"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s. deň v mesiaci"},t.prototype.commaEveryX0Years=function(){return", každých %s rokov"},t.prototype.commaStartingX0=function(){return", začínajúcich %s"},t.prototype.daysOfTheWeek=function(){return["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},t.prototype.monthsOfTheYear=function(){return["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"]},t}();e.sk=n},738:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.sl=void 0;var n=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Pri generiranju opisa izraza je prišlo do napake. Preverite sintakso izraza cron."},t.prototype.at=function(){return"Ob"},t.prototype.atSpace=function(){return"Ob "},t.prototype.atX0=function(){return"ob %s"},t.prototype.atX0MinutesPastTheHour=function(){return"ob %s."},t.prototype.atX0SecondsPastTheMinute=function(){return"ob %s."},t.prototype.betweenX0AndX1=function(){return"od %s do %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", od %s. do %s. dne v mesecu"},t.prototype.commaEveryDay=function(){return", vsak dan"},t.prototype.commaEveryX0Days=function(){return", vsakih %s dni"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", vsakih %s dni v tednu"},t.prototype.commaEveryX0Months=function(){return", vsakih %s mesecev"},t.prototype.commaEveryX0Years=function(){return", vsakih %s let"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s. dan v mesecu"},t.prototype.commaOnlyInX0=function(){return", samo v %s"},t.prototype.commaOnlyOnX0=function(){return", samo v %s"},t.prototype.commaAndOnX0=function(){return"in naprej %s"},t.prototype.commaOnThe=function(){return", "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", zadnji %s v mesecu"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", zadnji delovni dan v mesecu"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dni pred koncem meseca"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", zadnji %s v mesecu"},t.prototype.commaOnTheX0OfTheMonth=function(){return", %s v mesecu"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", in od %s do %s"},t.prototype.everyHour=function(){return"vsako uro"},t.prototype.everyMinute=function(){return"vsako minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Vsako minuto od %s do %s"},t.prototype.everySecond=function(){return"vsako sekundo"},t.prototype.everyX0Hours=function(){return"vsakih %s ur"},t.prototype.everyX0Minutes=function(){return"vsakih %s minut"},t.prototype.everyX0Seconds=function(){return"vsakih %s sekund"},t.prototype.fifth=function(){return"peti"},t.prototype.first=function(){return"prvi"},t.prototype.firstWeekday=function(){return"prvi delovni dan"},t.prototype.fourth=function(){return"četrti"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minute od %s do %s"},t.prototype.second=function(){return"drugi"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunde od %s do %s"},t.prototype.spaceAnd=function(){return" in"},t.prototype.spaceX0OfTheMonth=function(){return" %s v mesecu"},t.prototype.lastDay=function(){return"zadnjič"},t.prototype.third=function(){return"tretji"},t.prototype.weekdayNearestDayX0=function(){return"delovni dan, najbližji %s. dnevu"},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.commaStartingX0=function(){return", začenši %s"},t.prototype.daysOfTheWeek=function(){return["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},t.prototype.monthsOfTheYear=function(){return["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"]},t}();e.sl=n},673:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.sv=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ett fel inträffade vid generering av uttryckets beskrivning. Kontrollera cron-uttryckets syntax."},t.prototype.everyMinute=function(){return"varje minut"},t.prototype.everyHour=function(){return"varje timme"},t.prototype.atSpace=function(){return"Kl "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Varje minut mellan %s och %s"},t.prototype.at=function(){return"Kl"},t.prototype.spaceAnd=function(){return" och"},t.prototype.everySecond=function(){return"varje sekund"},t.prototype.everyX0Seconds=function(){return"varje %s sekund"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunderna från %s till och med %s efter minuten"},t.prototype.atX0SecondsPastTheMinute=function(){return"på %s sekunder efter minuten"},t.prototype.everyX0Minutes=function(){return"var %s minut"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuterna från %s till och med %s efter timmen"},t.prototype.atX0MinutesPastTheHour=function(){return"på %s minuten efter timmen"},t.prototype.everyX0Hours=function(){return"var %s timme"},t.prototype.betweenX0AndX1=function(){return"mellan %s och %s"},t.prototype.atX0=function(){return"kl %s"},t.prototype.commaEveryDay=function(){return", varje dag"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", var %s dag i veckan"},t.prototype.commaX0ThroughX1=function(){return", %s till %s"},t.prototype.commaAndX0ThroughX1=function(){return", och %s till %s"},t.prototype.first=function(){return"första"},t.prototype.second=function(){return"andra"},t.prototype.third=function(){return"tredje"},t.prototype.fourth=function(){return"fjärde"},t.prototype.fifth=function(){return"femte"},t.prototype.commaOnThe=function(){return", den "},t.prototype.spaceX0OfTheMonth=function(){return" %sen av månaden"},t.prototype.lastDay=function(){return"den sista dagen"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", på sista %s av månaden"},t.prototype.commaOnlyOnX0=function(){return", varje %s"},t.prototype.commaAndOnX0=function(){return", och på %s"},t.prototype.commaEveryX0Months=function(){return", var %s månad"},t.prototype.commaOnlyInX0=function(){return", bara på %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", på sista dagen av månaden"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", på sista veckodag av månaden"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dagar före den sista dagen i månaden"},t.prototype.firstWeekday=function(){return"första veckodag"},t.prototype.weekdayNearestDayX0=function(){return"veckodagen närmast dag %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", på den %s av månaden"},t.prototype.commaEveryX0Days=function(){return", var %s dag"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mellan dag %s och %s av månaden"},t.prototype.commaOnDayX0OfTheMonth=function(){return", på dag %s av månaden"},t.prototype.commaEveryX0Years=function(){return", var %s år"},t.prototype.commaStartingX0=function(){return", startar %s"},t.prototype.daysOfTheWeek=function(){return["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"]},t.prototype.monthsOfTheYear=function(){return["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"]},t}();e.sv=n},286:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.sw=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Kuna tatizo wakati wa kutunga msemo. Angalia cron expression syntax."},t.prototype.everyMinute=function(){return"kila dakika"},t.prototype.everyHour=function(){return"kila saa"},t.prototype.atSpace=function(){return"Kwa "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Kila dakika kwanzia %s hadi %s"},t.prototype.at=function(){return"Kwa"},t.prototype.spaceAnd=function(){return" na"},t.prototype.everySecond=function(){return"kila sekunde"},t.prototype.everyX0Seconds=function(){return"kila sekunde %s"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunde ya %s hadi %s baada ya dakika"},t.prototype.atX0SecondsPastTheMinute=function(){return"sekunde %s baada ya dakika"},t.prototype.everyX0Minutes=function(){return"kila dakika %s"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},t.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},t.prototype.everyX0Hours=function(){return"every %s hours"},t.prototype.betweenX0AndX1=function(){return"kati ya %s na %s"},t.prototype.atX0=function(){return"kwenye %s"},t.prototype.commaEveryDay=function(){return", kila siku"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", kila siku %s ya wiki"},t.prototype.commaX0ThroughX1=function(){return", %s hadi %s"},t.prototype.commaAndX0ThroughX1=function(){return", na %s hadi %s"},t.prototype.first=function(){return"ya kwanza"},t.prototype.second=function(){return"ya pili"},t.prototype.third=function(){return"ya tatu"},t.prototype.fourth=function(){return"ya nne"},t.prototype.fifth=function(){return"ya tano"},t.prototype.commaOnThe=function(){return", kwenye "},t.prototype.spaceX0OfTheMonth=function(){return" siku %s ya mwezi"},t.prototype.lastDay=function(){return"siku ya mwisho"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", siku ya %s ya mwezi"},t.prototype.commaOnlyOnX0=function(){return", kwa %s tu"},t.prototype.commaAndOnX0=function(){return", na pia %s"},t.prototype.commaEveryX0Months=function(){return", kila mwezi wa %s"},t.prototype.commaOnlyInX0=function(){return", kwa %s tu"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", siku ya mwisho wa mwezi"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", wikendi ya mwisho wa mwezi"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", siku ya %s kabla ya siku ya mwisho wa mwezi"},t.prototype.firstWeekday=function(){return"siku za kazi ya kwanza"},t.prototype.weekdayNearestDayX0=function(){return"siku ya kazi karibu na siku ya %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", siku ya %s ya mwezi"},t.prototype.commaEveryX0Days=function(){return", kila siku %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", kati ya siku %s na %s ya mwezi"},t.prototype.commaOnDayX0OfTheMonth=function(){return", siku ya %s ya mwezi"},t.prototype.commaEveryX0Years=function(){return", kila miaka %s"},t.prototype.commaStartingX0=function(){return", kwanzia %s"},t.prototype.daysOfTheWeek=function(){return["Jumapili","Jumatatu","Jumanne","Jumatano","Alhamisi","Ijumaa","Jumamosi"]},t.prototype.monthsOfTheYear=function(){return["Januari","Februari","Machi","Aprili","Mei","Juni","Julai","Agosti","Septemba","Oktoba","Novemba","Desemba"]},t}();e.sw=n},312:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.th=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"เกิดข้อผิดพลาดขณะสร้างคำอธิบายนิพจน์ ตรวจสอบไวยากรณ์นิพจน์ครอน"},t.prototype.everyMinute=function(){return"ทุกๆ นาที"},t.prototype.everyHour=function(){return"ทุกๆ ชั่วโมง"},t.prototype.atSpace=function(){return"เมื่อ "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"ทุกๆ นาที %s และ %s"},t.prototype.at=function(){return"เมื่อ"},t.prototype.spaceAnd=function(){return" และ"},t.prototype.everySecond=function(){return"ทุกๆ วินาที"},t.prototype.everyX0Seconds=function(){return"ทุกๆ %s วินาที"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"วินาที %s ถึง %s นาทีที่ผ่านมา"},t.prototype.atX0SecondsPastTheMinute=function(){return"เมื่อ %s วินาที นาทีที่ผ่านมา"},t.prototype.everyX0Minutes=function(){return"ทุกๆ %s นาที"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"นาที %s ถึง %s ชั่วโมงที่ผ่านมา"},t.prototype.atX0MinutesPastTheHour=function(){return"เมื่อ %s นาที ชั่วโมงที่ผ่านมา"},t.prototype.everyX0Hours=function(){return"ทุกๆ %s ชั่วโมง"},t.prototype.betweenX0AndX1=function(){return"ระหว่าง %s ถึง %s"},t.prototype.atX0=function(){return"เมื่อ %s"},t.prototype.commaEveryDay=function(){return", ทุกๆ วัน"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", ทุกๆ %s วันของสัปดาห์"},t.prototype.commaX0ThroughX1=function(){return", %s ถึง %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s ถึง %s"},t.prototype.first=function(){return"แรก"},t.prototype.second=function(){return"ที่สอง"},t.prototype.third=function(){return"ที่สาม"},t.prototype.fourth=function(){return"ที่สี่"},t.prototype.fifth=function(){return"ที่ห้า"},t.prototype.commaOnThe=function(){return", ในวัน "},t.prototype.spaceX0OfTheMonth=function(){return" %s ของเดือน"},t.prototype.lastDay=function(){return"วันสุดท้าย"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", ณ สุดท้าย %s ของเดือน"},t.prototype.commaOnlyOnX0=function(){return", เท่านั้น %s"},t.prototype.commaAndOnX0=function(){return", และใน %s"},t.prototype.commaEveryX0Months=function(){return", ทุกๆ %s เดือน"},t.prototype.commaOnlyInX0=function(){return", เท่านั้น %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ในวันสิ้นเดือน"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ในวันธรรมดาสุดท้ายของเดือน"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s วันก่อนวันสุดท้ายของเดือน"},t.prototype.firstWeekday=function(){return"วันธรรมดาวันแรก"},t.prototype.weekdayNearestDayX0=function(){return"วันธรรมดาที่ใกล้ที่สุด %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", ในวัน %s ของเดือน"},t.prototype.commaEveryX0Days=function(){return", ทุกๆ %s วัน"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", ระหว่างวัน %s และ %s ของเดือน"},t.prototype.commaOnDayX0OfTheMonth=function(){return", ในวัน %s ของเดือน"},t.prototype.commaEveryHour=function(){return", ทุกๆ ชั่วโมง"},t.prototype.commaEveryX0Years=function(){return", ทุกๆ %s ปี"},t.prototype.commaStartingX0=function(){return", เริ่ม %s"},t.prototype.daysOfTheWeek=function(){return["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"]},t.prototype.monthsOfTheYear=function(){return["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"]},t}();e.th=n},999:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.tr=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"her dakika"},t.prototype.everyHour=function(){return"her saat"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"İfade açıklamasını oluştururken bir hata oluştu. Cron ifadesini gözden geçirin."},t.prototype.atSpace=function(){return"Saat "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Saat %s ve %s arasındaki her dakika"},t.prototype.at=function(){return"Saat"},t.prototype.spaceAnd=function(){return" ve"},t.prototype.everySecond=function(){return"her saniye"},t.prototype.everyX0Seconds=function(){return"her %s saniyede bir"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"dakikaların %s. ve %s. saniyeleri arası"},t.prototype.atX0SecondsPastTheMinute=function(){return"dakikaların %s. saniyesinde"},t.prototype.everyX0Minutes=function(){return"her %s dakikada bir"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"saatlerin %s. ve %s. dakikaları arası"},t.prototype.atX0MinutesPastTheHour=function(){return"saatlerin %s. dakikasında"},t.prototype.everyX0Hours=function(){return"her %s saatte"},t.prototype.betweenX0AndX1=function(){return"%s ile %s arasında"},t.prototype.atX0=function(){return"saat %s"},t.prototype.commaEveryDay=function(){return", her gün"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", ayın her %s günü"},t.prototype.commaX0ThroughX1=function(){return", %s ile %s arasında"},t.prototype.commaAndX0ThroughX1=function(){return", ve %s ile %s arasında"},t.prototype.first=function(){return"ilk"},t.prototype.second=function(){return"ikinci"},t.prototype.third=function(){return"üçüncü"},t.prototype.fourth=function(){return"dördüncü"},t.prototype.fifth=function(){return"beşinci"},t.prototype.commaOnThe=function(){return", ayın "},t.prototype.spaceX0OfTheMonth=function(){return" %s günü"},t.prototype.lastDay=function(){return"son gün"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", ayın son %s günü"},t.prototype.commaOnlyOnX0=function(){return", sadece %s günü"},t.prototype.commaAndOnX0=function(){return", ve %s"},t.prototype.commaEveryX0Months=function(){return", %s ayda bir"},t.prototype.commaOnlyInX0=function(){return", sadece %s için"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ayın son günü"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ayın son iş günü"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s ayın son gününden önceki günler"},t.prototype.firstWeekday=function(){return"ilk iş günü"},t.prototype.weekdayNearestDayX0=function(){return"%s. günü sonrasındaki ilk iş günü"},t.prototype.commaOnTheX0OfTheMonth=function(){return", ayın %s"},t.prototype.commaEveryX0Days=function(){return", %s günde bir"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", ayın %s. ve %s. günleri arası"},t.prototype.commaOnDayX0OfTheMonth=function(){return", ayın %s. günü"},t.prototype.commaEveryX0Years=function(){return", %s yılda bir"},t.prototype.commaStartingX0=function(){return", başlangıç %s"},t.prototype.daysOfTheWeek=function(){return["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},t.prototype.monthsOfTheYear=function(){return["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"]},t}();e.tr=n},716:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.uk=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"щохвилини"},t.prototype.everyHour=function(){return"щогодини"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"ВІдбулася помилка підчас генерації опису. Перевірта правильність написання cron виразу."},t.prototype.atSpace=function(){return"О "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Щохвилини між %s та %s"},t.prototype.at=function(){return"О"},t.prototype.spaceAnd=function(){return" та"},t.prototype.everySecond=function(){return"Щосекунди"},t.prototype.everyX0Seconds=function(){return"кожні %s секунд"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"з %s по %s секунду"},t.prototype.atX0SecondsPastTheMinute=function(){return"о %s секунді"},t.prototype.everyX0Minutes=function(){return"кожні %s хвилин"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"з %s по %s хвилину"},t.prototype.atX0MinutesPastTheHour=function(){return"о %s хвилині"},t.prototype.everyX0Hours=function(){return"кожні %s годин"},t.prototype.betweenX0AndX1=function(){return"між %s та %s"},t.prototype.atX0=function(){return"о %s"},t.prototype.commaEveryDay=function(){return", щоденно"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", кожен %s день тижня"},t.prototype.commaX0ThroughX1=function(){return", %s по %s"},t.prototype.commaAndX0ThroughX1=function(){return", та %s по %s"},t.prototype.first=function(){return"перший"},t.prototype.second=function(){return"другий"},t.prototype.third=function(){return"третій"},t.prototype.fourth=function(){return"четвертий"},t.prototype.fifth=function(){return"п'ятий"},t.prototype.commaOnThe=function(){return", в "},t.prototype.spaceX0OfTheMonth=function(){return" %s місяця"},t.prototype.lastDay=function(){return"останній день"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", в останній %s місяця"},t.prototype.commaOnlyOnX0=function(){return", тільки в %s"},t.prototype.commaAndOnX0=function(){return", і в %s"},t.prototype.commaEveryX0Months=function(){return", кожен %s місяць"},t.prototype.commaOnlyInX0=function(){return", тільки в %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", в останній день місяця"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", в останній будень місяця"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s днів до останнього дня місяця"},t.prototype.firstWeekday=function(){return"перший будень"},t.prototype.weekdayNearestDayX0=function(){return"будень найближчий до %s дня"},t.prototype.commaOnTheX0OfTheMonth=function(){return", в %s місяця"},t.prototype.commaEveryX0Days=function(){return", кожен %s день"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", між %s та %s днями місяця"},t.prototype.commaOnDayX0OfTheMonth=function(){return", на %s день місяця"},t.prototype.commaEveryX0Years=function(){return", кожні %s роки"},t.prototype.commaStartingX0=function(){return", початок %s"},t.prototype.daysOfTheWeek=function(){return["неділя","понеділок","вівторок","середа","четвер","п'ятниця","субота"]},t.prototype.monthsOfTheYear=function(){return["січень","лютий","березень","квітень","травень","червень","липень","серпень","вересень","жовтень","листопад","грудень"]},t}();e.uk=n},533:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.vi=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Đã xảy ra lỗi khi tạo mô tả biểu thức. Vui lòng kiểm tra cú pháp biểu thức cron."},t.prototype.everyMinute=function(){return"mỗi phút"},t.prototype.everyHour=function(){return"mỗi giờ"},t.prototype.atSpace=function(){return"Vào "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Mỗi phút giữa %s and %s"},t.prototype.at=function(){return"Vào"},t.prototype.spaceAnd=function(){return" và"},t.prototype.everySecond=function(){return"mỗi giây"},t.prototype.everyX0Seconds=function(){return"mỗi %s giây"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"giây thứ %s qua phút thứ %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"tại giây thứ %s của mỗi phút"},t.prototype.everyX0Minutes=function(){return"mỗi %s phút"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"phút thứ %s qua %s tiếng"},t.prototype.atX0MinutesPastTheHour=function(){return"vào %s phút của mỗi tiếng"},t.prototype.everyX0Hours=function(){return"mỗi %s tiếng"},t.prototype.betweenX0AndX1=function(){return"giữa %s và %s"},t.prototype.atX0=function(){return"vào %s"},t.prototype.commaEveryDay=function(){return", mỗi ngày"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", mỗi %s ngày trong tuần"},t.prototype.commaX0ThroughX1=function(){return", %s đến %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s đến %s"},t.prototype.first=function(){return"đầu tiên"},t.prototype.second=function(){return"thứ 2"},t.prototype.third=function(){return"thứ 3"},t.prototype.fourth=function(){return"thứ 4"},t.prototype.fifth=function(){return"thứ 5"},t.prototype.commaOnThe=function(){return", trên "},t.prototype.spaceX0OfTheMonth=function(){return" %s của tháng"},t.prototype.lastDay=function(){return"ngày cuối cùng"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", vào ngày %s cuối cùng của tháng"},t.prototype.commaOnlyOnX0=function(){return", chỉ trên %s"},t.prototype.commaAndOnX0=function(){return", và hơn %s"},t.prototype.commaEveryX0Months=function(){return", mỗi ngày %s tháng"},t.prototype.commaOnlyInX0=function(){return", chỉ trong %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", vào ngày cuối cùng của tháng"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", vào ngày cuối tuần của tháng"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s ngày trước ngày cuối cùng của tháng"},t.prototype.firstWeekday=function(){return"ngày đầu tuần"},t.prototype.weekdayNearestDayX0=function(){return"ngày trong tuần ngày gần nhất %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", vào ngày %s của tháng"},t.prototype.commaEveryX0Days=function(){return", mỗi %s ngày"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", giữa ngày %s và %s trong tháng"},t.prototype.commaOnDayX0OfTheMonth=function(){return", vào %s ngày trong tháng"},t.prototype.commaEveryHour=function(){return", mỗi tiếng"},t.prototype.commaEveryX0Years=function(){return", mỗi %s năm"},t.prototype.commaStartingX0=function(){return", bắt đầu %s"},t.prototype.daysOfTheWeek=function(){return["Chủ nhật","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"]},t.prototype.monthsOfTheYear=function(){return["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"]},t}();e.vi=n},419:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.zh_CN=void 0;var n=function(){function t(){}return t.prototype.setPeriodBeforeTime=function(){return!0},t.prototype.pm=function(){return"下午"},t.prototype.am=function(){return"上午"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return", 从%s年至%s年"},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.everyMinute=function(){return"每分钟"},t.prototype.everyHour=function(){return"每小时"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"生成表达式描述时发生了错误,请检查cron表达式语法。"},t.prototype.atSpace=function(){return"在"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"在 %s 至 %s 之间的每分钟"},t.prototype.at=function(){return"在"},t.prototype.spaceAnd=function(){return" 和"},t.prototype.everySecond=function(){return"每秒"},t.prototype.everyX0Seconds=function(){return"每隔 %s 秒"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"在每分钟的第 %s 到 %s 秒"},t.prototype.atX0SecondsPastTheMinute=function(){return"在每分钟的第 %s 秒"},t.prototype.everyX0Minutes=function(){return"每隔 %s 分钟"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"在每小时的第 %s 到 %s 分钟"},t.prototype.atX0MinutesPastTheHour=function(){return"在每小时的第 %s 分钟"},t.prototype.everyX0Hours=function(){return"每隔 %s 小时"},t.prototype.betweenX0AndX1=function(){return"在 %s 和 %s 之间"},t.prototype.atX0=function(){return"在%s"},t.prototype.commaEveryDay=function(){return", 每天"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", 每周的每 %s 天"},t.prototype.commaX0ThroughX1=function(){return", %s至%s"},t.prototype.commaAndX0ThroughX1=function(){return", 和%s至%s"},t.prototype.first=function(){return"第一个"},t.prototype.second=function(){return"第二个"},t.prototype.third=function(){return"第三个"},t.prototype.fourth=function(){return"第四个"},t.prototype.fifth=function(){return"第五个"},t.prototype.commaOnThe=function(){return", 限每月的"},t.prototype.spaceX0OfTheMonth=function(){return"%s"},t.prototype.lastDay=function(){return"本月最后一天"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", 限每月的最后一个%s"},t.prototype.commaOnlyOnX0=function(){return", 仅%s"},t.prototype.commaAndOnX0=function(){return", 或者为%s"},t.prototype.commaEveryX0Months=function(){return", 每隔 %s 个月"},t.prototype.commaOnlyInX0=function(){return", 仅限%s"},t.prototype.commaOnlyInMonthX0=function(){return", 仅于%s份"},t.prototype.commaOnlyInYearX0=function(){return", 仅于 %s 年"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", 限每月的最后一天"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", 限每月的最后一个工作日"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", 限每月最后%s天"},t.prototype.firstWeekday=function(){return"第一个工作日"},t.prototype.weekdayNearestDayX0=function(){return"最接近 %s 号的工作日"},t.prototype.commaOnTheX0OfTheMonth=function(){return", 限每月的%s"},t.prototype.commaEveryX0Days=function(){return", 每隔 %s 天"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", 限每月的 %s 至 %s 之间"},t.prototype.commaOnDayX0OfTheMonth=function(){return", 限每月%s"},t.prototype.commaEveryX0Years=function(){return", 每隔 %s 年"},t.prototype.commaStartingX0=function(){return", %s开始"},t.prototype.dayX0=function(){return" %s 号"},t.prototype.daysOfTheWeek=function(){return["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},t.prototype.monthsOfTheYear=function(){return["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},t}();e.zh_CN=n},139:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.zh_TW=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return", 從 %s 年至 %s 年"},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"每分鐘"},t.prototype.everyHour=function(){return"每小時"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"產生表達式描述時發生了錯誤,請檢查 cron 表達式語法。"},t.prototype.atSpace=function(){return"在 "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"在 %s 和 %s 之間的每分鐘"},t.prototype.at=function(){return"在"},t.prototype.spaceAnd=function(){return" 和"},t.prototype.everySecond=function(){return"每秒"},t.prototype.everyX0Seconds=function(){return"每 %s 秒"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"在每分鐘的 %s 到 %s 秒"},t.prototype.atX0SecondsPastTheMinute=function(){return"在每分鐘的 %s 秒"},t.prototype.everyX0Minutes=function(){return"每 %s 分鐘"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"在每小時的 %s 到 %s 分鐘"},t.prototype.atX0MinutesPastTheHour=function(){return"在每小時的 %s 分"},t.prototype.everyX0Hours=function(){return"每 %s 小時"},t.prototype.betweenX0AndX1=function(){return"在 %s 和 %s 之間"},t.prototype.atX0=function(){return"在 %s"},t.prototype.commaEveryDay=function(){return", 每天"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", 每週的每 %s 天"},t.prototype.commaX0ThroughX1=function(){return", %s 到 %s"},t.prototype.commaAndX0ThroughX1=function(){return", 和 %s 到 %s"},t.prototype.first=function(){return"第一個"},t.prototype.second=function(){return"第二個"},t.prototype.third=function(){return"第三個"},t.prototype.fourth=function(){return"第四個"},t.prototype.fifth=function(){return"第五個"},t.prototype.commaOnThe=function(){return", 在每月 "},t.prototype.spaceX0OfTheMonth=function(){return"%s "},t.prototype.lastDay=function(){return"最後一天"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", 每月的最後一個 %s "},t.prototype.commaOnlyOnX0=function(){return", 僅在 %s"},t.prototype.commaAndOnX0=function(){return", 或 %s"},t.prototype.commaEveryX0Months=function(){return", 每 %s 月"},t.prototype.commaOnlyInX0=function(){return", 僅在 %s"},t.prototype.commaOnlyInMonthX0=function(){return", 僅在 %s"},t.prototype.commaOnlyInYearX0=function(){return", 僅在 %s 年"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", 每月的最後一天"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", 每月的最後一個工作日"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s 這個月的最後一天的前幾天"},t.prototype.firstWeekday=function(){return"第一個工作日"},t.prototype.weekdayNearestDayX0=function(){return"最接近 %s 號的工作日"},t.prototype.commaOnTheX0OfTheMonth=function(){return", 每月的 %s "},t.prototype.commaEveryX0Days=function(){return", 每 %s 天"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", 在每月的 %s 和 %s 之間"},t.prototype.commaOnDayX0OfTheMonth=function(){return", 每月的 %s"},t.prototype.commaEveryX0Years=function(){return", 每 %s 年"},t.prototype.commaStartingX0=function(){return", %s 開始"},t.prototype.dayX0=function(){return" %s 號"},t.prototype.daysOfTheWeek=function(){return["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},t.prototype.monthsOfTheYear=function(){return["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},t}();e.zh_TW=n},586:(t,e)=>{function n(t,e){if(!t)throw new Error(e)}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(){}return t.secondRange=function(t){for(var e=t.split(","),o=0;o=0&&r<=59,"seconds part must be >= 0 and <= 59")}},t.minuteRange=function(t){for(var e=t.split(","),o=0;o=0&&r<=59,"minutes part must be >= 0 and <= 59")}},t.hourRange=function(t){for(var e=t.split(","),o=0;o=0&&r<=23,"hours part must be >= 0 and <= 23")}},t.dayOfMonthRange=function(t){for(var e=t.split(","),o=0;o=1&&r<=31,"DOM part must be >= 1 and <= 31")}},t.monthRange=function(t,e){for(var o=t.split(","),r=0;r=1&&u<=12,e?"month part must be >= 0 and <= 11":"month part must be >= 1 and <= 12")}},t.dayOfWeekRange=function(t,e){for(var o=t.split(","),r=0;r=0&&u<=6,e?"DOW part must be >= 0 and <= 6":"DOW part must be >= 1 and <= 7")}},t}();e.default=o},910:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.StringUtilities=void 0;var n=function(){function t(){}return t.format=function(t){for(var e=[],n=1;n-1}))},t}();e.StringUtilities=n}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var u=e[o]={exports:{}};return t[o](u,u.exports,n),u.exports}var o={};return(()=>{var t=o;Object.defineProperty(t,"__esModule",{value:!0}),t.toString=void 0;var e=n(728),r=n(282);e.ExpressionDescriptor.initialize(new r.allLocalesLoader),t.default=e.ExpressionDescriptor;var u=e.ExpressionDescriptor.toString;t.toString=u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/dist/cronstrue.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/dist/cronstrue.min.js new file mode 100644 index 00000000..aad3da05 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/dist/cronstrue.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("cronstrue",[],e):"object"==typeof exports?exports.cronstrue=e():t.cronstrue=e()}(globalThis,(()=>(()=>{"use strict";var t={794:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronParser=void 0;var r=n(586),o=function(){function t(t,e,n){void 0===e&&(e=!0),void 0===n&&(n=!1),this.expression=t,this.dayOfWeekStartIndexZero=e,this.monthStartIndexZero=n}return t.prototype.parse=function(){var t=this.extractParts(this.expression);return this.normalize(t),this.validate(t),t},t.prototype.extractParts=function(t){if(!this.expression)throw new Error("cron expression is empty");for(var e=t.trim().split(/[ ]+/),n=0;n7)throw new Error("Expression has ".concat(e.length," parts; too many!"));return e},t.prototype.normalize=function(t){var e=this;if(t[3]=t[3].replace("?","*"),t[5]=t[5].replace("?","*"),t[2]=t[2].replace("?","*"),0==t[0].indexOf("0/")&&(t[0]=t[0].replace("0/","*/")),0==t[1].indexOf("0/")&&(t[1]=t[1].replace("0/","*/")),0==t[2].indexOf("0/")&&(t[2]=t[2].replace("0/","*/")),0==t[3].indexOf("1/")&&(t[3]=t[3].replace("1/","*/")),0==t[4].indexOf("1/")&&(t[4]=t[4].replace("1/","*/")),0==t[6].indexOf("1/")&&(t[6]=t[6].replace("1/","*/")),t[5]=t[5].replace(/(^\d)|([^#/\s]\d)/g,(function(t){var n=t.replace(/\D/,""),r=n;return e.dayOfWeekStartIndexZero?"7"==n&&(r="0"):r=(parseInt(n)-1).toString(),t.replace(n,r)})),"L"==t[5]&&(t[5]="6"),"?"==t[3]&&(t[3]="*"),t[3].indexOf("W")>-1&&(t[3].indexOf(",")>-1||t[3].indexOf("-")>-1))throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");var n={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6};for(var r in n)t[5]=t[5].replace(new RegExp(r,"gi"),n[r].toString());t[4]=t[4].replace(/(^\d{1,2})|([^#/\s]\d{1,2})/g,(function(t){var n=t.replace(/\D/,""),r=n;return e.monthStartIndexZero&&(r=(parseInt(n)+1).toString()),t.replace(n,r)}));var o={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12};for(var i in o)t[4]=t[4].replace(new RegExp(i,"gi"),o[i].toString());"0"==t[0]&&(t[0]=""),/\*|\-|\,|\//.test(t[2])||!/\*|\//.test(t[1])&&!/\*|\//.test(t[0])||(t[2]+="-".concat(t[2]));for(var s=0;s-1&&!/^\*|\-|\,/.test(t[s])){var a=null;switch(s){case 4:a="12";break;case 5:a="6";break;case 6:a="9999";break;default:a=null}if(null!==a){var u=t[s].split("/");t[s]="".concat(u[0],"-").concat(a,"/").concat(u[1])}}},t.prototype.validate=function(t){this.assertNoInvalidCharacters("DOW",t[5]),this.assertNoInvalidCharacters("DOM",t[3]),this.validateRange(t)},t.prototype.validateRange=function(t){r.default.secondRange(t[0]),r.default.minuteRange(t[1]),r.default.hourRange(t[2]),r.default.dayOfMonthRange(t[3]),r.default.monthRange(t[4],this.monthStartIndexZero),r.default.dayOfWeekRange(t[5],this.dayOfWeekStartIndexZero)},t.prototype.assertNoInvalidCharacters=function(t,e){var n=e.match(/[A-KM-VX-Z]+/gi);if(n&&n.length)throw new Error("".concat(t," part contains invalid values: '").concat(n.toString(),"'"))},t}();e.CronParser=o},728:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ExpressionDescriptor=void 0;var r=n(910),o=n(794),i=function(){function t(e,n){if(this.expression=e,this.options=n,this.expressionParts=new Array(5),!this.options.locale&&t.defaultLocale&&(this.options.locale=t.defaultLocale),!t.locales[this.options.locale]){var r=Object.keys(t.locales)[0];console.warn("Locale '".concat(this.options.locale,"' could not be found; falling back to '").concat(r,"'.")),this.options.locale=r}this.i18n=t.locales[this.options.locale],void 0===n.use24HourTimeFormat&&(n.use24HourTimeFormat=this.i18n.use24HourTimeFormatByDefault())}return t.toString=function(e,n){var r=void 0===n?{}:n,o=r.throwExceptionOnParseError,i=void 0===o||o,s=r.verbose,a=void 0!==s&&s,u=r.dayOfWeekStartIndexZero,c=void 0===u||u,f=r.monthStartIndexZero,h=void 0!==f&&f,p=r.use24HourTimeFormat,l=r.locale,m=void 0===l?null:l,d=r.tzOffset;return new t(e,{throwExceptionOnParseError:i,verbose:a,dayOfWeekStartIndexZero:c,monthStartIndexZero:h,use24HourTimeFormat:p,locale:m,tzOffset:void 0===d?0:d}).getFullDescription()},t.initialize=function(e,n){void 0===n&&(n="en"),t.specialCharacters=["/","-",",","*"],t.defaultLocale=n,e.load(t.locales)},t.prototype.getFullDescription=function(){var t="";try{var e=new o.CronParser(this.expression,this.options.dayOfWeekStartIndexZero,this.options.monthStartIndexZero);this.expressionParts=e.parse();var n=this.getTimeOfDayDescription(),r=this.getDayOfMonthDescription(),i=this.getMonthDescription();t+=n+r+this.getDayOfWeekDescription()+i+this.getYearDescription(),t=(t=this.transformVerbosity(t,!!this.options.verbose)).charAt(0).toLocaleUpperCase()+t.substr(1)}catch(e){if(this.options.throwExceptionOnParseError)throw"".concat(e);t=this.i18n.anErrorOccuredWhenGeneratingTheExpressionD()}return t},t.prototype.getTimeOfDayDescription=function(){var e=this.expressionParts[0],n=this.expressionParts[1],o=this.expressionParts[2],i="";if(r.StringUtilities.containsAny(n,t.specialCharacters)||r.StringUtilities.containsAny(o,t.specialCharacters)||r.StringUtilities.containsAny(e,t.specialCharacters))if(e||!(n.indexOf("-")>-1)||n.indexOf(",")>-1||n.indexOf("/")>-1||r.StringUtilities.containsAny(o,t.specialCharacters))if(!e&&o.indexOf(",")>-1&&-1==o.indexOf("-")&&-1==o.indexOf("/")&&!r.StringUtilities.containsAny(n,t.specialCharacters)){var s=o.split(",");i+=this.i18n.at();for(var a=0;a1){var i=o[o.length-1].index;n=n.substring(0,i)+":59"+n.substring(i+3)}}return n},t.prototype.getDayOfWeekDescription=function(){var t=this,e=this.i18n.daysOfTheWeek();return"*"==this.expressionParts[5]?"":this.getSegmentDescription(this.expressionParts[5],this.i18n.commaEveryDay(),(function(n,r){var o=n;n.indexOf("#")>-1?o=n.substring(0,n.indexOf("#")):n.indexOf("L")>-1&&(o=o.replace("L",""));var i=parseInt(o);if(t.options.tzOffset){var s=t.expressionParts[2],a=parseInt(s)+(t.options.tzOffset?t.options.tzOffset:0);a>=24?i++:a<0&&i--,i>6?i=0:i<0&&(i=6)}var u=t.i18n.daysOfTheWeekInCase?t.i18n.daysOfTheWeekInCase(r)[i]:e[i];if(n.indexOf("#")>-1){var c=null,f=n.substring(n.indexOf("#")+1),h=n.substring(0,n.indexOf("#"));switch(f){case"1":c=t.i18n.first(h);break;case"2":c=t.i18n.second(h);break;case"3":c=t.i18n.third(h);break;case"4":c=t.i18n.fourth(h);break;case"5":c=t.i18n.fifth(h)}u=c+" "+u}return u}),(function(e){return 1==parseInt(e)?"":r.StringUtilities.format(t.i18n.commaEveryX0DaysOfTheWeek(e),e)}),(function(e){var n=e.substring(0,e.indexOf("-"));return"*"!=t.expressionParts[3]?t.i18n.commaAndX0ThroughX1(n):t.i18n.commaX0ThroughX1(n)}),(function(e){var n=null;if(e.indexOf("#")>-1){var r=e.substring(e.indexOf("#")+1);n=t.i18n.commaOnThe(r).trim()+t.i18n.spaceX0OfTheMonth()}else if(e.indexOf("L")>-1)n=t.i18n.commaOnTheLastX0OfTheMonth(e.replace("L",""));else{n="*"!=t.expressionParts[3]?t.i18n.commaAndOnX0():t.i18n.commaOnlyOnX0(e)}return n}))},t.prototype.getMonthDescription=function(){var t=this,e=this.i18n.monthsOfTheYear();return this.getSegmentDescription(this.expressionParts[4],"",(function(n,r){return r&&t.i18n.monthsOfTheYearInCase?t.i18n.monthsOfTheYearInCase(r)[parseInt(n)-1]:e[parseInt(n)-1]}),(function(e){return 1==parseInt(e)?"":r.StringUtilities.format(t.i18n.commaEveryX0Months(e),e)}),(function(e){return t.i18n.commaMonthX0ThroughMonthX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInMonthX0?t.i18n.commaOnlyInMonthX0():t.i18n.commaOnlyInX0()}))},t.prototype.getDayOfMonthDescription=function(){var t=this,e=null,n=this.expressionParts[3];switch(n){case"L":e=this.i18n.commaOnTheLastDayOfTheMonth();break;case"WL":case"LW":e=this.i18n.commaOnTheLastWeekdayOfTheMonth();break;default:var o=n.match(/(\d{1,2}W)|(W\d{1,2})/);if(o){var i=parseInt(o[0].replace("W","")),s=1==i?this.i18n.firstWeekday():r.StringUtilities.format(this.i18n.weekdayNearestDayX0(),i.toString());e=r.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(),s);break}var a=n.match(/L-(\d{1,2})/);if(a){var u=a[1];e=r.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(u),u);break}if("*"==n&&"*"!=this.expressionParts[5])return"";e=this.getSegmentDescription(n,this.i18n.commaEveryDay(),(function(e){return"L"==e?t.i18n.lastDay():t.i18n.dayX0?r.StringUtilities.format(t.i18n.dayX0(),e):e}),(function(e){return"1"==e?t.i18n.commaEveryDay():t.i18n.commaEveryX0Days(e)}),(function(e){return t.i18n.commaBetweenDayX0AndX1OfTheMonth(e)}),(function(e){return t.i18n.commaOnDayX0OfTheMonth(e)}))}return e},t.prototype.getYearDescription=function(){var t=this;return this.getSegmentDescription(this.expressionParts[6],"",(function(t){return/^\d+$/.test(t)?new Date(parseInt(t),1).getFullYear().toString():t}),(function(e){return r.StringUtilities.format(t.i18n.commaEveryX0Years(e),e)}),(function(e){return t.i18n.commaYearX0ThroughYearX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInYearX0?t.i18n.commaOnlyInYearX0():t.i18n.commaOnlyInX0()}))},t.prototype.getSegmentDescription=function(t,e,n,o,i,s){var a=null,u=t.indexOf("/")>-1,c=t.indexOf("-")>-1,f=t.indexOf(",")>-1;if(t)if("*"===t)a=e;else if(u||c||f)if(f){for(var h=t.split(","),p="",l=0;l0&&h.length>2&&(p+=",",l0&&h.length>1&&(l==h.length-1||2==h.length)&&(p+="".concat(this.i18n.spaceAnd()," ")),h[l].indexOf("/")>-1||h[l].indexOf("-")>-1){var m=h[l].indexOf("-")>-1&&-1==h[l].indexOf("/"),d=this.getSegmentDescription(h[l],e,n,o,m?this.i18n.commaX0ThroughX1:i,s);m&&(d=d.replace(", ","")),p+=d}else p+=u?this.getSegmentDescription(h[l],e,n,o,i,s):n(h[l]);a=u?p:r.StringUtilities.format(s(t),p)}else if(u){h=t.split("/");if(a=r.StringUtilities.format(o(h[1]),h[1]),h[0].indexOf("-")>-1){var y=this.generateRangeSegmentDescription(h[0],i,n);0!=y.indexOf(", ")&&(a+=", "),a+=y}else if(-1==h[0].indexOf("*")){var g=r.StringUtilities.format(s(h[0]),n(h[0]));g=g.replace(", ",""),a+=r.StringUtilities.format(this.i18n.commaStartingX0(),g)}}else c&&(a=this.generateRangeSegmentDescription(t,i,n));else a=r.StringUtilities.format(s(t),n(t));else a="";return a},t.prototype.generateRangeSegmentDescription=function(t,e,n){var o="",i=t.split("-"),s=n(i[0],1),a=n(i[1],2),u=e(t);return o+=r.StringUtilities.format(u,s,a)},t.prototype.formatTime=function(t,e,n){var r=0,o=0;this.options.tzOffset&&(r=this.options.tzOffset>0?Math.floor(this.options.tzOffset):Math.ceil(this.options.tzOffset),0!=(o=parseFloat((this.options.tzOffset%1).toFixed(2)))&&(o*=60));var i=parseInt(t)+r,s=parseInt(e)+o;s>=60?(s-=60,i+=1):s<0&&(s+=60,i-=1),i>=24?i-=24:i<0&&(i=24+i);var a="",u=!1;this.options.use24HourTimeFormat||(a=(u=!(!this.i18n.setPeriodBeforeTime||!this.i18n.setPeriodBeforeTime()))?"".concat(this.getPeriod(i)," "):" ".concat(this.getPeriod(i)),i>12&&(i-=12),0===i&&(i=12));var c="";return n&&(c=":".concat(("00"+n).substring(n.length))),"".concat(u?a:"").concat(("00"+i.toString()).substring(i.toString().length),":").concat(("00"+s.toString()).substring(s.toString().length)).concat(c).concat(u?"":a)},t.prototype.transformVerbosity=function(t,e){return e||(t=(t=(t=(t=t.replace(new RegExp(", ".concat(this.i18n.everyMinute()),"g"),"")).replace(new RegExp(", ".concat(this.i18n.everyHour()),"g"),"")).replace(new RegExp(this.i18n.commaEveryDay(),"g"),"")).replace(/\, ?$/,"")),t},t.prototype.getPeriod=function(t){return t>=12?this.i18n.pm&&this.i18n.pm()||"PM":this.i18n.am&&this.i18n.am()||"AM"},t.locales={},t}();e.ExpressionDescriptor=i},336:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.enLocaleLoader=void 0;var r=n(751),o=function(){function t(){}return t.prototype.load=function(t){t.en=new r.en},t}();e.enLocaleLoader=o},751:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.en=void 0;var n=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"An error occured when generating the expression description. Check the cron expression syntax."},t.prototype.everyMinute=function(){return"every minute"},t.prototype.everyHour=function(){return"every hour"},t.prototype.atSpace=function(){return"At "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Every minute between %s and %s"},t.prototype.at=function(){return"At"},t.prototype.spaceAnd=function(){return" and"},t.prototype.everySecond=function(){return"every second"},t.prototype.everyX0Seconds=function(){return"every %s seconds"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconds %s through %s past the minute"},t.prototype.atX0SecondsPastTheMinute=function(){return"at %s seconds past the minute"},t.prototype.everyX0Minutes=function(){return"every %s minutes"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},t.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},t.prototype.everyX0Hours=function(){return"every %s hours"},t.prototype.betweenX0AndX1=function(){return"between %s and %s"},t.prototype.atX0=function(){return"at %s"},t.prototype.commaEveryDay=function(){return", every day"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", every %s days of the week"},t.prototype.commaX0ThroughX1=function(){return", %s through %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s through %s"},t.prototype.first=function(){return"first"},t.prototype.second=function(){return"second"},t.prototype.third=function(){return"third"},t.prototype.fourth=function(){return"fourth"},t.prototype.fifth=function(){return"fifth"},t.prototype.commaOnThe=function(){return", on the "},t.prototype.spaceX0OfTheMonth=function(){return" %s of the month"},t.prototype.lastDay=function(){return"the last day"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", on the last %s of the month"},t.prototype.commaOnlyOnX0=function(){return", only on %s"},t.prototype.commaAndOnX0=function(){return", and on %s"},t.prototype.commaEveryX0Months=function(){return", every %s months"},t.prototype.commaOnlyInX0=function(){return", only in %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", on the last day of the month"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", on the last weekday of the month"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s days before the last day of the month"},t.prototype.firstWeekday=function(){return"first weekday"},t.prototype.weekdayNearestDayX0=function(){return"weekday nearest day %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", on the %s of the month"},t.prototype.commaEveryX0Days=function(){return", every %s days"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", between day %s and %s of the month"},t.prototype.commaOnDayX0OfTheMonth=function(){return", on day %s of the month"},t.prototype.commaEveryHour=function(){return", every hour"},t.prototype.commaEveryX0Years=function(){return", every %s years"},t.prototype.commaStartingX0=function(){return", starting %s"},t.prototype.daysOfTheWeek=function(){return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},t.prototype.monthsOfTheYear=function(){return["January","February","March","April","May","June","July","August","September","October","November","December"]},t}();e.en=n},586:(t,e)=>{function n(t,e){if(!t)throw new Error(e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.secondRange=function(t){for(var e=t.split(","),r=0;r=0&&o<=59,"seconds part must be >= 0 and <= 59")}},t.minuteRange=function(t){for(var e=t.split(","),r=0;r=0&&o<=59,"minutes part must be >= 0 and <= 59")}},t.hourRange=function(t){for(var e=t.split(","),r=0;r=0&&o<=23,"hours part must be >= 0 and <= 23")}},t.dayOfMonthRange=function(t){for(var e=t.split(","),r=0;r=1&&o<=31,"DOM part must be >= 1 and <= 31")}},t.monthRange=function(t,e){for(var r=t.split(","),o=0;o=1&&i<=12,e?"month part must be >= 0 and <= 11":"month part must be >= 1 and <= 12")}},t.dayOfWeekRange=function(t,e){for(var r=t.split(","),o=0;o=0&&i<=6,e?"DOW part must be >= 0 and <= 6":"DOW part must be >= 1 and <= 7")}},t}();e.default=r},910:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.StringUtilities=void 0;var n=function(){function t(){}return t.format=function(t){for(var e=[],n=1;n-1}))},t}();e.StringUtilities=n}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}var r={};return(()=>{var t=r;Object.defineProperty(t,"__esModule",{value:!0}),t.toString=void 0;var e=n(728),o=n(336);e.ExpressionDescriptor.initialize(new o.enLocaleLoader),t.default=e.ExpressionDescriptor;var i=e.ExpressionDescriptor.toString;t.toString=i})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/af.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/af.min.js new file mode 100644 index 00000000..14c71110 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/af.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/af.min",["cronstrue"],t):"object"==typeof exports?exports["locales/af.min"]=t(require("cronstrue")):e["locales/af.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,o),u.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{o.r(r);var e=o(34),t=o.n(e),n=r;Object.defineProperty(n,"__esModule",{value:!0}),n.af=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return", jaar %s na %s"},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Daar was 'n fout om die tydsuitdrukking the genereer. Raadpleeg asb die uitdrukking formaat."},e.prototype.everyMinute=function(){return"elke minuut"},e.prototype.everyHour=function(){return"elke uur"},e.prototype.atSpace=function(){return"Teen "},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Elke minuut tussen %s en %s"},e.prototype.at=function(){return"Teen"},e.prototype.spaceAnd=function(){return" en"},e.prototype.everySecond=function(){return"elke sekonde"},e.prototype.everyX0Seconds=function(){return"elke %s sekonde"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekonde %s deur na %s na die minuut"},e.prototype.atX0SecondsPastTheMinute=function(){return"teen %s sekondes na die minuut"},e.prototype.everyX0Minutes=function(){return"elke %s minute"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minute %s deur na %s na die uur"},e.prototype.atX0MinutesPastTheHour=function(){return"teen %s minute na die uur"},e.prototype.everyX0Hours=function(){return"elke %s ure"},e.prototype.betweenX0AndX1=function(){return"tussen %s en %s"},e.prototype.atX0=function(){return"teen %s"},e.prototype.commaEveryDay=function(){return", elke dag"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", elke %s dae van die week"},e.prototype.commaX0ThroughX1=function(){return", %s deur na %s"},e.prototype.commaAndX0ThroughX1=function(){return", en %s deur na %s"},e.prototype.first=function(){return"eerste"},e.prototype.second=function(){return"tweede"},e.prototype.third=function(){return"derde"},e.prototype.fourth=function(){return"vierde"},e.prototype.fifth=function(){return"vyfde"},e.prototype.commaOnThe=function(){return", op die "},e.prototype.spaceX0OfTheMonth=function(){return" %s van die maand"},e.prototype.lastDay=function(){return"die laaste dag"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", op die laaste %s van die maand"},e.prototype.commaOnlyOnX0=function(){return", net op %s"},e.prototype.commaAndOnX0=function(){return", en op %s"},e.prototype.commaEveryX0Months=function(){return", elke %s maande"},e.prototype.commaOnlyInX0=function(){return", net in %s"},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", op die laaste dag van die maand"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", op die laaste weeksdag van die maand"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dae voor die laaste dag van die maand"},e.prototype.firstWeekday=function(){return"eerste weeksdag"},e.prototype.weekdayNearestDayX0=function(){return"weeksdag naaste aan dag %s"},e.prototype.commaOnTheX0OfTheMonth=function(){return", op die %s van die maande"},e.prototype.commaEveryX0Days=function(){return", elke %s dae"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", tussen dag %s en %s van die maand"},e.prototype.commaOnDayX0OfTheMonth=function(){return", op dag %s van die maand"},e.prototype.commaEveryHour=function(){return", elke uur"},e.prototype.commaEveryX0Years=function(){return", elke %s jare"},e.prototype.commaStartingX0=function(){return", beginnende %s"},e.prototype.daysOfTheWeek=function(){return["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"]},e.prototype.monthsOfTheYear=function(){return["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"]},e}();n.af=u,t().locales.af=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ar.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ar.min.js new file mode 100644 index 00000000..7433806d --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ar.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/ar.min",["cronstrue"],e):"object"==typeof exports?exports["locales/ar.min"]=e(require("cronstrue")):t["locales/ar.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.ar=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"حدث خطأ في إنشاء وصف المصطلح٠ تأكد من تركيب مصطلح الكرون"},t.prototype.everyMinute=function(){return"كل دقيقة"},t.prototype.everyHour=function(){return"كل ساعة"},t.prototype.atSpace=function(){return" "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"كل دقيقة بين %s و %s"},t.prototype.at=function(){return""},t.prototype.spaceAnd=function(){return" و"},t.prototype.everySecond=function(){return"كل ثانية"},t.prototype.everyX0Seconds=function(){return"كل %s ثواني"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"الثواني %s حتى %s من بداية الدقيقة"},t.prototype.atX0SecondsPastTheMinute=function(){return"الثانية %s من بداية الدقيقة"},t.prototype.everyX0Minutes=function(){return"كل %s دقائق"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"الدقائق %s حتى %s من بداية الساعة"},t.prototype.atX0MinutesPastTheHour=function(){return"الدقيقة %s من بداية الساعة"},t.prototype.everyX0Hours=function(){return"كل %s ساعات"},t.prototype.betweenX0AndX1=function(){return"بين %s و %s"},t.prototype.atX0=function(){return"%s"},t.prototype.commaEveryDay=function(){return"، كل يوم"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return"، كل %s من أيام الأسبوع"},t.prototype.commaX0ThroughX1=function(){return"، %s حتى %s"},t.prototype.commaAndX0ThroughX1=function(){return"، و %s حتى %s"},t.prototype.first=function(){return"أول"},t.prototype.second=function(){return"ثاني"},t.prototype.third=function(){return"ثالث"},t.prototype.fourth=function(){return"رابع"},t.prototype.fifth=function(){return"خامس"},t.prototype.commaOnThe=function(){return"، في ال"},t.prototype.spaceX0OfTheMonth=function(){return" %s من الشهر"},t.prototype.lastDay=function(){return"اليوم الأخير"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return"، في اخر %s من الشهر"},t.prototype.commaOnlyOnX0=function(){return"، %s فقط"},t.prototype.commaAndOnX0=function(){return"، وفي %s"},t.prototype.commaEveryX0Months=function(){return"، كل %s أشهر"},t.prototype.commaOnlyInX0=function(){return"، %s فقط"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return"، في اخر يوم من الشهر"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return"، في اخر يوم أسبوع من الشهر"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return"، %s أيام قبل اخر يوم من الشهر"},t.prototype.firstWeekday=function(){return"اول ايام الأسبوع"},t.prototype.weekdayNearestDayX0=function(){return"يوم الأسبوع الأقرب ليوم %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return"، في %s من الشهر"},t.prototype.commaEveryX0Days=function(){return"، كل %s أيام"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return"، بين يوم %s و %s من الشهر"},t.prototype.commaOnDayX0OfTheMonth=function(){return"، في اليوم %s من الشهر"},t.prototype.commaEveryHour=function(){return"، كل ساعة"},t.prototype.commaEveryX0Years=function(){return"، كل %s سنوات"},t.prototype.commaStartingX0=function(){return"، بداية من %s"},t.prototype.daysOfTheWeek=function(){return["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},t.prototype.monthsOfTheYear=function(){return["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},t}();o.ar=u,e().locales.ar=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/be.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/be.min.js new file mode 100644 index 00000000..fd3bddd5 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/be.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/be.min",["cronstrue"],e):"object"==typeof exports?exports["locales/be.min"]=e(require("cronstrue")):t["locales/be.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.be=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.everyMinute=function(){return"кожную хвіліну"},t.prototype.everyHour=function(){return"кожную гадзіну"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Адбылася памылка падчас генерацыі апісання выразы. Праверце сінтаксіс крон-выразы."},t.prototype.atSpace=function(){return"У "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Кожную хвіліну з %s да %s"},t.prototype.at=function(){return"У"},t.prototype.spaceAnd=function(){return" і"},t.prototype.everySecond=function(){return"кожную секунду"},t.prototype.everyX0Seconds=function(){return"кожныя %s секунд"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"секунды з %s па %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"у %s секунд"},t.prototype.everyX0Minutes=function(){return"кожныя %s хвілін"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"хвіліны з %s па %s"},t.prototype.atX0MinutesPastTheHour=function(){return"у %s хвілін"},t.prototype.everyX0Hours=function(){return"кожныя %s гадзін"},t.prototype.betweenX0AndX1=function(){return"з %s па %s"},t.prototype.atX0=function(){return"у %s"},t.prototype.commaEveryDay=function(){return", кожны дзень"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", кожныя %s дзён тыдня"},t.prototype.commaX0ThroughX1=function(){return", %s па %s"},t.prototype.commaAndX0ThroughX1=function(){return", і %s па %s"},t.prototype.first=function(){return"першы"},t.prototype.second=function(){return"другі"},t.prototype.third=function(){return"трэці"},t.prototype.fourth=function(){return"чацвёрты"},t.prototype.fifth=function(){return"пяты"},t.prototype.commaOnThe=function(){return", у "},t.prototype.spaceX0OfTheMonth=function(){return" %s месяца"},t.prototype.lastDay=function(){return"апошні дзень"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", у апошні %s месяца"},t.prototype.commaOnlyOnX0=function(){return", толькі ў %s"},t.prototype.commaAndOnX0=function(){return", і ў %s"},t.prototype.commaEveryX0Months=function(){return", кожныя %s месяцаў"},t.prototype.commaOnlyInX0=function(){return", толькі ў %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", у апошні дзень месяца"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", у апошні будні дзень месяца"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s дзён да апошняга дня месяца"},t.prototype.firstWeekday=function(){return"першы будны дзень"},t.prototype.weekdayNearestDayX0=function(){return"найбліжэйшы будны дзень да %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", у %s месяцы"},t.prototype.commaEveryX0Days=function(){return", кожныя %s дзён"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", з %s па %s лік месяца"},t.prototype.commaOnDayX0OfTheMonth=function(){return", у %s лік месяца"},t.prototype.commaEveryX0Years=function(){return", кожныя %s гадоў"},t.prototype.commaStartingX0=function(){return", пачатак %s"},t.prototype.daysOfTheWeek=function(){return["нядзеля","панядзелак","аўторак","серада","чацвер","пятніца","субота"]},t.prototype.monthsOfTheYear=function(){return["студзень","люты","сакавік","красавік","травень","чэрвень","ліпень","жнівень","верасень","кастрычнік","лістапад","снежань"]},t}();o.be=u,e().locales.be=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/bg.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/bg.min.js new file mode 100644 index 00000000..54f62848 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/bg.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/bg.min",["cronstrue"],e):"object"==typeof exports?exports["locales/bg.min"]=e(require("cronstrue")):t["locales/bg.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function n(t){var r=o[t];if(void 0!==r)return r.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var t=n(34),e=n.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.bg=void 0;var u=function(t,e){return(null!=t?Number(t):0)<2?e[0]:e[1]},p=function(t,e){return e[[1,0,0,1,0,0,1][null!=t?Number(t):0]]},c=function(t,e){var o=null!=t?Number(t):1;o=Math.max(Math.min(o<10||o>20&&o%10!=0?o%10:3,3),1)-1;var n=["м","ж","ср"].indexOf(e);return["в","р","т"][o]+["и","а","о"][n]},i=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"всяка минута"},t.prototype.everyHour=function(){return"всеки час"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Възникна грешка при генериране на описанието на израза. Проверете синтаксиса на cron израза."},t.prototype.atSpace=function(){return"В "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Всяка минута от %s до %s"},t.prototype.at=function(){return"В"},t.prototype.spaceAnd=function(){return" и"},t.prototype.everySecond=function(){return"всяка секунда"},t.prototype.everyX0Seconds=function(t){return"всеки %s секунди"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"секунди от %s до %s"},t.prototype.atX0SecondsPastTheMinute=function(t){return"%s-".concat(c(t,"ж")," секунда")},t.prototype.everyX0Minutes=function(t){return"всеки %s минути"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"минути от %s до %s"},t.prototype.atX0MinutesPastTheHour=function(t){return"%s-".concat(c(t,"ж")," минутa")},t.prototype.everyX0Hours=function(t){return"всеки %s часа"},t.prototype.betweenX0AndX1=function(){return"от %s до %s"},t.prototype.atX0=function(){return"в %s"},t.prototype.commaEveryDay=function(){return", всеки ден"},t.prototype.commaEveryX0DaysOfTheWeek=function(t){return u(t,[", всеки %s ден от седмицата",", всеки %s дена от седмицата"])},t.prototype.commaX0ThroughX1=function(t){return", от %s до %s"},t.prototype.commaAndX0ThroughX1=function(t){return" и от %s до %s"},t.prototype.first=function(t){return p(t,["первият","первата"])},t.prototype.second=function(t){return p(t,["вторият","втората"])},t.prototype.third=function(t){return p(t,["третият","третата"])},t.prototype.fourth=function(t){return p(t,["четвертият","четвертата"])},t.prototype.fifth=function(t){return p(t,["петият","петата"])},t.prototype.commaOnThe=function(t){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s на месеца"},t.prototype.lastDay=function(){return"последният ден"},t.prototype.commaOnTheLastX0OfTheMonth=function(t){return p(t,[", в последният %s от месеца",", в последната %s отмесеца"])},t.prototype.commaOnlyOnX0=function(t){return", %s"},t.prototype.commaAndOnX0=function(){return" и %s"},t.prototype.commaEveryX0Months=function(t){return" всеки %s месеца"},t.prototype.commaOnlyInMonthX0=function(){return", %s"},t.prototype.commaOnlyInX0=function(){return", в %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", в последният ден на месеца"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", в последния делничен ден от месеца"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(t){return u(t,[", %s ден преди края на месеца",", %s дена преди края на месеца"])},t.prototype.firstWeekday=function(){return"първият делничен ден"},t.prototype.weekdayNearestDayX0=function(){return"най-близкият делничен ден до %s число"},t.prototype.commaOnTheX0OfTheMonth=function(){return", на %s число от месеца"},t.prototype.commaEveryX0Days=function(t){return u(t,[", всеки %s ден",", всеки %s дена"])},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(t){var e,o=null!==(e=null==t?void 0:t.split("-"))&&void 0!==e?e:[];return", от %s-".concat(c(o[0],"ср")," до %s-").concat(c(o[1],"ср")," число на месеца")},t.prototype.commaOnDayX0OfTheMonth=function(t){return", на %s-".concat(c(t,"ср")," число от месеца")},t.prototype.commaEveryX0Years=function(t){return u(t,[", всяка %s година",", всеки %s години"])},t.prototype.commaStartingX0=function(){return", започвайки %s"},t.prototype.daysOfTheWeek=function(){return["неделя","понеделник","вторник","сряда","четвъртък","петък","събота"]},t.prototype.monthsOfTheYear=function(){return["януари","февруари","март","април","май","юни","юли","август","септевмври","октомври","ноември","декември"]},t}();o.bg=i,e().locales.bg=new i})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ca.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ca.min.js new file mode 100644 index 00000000..e02c9fde --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ca.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/ca.min",["cronstrue"],t):"object"==typeof exports?exports["locales/ca.min"]=t(require("cronstrue")):e["locales/ca.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var e=r(34),t=r.n(e),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.ca=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"S'ha produït un error mentres es generava la descripció de l'expressió. Revisi la sintaxi de la expressió de cron."},e.prototype.at=function(){return"A les"},e.prototype.atSpace=function(){return"A les "},e.prototype.atX0=function(){return"a les %s"},e.prototype.atX0MinutesPastTheHour=function(){return"als %s minuts de l'hora"},e.prototype.atX0SecondsPastTheMinute=function(){return"als %s segonds del minut"},e.prototype.betweenX0AndX1=function(){return"entre les %s i les %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre els dies %s i %s del mes"},e.prototype.commaEveryDay=function(){return", cada dia"},e.prototype.commaEveryX0Days=function(){return", cada %s dies"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", cada %s dies de la setmana"},e.prototype.commaEveryX0Months=function(){return", cada %s mesos"},e.prototype.commaOnDayX0OfTheMonth=function(){return", el dia %s del mes"},e.prototype.commaOnlyInX0=function(){return", sólo en %s"},e.prototype.commaOnlyOnX0=function(){return", només el %s"},e.prototype.commaAndOnX0=function(){return", i el %s"},e.prototype.commaOnThe=function(){return", en el "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", en l'últim dia del mes"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", en l'últim dia de la setmana del mes"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dies abans de l'últim dia del mes"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", en l'últim %s del mes"},e.prototype.commaOnTheX0OfTheMonth=function(){return", en el %s del mes"},e.prototype.commaX0ThroughX1=function(){return", de %s a %s"},e.prototype.commaAndX0ThroughX1=function(){return", i de %s a %s"},e.prototype.everyHour=function(){return"cada hora"},e.prototype.everyMinute=function(){return"cada minut"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"cada minut entre les %s i les %s"},e.prototype.everySecond=function(){return"cada segon"},e.prototype.everyX0Hours=function(){return"cada %s hores"},e.prototype.everyX0Minutes=function(){return"cada %s minuts"},e.prototype.everyX0Seconds=function(){return"cada %s segons"},e.prototype.fifth=function(){return"cinquè"},e.prototype.first=function(){return"primer"},e.prototype.firstWeekday=function(){return"primer dia de la setmana"},e.prototype.fourth=function(){return"quart"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"del minut %s al %s passada l'hora"},e.prototype.second=function(){return"segon"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"En els segons %s al %s de cada minut"},e.prototype.spaceAnd=function(){return" i"},e.prototype.spaceX0OfTheMonth=function(){return" %s del mes"},e.prototype.lastDay=function(){return"l'últim dia"},e.prototype.third=function(){return"tercer"},e.prototype.weekdayNearestDayX0=function(){return"dia de la setmana més proper al %s"},e.prototype.commaEveryX0Years=function(){return", cada %s anys"},e.prototype.commaStartingX0=function(){return", començant %s"},e.prototype.daysOfTheWeek=function(){return["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"]},e.prototype.monthsOfTheYear=function(){return["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"]},e}();n.ca=u,t().locales.ca=new u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/cs.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/cs.min.js new file mode 100644 index 00000000..7873fafb --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/cs.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/cs.min",["cronstrue"],e):"object"==typeof exports?exports["locales/cs.min"]=e(require("cronstrue")):t["locales/cs.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function n(t){var r=o[t];if(void 0!==r)return r.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var t=n(34),e=n.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.cs=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Při vytváření popisu došlo k chybě. Zkontrolujte prosím správnost syntaxe cronu."},t.prototype.everyMinute=function(){return"každou minutu"},t.prototype.everyHour=function(){return"každou hodinu"},t.prototype.atSpace=function(){return"V "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Každou minutu mezi %s a %s"},t.prototype.at=function(){return"V"},t.prototype.spaceAnd=function(){return" a"},t.prototype.everySecond=function(){return"každou sekundu"},t.prototype.everyX0Seconds=function(){return"každých %s sekund"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundy od %s do %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"v %s sekund"},t.prototype.everyX0Minutes=function(){return"každých %s minut"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuty od %s do %s"},t.prototype.atX0MinutesPastTheHour=function(){return"v %s minut"},t.prototype.everyX0Hours=function(){return"každých %s hodin"},t.prototype.betweenX0AndX1=function(){return"mezi %s a %s"},t.prototype.atX0=function(){return"v %s"},t.prototype.commaEveryDay=function(){return", každý den"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", každých %s dní v týdnu"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", a od %s do %s"},t.prototype.first=function(){return"první"},t.prototype.second=function(){return"druhý"},t.prototype.third=function(){return"třetí"},t.prototype.fourth=function(){return"čtvrtý"},t.prototype.fifth=function(){return"pátý"},t.prototype.commaOnThe=function(){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s v měsíci"},t.prototype.lastDay=function(){return"poslední den"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", poslední %s v měsíci"},t.prototype.commaOnlyOnX0=function(){return", pouze v %s"},t.prototype.commaAndOnX0=function(){return", a v %s"},t.prototype.commaEveryX0Months=function(){return", každých %s měsíců"},t.prototype.commaOnlyInX0=function(){return", pouze v %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", poslední den v měsíci"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", poslední pracovní den v měsíci"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dní před posledním dnem v měsíci"},t.prototype.firstWeekday=function(){return"první pracovní den"},t.prototype.weekdayNearestDayX0=function(){return"pracovní den nejblíže %s. dni"},t.prototype.commaOnTheX0OfTheMonth=function(){return", v %s v měsíci"},t.prototype.commaEveryX0Days=function(){return", každých %s dnů"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mezi dny %s a %s v měsíci"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s. den v měsíci"},t.prototype.commaEveryX0Years=function(){return", každých %s roků"},t.prototype.commaStartingX0=function(){return", začínající %s"},t.prototype.daysOfTheWeek=function(){return["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"]},t.prototype.monthsOfTheYear=function(){return["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"]},t}();o.cs=u,e().locales.cs=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/da.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/da.min.js new file mode 100644 index 00000000..52fc7dbb --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/da.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/da.min",["cronstrue"],t):"object"==typeof exports?exports["locales/da.min"]=t(require("cronstrue")):e["locales/da.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var e=r(34),t=r.n(e),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.da=void 0;var u=function(){function e(){}return e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Der opstod en fejl ved generering af udtryksbeskrivelsen. Tjek cron-ekspressionssyntaxen."},e.prototype.at=function(){return"kl"},e.prototype.atSpace=function(){return"kl "},e.prototype.atX0=function(){return"kl %s"},e.prototype.atX0MinutesPastTheHour=function(){return"%s minutter efter timeskift"},e.prototype.atX0SecondsPastTheMinute=function(){return"%s sekunder efter minutskift"},e.prototype.betweenX0AndX1=function(){return"mellem %s og %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mellem dag %s og %s i måneden"},e.prototype.commaEveryDay=function(){return", hver dag"},e.prototype.commaEveryX0Days=function(){return", hver %s. dag"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", hver %s. ugedag"},e.prototype.commaEveryX0Months=function(){return", hver %s. måned"},e.prototype.commaEveryX0Years=function(){return", hvert %s. år"},e.prototype.commaOnDayX0OfTheMonth=function(){return", på dag %s i måneden"},e.prototype.commaOnlyInX0=function(){return", kun i %s"},e.prototype.commaOnlyOnX0=function(){return", kun på %s"},e.prototype.commaAndOnX0=function(){return", og på %s"},e.prototype.commaOnThe=function(){return", på den "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", på den sidste dag i måneden"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", på den sidste hverdag i måneden"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dage før den sidste dag i måneden"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", på den sidste %s i måneden"},e.prototype.commaOnTheX0OfTheMonth=function(){return", på den %s i måneden"},e.prototype.commaX0ThroughX1=function(){return", %s til og med %s"},e.prototype.commaAndX0ThroughX1=function(){return", og %s til og med %s"},e.prototype.everyHour=function(){return"hver time"},e.prototype.everyMinute=function(){return"hvert minut"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"hvert minut mellem %s og %s"},e.prototype.everySecond=function(){return"hvert sekund"},e.prototype.everyX0Hours=function(){return"hver %s. time"},e.prototype.everyX0Minutes=function(){return"hvert %s. minut"},e.prototype.everyX0Seconds=function(){return"hvert %s. sekund"},e.prototype.fifth=function(){return"femte"},e.prototype.first=function(){return"første"},e.prototype.firstWeekday=function(){return"første hverdag"},e.prototype.fourth=function(){return"fjerde"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutterne fra %s til og med %s hver time"},e.prototype.second=function(){return"anden"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunderne fra %s til og med %s hvert minut"},e.prototype.spaceAnd=function(){return" og"},e.prototype.spaceX0OfTheMonth=function(){return" %s i måneden"},e.prototype.lastDay=function(){return"sidste dag"},e.prototype.third=function(){return"tredje"},e.prototype.weekdayNearestDayX0=function(){return"hverdag nærmest dag %s"},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.commaStartingX0=function(){return", startende %s"},e.prototype.daysOfTheWeek=function(){return["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},e.prototype.monthsOfTheYear=function(){return["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"]},e}();n.da=u,t().locales.da=new u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/de.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/de.min.js new file mode 100644 index 00000000..62479320 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/de.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/de.min",["cronstrue"],t):"object"==typeof exports?exports["locales/de.min"]=t(require("cronstrue")):e["locales/de.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var e=r(34),t=r.n(e),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.de=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.everyMinute=function(){return"jede Minute"},e.prototype.everyHour=function(){return"jede Stunde"},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Beim Generieren der Ausdrucksbeschreibung ist ein Fehler aufgetreten. Überprüfen Sie die Syntax des Cron-Ausdrucks."},e.prototype.atSpace=function(){return"Um "},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Jede Minute zwischen %s und %s"},e.prototype.at=function(){return"Um"},e.prototype.spaceAnd=function(){return" und"},e.prototype.everySecond=function(){return"Jede Sekunde"},e.prototype.everyX0Seconds=function(){return"alle %s Sekunden"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"Sekunden %s bis %s"},e.prototype.atX0SecondsPastTheMinute=function(){return"bei Sekunde %s"},e.prototype.everyX0Minutes=function(){return"alle %s Minuten"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"Minuten %s bis %s"},e.prototype.atX0MinutesPastTheHour=function(){return"bei Minute %s"},e.prototype.everyX0Hours=function(){return"alle %s Stunden"},e.prototype.betweenX0AndX1=function(){return"zwischen %s und %s"},e.prototype.atX0=function(){return"um %s"},e.prototype.commaEveryDay=function(){return", jeden Tag"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", alle %s Tage der Woche"},e.prototype.commaX0ThroughX1=function(){return", %s bis %s"},e.prototype.commaAndX0ThroughX1=function(){return", und %s bis %s"},e.prototype.first=function(){return"ersten"},e.prototype.second=function(){return"zweiten"},e.prototype.third=function(){return"dritten"},e.prototype.fourth=function(){return"vierten"},e.prototype.fifth=function(){return"fünften"},e.prototype.commaOnThe=function(){return", am "},e.prototype.spaceX0OfTheMonth=function(){return" %s des Monats"},e.prototype.lastDay=function(){return"der letzte Tag"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", am letzten %s des Monats"},e.prototype.commaOnlyOnX0=function(){return", nur jeden %s"},e.prototype.commaAndOnX0=function(){return", und jeden %s"},e.prototype.commaEveryX0Months=function(){return", alle %s Monate"},e.prototype.commaOnlyInX0=function(){return", nur im %s"},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", am letzten Tag des Monats"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", am letzten Werktag des Monats"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s tage vor dem letzten Tag des Monats"},e.prototype.firstWeekday=function(){return"ersten Werktag"},e.prototype.weekdayNearestDayX0=function(){return"Werktag am nächsten zum %s Tag"},e.prototype.commaOnTheX0OfTheMonth=function(){return", am %s des Monats"},e.prototype.commaEveryX0Days=function(){return", alle %s Tage"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", zwischen Tag %s und %s des Monats"},e.prototype.commaOnDayX0OfTheMonth=function(){return", an Tag %s des Monats"},e.prototype.commaEveryX0Years=function(){return", alle %s Jahre"},e.prototype.commaStartingX0=function(){return", beginnend %s"},e.prototype.daysOfTheWeek=function(){return["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},e.prototype.monthsOfTheYear=function(){return["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},e}();n.de=u,t().locales.de=new u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/en.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/en.min.js new file mode 100644 index 00000000..b1ecab93 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/en.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/en.min",["cronstrue"],t):"object"==typeof exports?exports["locales/en.min"]=t(require("cronstrue")):e["locales/en.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var u=o[e]={exports:{}};return t[e](u,u.exports,n),u.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var e=n(34),t=n.n(e),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.en=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!1},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"An error occured when generating the expression description. Check the cron expression syntax."},e.prototype.everyMinute=function(){return"every minute"},e.prototype.everyHour=function(){return"every hour"},e.prototype.atSpace=function(){return"At "},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Every minute between %s and %s"},e.prototype.at=function(){return"At"},e.prototype.spaceAnd=function(){return" and"},e.prototype.everySecond=function(){return"every second"},e.prototype.everyX0Seconds=function(){return"every %s seconds"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconds %s through %s past the minute"},e.prototype.atX0SecondsPastTheMinute=function(){return"at %s seconds past the minute"},e.prototype.everyX0Minutes=function(){return"every %s minutes"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},e.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},e.prototype.everyX0Hours=function(){return"every %s hours"},e.prototype.betweenX0AndX1=function(){return"between %s and %s"},e.prototype.atX0=function(){return"at %s"},e.prototype.commaEveryDay=function(){return", every day"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", every %s days of the week"},e.prototype.commaX0ThroughX1=function(){return", %s through %s"},e.prototype.commaAndX0ThroughX1=function(){return", %s through %s"},e.prototype.first=function(){return"first"},e.prototype.second=function(){return"second"},e.prototype.third=function(){return"third"},e.prototype.fourth=function(){return"fourth"},e.prototype.fifth=function(){return"fifth"},e.prototype.commaOnThe=function(){return", on the "},e.prototype.spaceX0OfTheMonth=function(){return" %s of the month"},e.prototype.lastDay=function(){return"the last day"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", on the last %s of the month"},e.prototype.commaOnlyOnX0=function(){return", only on %s"},e.prototype.commaAndOnX0=function(){return", and on %s"},e.prototype.commaEveryX0Months=function(){return", every %s months"},e.prototype.commaOnlyInX0=function(){return", only in %s"},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", on the last day of the month"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", on the last weekday of the month"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s days before the last day of the month"},e.prototype.firstWeekday=function(){return"first weekday"},e.prototype.weekdayNearestDayX0=function(){return"weekday nearest day %s"},e.prototype.commaOnTheX0OfTheMonth=function(){return", on the %s of the month"},e.prototype.commaEveryX0Days=function(){return", every %s days"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", between day %s and %s of the month"},e.prototype.commaOnDayX0OfTheMonth=function(){return", on day %s of the month"},e.prototype.commaEveryHour=function(){return", every hour"},e.prototype.commaEveryX0Years=function(){return", every %s years"},e.prototype.commaStartingX0=function(){return", starting %s"},e.prototype.daysOfTheWeek=function(){return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},e.prototype.monthsOfTheYear=function(){return["January","February","March","April","May","June","July","August","September","October","November","December"]},e}();o.en=u,t().locales.en=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/es.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/es.min.js new file mode 100644 index 00000000..c17e599a --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/es.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/es.min",["cronstrue"],t):"object"==typeof exports?exports["locales/es.min"]=t(require("cronstrue")):e["locales/es.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var u=o[e]={exports:{}};return t[e](u,u.exports,n),u.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var e=n(34),t=n.n(e),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.es=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ocurrió un error mientras se generaba la descripción de la expresión. Revise la sintaxis de la expresión de cron."},e.prototype.at=function(){return"A las"},e.prototype.atSpace=function(){return"A las "},e.prototype.atX0=function(){return"a las %s"},e.prototype.atX0MinutesPastTheHour=function(){return"a los %s minutos de la hora"},e.prototype.atX0SecondsPastTheMinute=function(){return"a los %s segundos del minuto"},e.prototype.betweenX0AndX1=function(){return"entre las %s y las %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre los días %s y %s del mes"},e.prototype.commaEveryDay=function(){return", cada día"},e.prototype.commaEveryX0Days=function(){return", cada %s días"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", cada %s días de la semana"},e.prototype.commaEveryX0Months=function(){return", cada %s meses"},e.prototype.commaOnDayX0OfTheMonth=function(){return", el día %s del mes"},e.prototype.commaOnlyInX0=function(){return", sólo en %s"},e.prototype.commaOnlyOnX0=function(){return", sólo el %s"},e.prototype.commaAndOnX0=function(){return", y el %s"},e.prototype.commaOnThe=function(){return", en el "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", en el último día del mes"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", en el último día de la semana del mes"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s días antes del último día del mes"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", en el último %s del mes"},e.prototype.commaOnTheX0OfTheMonth=function(){return", en el %s del mes"},e.prototype.commaX0ThroughX1=function(){return", de %s a %s"},e.prototype.commaAndX0ThroughX1=function(){return", y de %s a %s"},e.prototype.everyHour=function(){return"cada hora"},e.prototype.everyMinute=function(){return"cada minuto"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"cada minuto entre las %s y las %s"},e.prototype.everySecond=function(){return"cada segundo"},e.prototype.everyX0Hours=function(){return"cada %s horas"},e.prototype.everyX0Minutes=function(){return"cada %s minutos"},e.prototype.everyX0Seconds=function(){return"cada %s segundos"},e.prototype.fifth=function(){return"quinto"},e.prototype.first=function(){return"primero"},e.prototype.firstWeekday=function(){return"primer día de la semana"},e.prototype.fourth=function(){return"cuarto"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"del minuto %s al %s pasada la hora"},e.prototype.second=function(){return"segundo"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"En los segundos %s al %s de cada minuto"},e.prototype.spaceAnd=function(){return" y"},e.prototype.spaceX0OfTheMonth=function(){return" %s del mes"},e.prototype.lastDay=function(){return"el último día"},e.prototype.third=function(){return"tercer"},e.prototype.weekdayNearestDayX0=function(){return"día de la semana más próximo al %s"},e.prototype.commaEveryX0Years=function(){return", cada %s años"},e.prototype.commaStartingX0=function(){return", comenzando %s"},e.prototype.daysOfTheWeek=function(){return["domingo","lunes","martes","miércoles","jueves","viernes","sábado"]},e.prototype.monthsOfTheYear=function(){return["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"]},e}();o.es=u,t().locales.es=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fa.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fa.min.js new file mode 100644 index 00000000..ba38b9c5 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fa.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/fa.min",["cronstrue"],e):"object"==typeof exports?exports["locales/fa.min"]=e(require("cronstrue")):t["locales/fa.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.fa=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"خطایی در نمایش توضیحات این وظیفه رخ داد. لطفا ساختار آن را بررسی کنید."},t.prototype.everyMinute=function(){return"هر دقیقه"},t.prototype.everyHour=function(){return"هر ساعت"},t.prototype.atSpace=function(){return"در "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"هر دقیقه بین %s و %s"},t.prototype.at=function(){return"در"},t.prototype.spaceAnd=function(){return" و"},t.prototype.everySecond=function(){return"هر ثانیه"},t.prototype.everyX0Seconds=function(){return"هر %s ثانیه"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"ثانیه %s تا %s دقیقه گذشته"},t.prototype.atX0SecondsPastTheMinute=function(){return"در %s قانیه از دقیقه گذشته"},t.prototype.everyX0Minutes=function(){return"هر %s دقیقه"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"دقیقه %s تا %s ساعت گذشته"},t.prototype.atX0MinutesPastTheHour=function(){return"در %s دقیقه پس از ساعت"},t.prototype.everyX0Hours=function(){return"هر %s ساعت"},t.prototype.betweenX0AndX1=function(){return"بین %s و %s"},t.prototype.atX0=function(){return"در %s"},t.prototype.commaEveryDay=function(){return", هر روز"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", هر %s روز از هفته"},t.prototype.commaX0ThroughX1=function(){return", %s تا %s"},t.prototype.commaAndX0ThroughX1=function(){return", و %s تا %s"},t.prototype.first=function(){return"اول"},t.prototype.second=function(){return"دوم"},t.prototype.third=function(){return"سوم"},t.prototype.fourth=function(){return"چهارم"},t.prototype.fifth=function(){return"پنجم"},t.prototype.commaOnThe=function(){return", در "},t.prototype.spaceX0OfTheMonth=function(){return" %s ماه"},t.prototype.lastDay=function(){return"آخرین روز"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", در %s ماه"},t.prototype.commaOnlyOnX0=function(){return", فقط در %s"},t.prototype.commaAndOnX0=function(){return", و در %s"},t.prototype.commaEveryX0Months=function(){return", هر %s ماه"},t.prototype.commaOnlyInX0=function(){return", فقط در %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", در آخرین روز ماه"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", در آخرین روز ماه"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s روز قبل از آخرین روز ماه"},t.prototype.firstWeekday=function(){return"اولین روز"},t.prototype.weekdayNearestDayX0=function(){return"روز نزدیک به روز %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", در %s ماه"},t.prototype.commaEveryX0Days=function(){return", هر %s روز"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", بین روز %s و %s ماه"},t.prototype.commaOnDayX0OfTheMonth=function(){return", در %s ماه"},t.prototype.commaEveryMinute=function(){return", هر minute"},t.prototype.commaEveryHour=function(){return", هر ساعت"},t.prototype.commaEveryX0Years=function(){return", هر %s سال"},t.prototype.commaStartingX0=function(){return", آغاز %s"},t.prototype.daysOfTheWeek=function(){return["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه"]},t.prototype.monthsOfTheYear=function(){return["ژانویه","فوریه","مارس","آپریل","مه","ژوئن","ژوئیه","آگوست","سپتامبر","اکتبر","نوامبر","دسامبر"]},t}();o.fa=u,e().locales.fa=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fi.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fi.min.js new file mode 100644 index 00000000..73251b1c --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fi.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/fi.min",["cronstrue"],e):"object"==typeof exports?exports["locales/fi.min"]=e(require("cronstrue")):t["locales/fi.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},n={};function o(t){var r=n[t];if(void 0!==r)return r.exports;var u=n[t]={exports:{}};return e[t](u,u.exports,o),u.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{o.r(r);var t=o(34),e=o.n(t),n=r;Object.defineProperty(n,"__esModule",{value:!0}),n.fi=void 0;var u=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Virhe kuvauksen generoinnissa. Tarkista cron-syntaksi."},t.prototype.at=function(){return"Klo"},t.prototype.atSpace=function(){return"Klo "},t.prototype.atX0=function(){return"klo %s"},t.prototype.atX0MinutesPastTheHour=function(){return"%s minuuttia yli"},t.prototype.atX0MinutesPastTheHourGt20=function(){return"%s minuuttia yli"},t.prototype.atX0SecondsPastTheMinute=function(){return"%s sekunnnin jälkeen"},t.prototype.betweenX0AndX1=function(){return"%s - %s välillä"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", kuukauden päivien %s ja %s välillä"},t.prototype.commaEveryDay=function(){return", joka päivä"},t.prototype.commaEveryHour=function(){return", joka tunti"},t.prototype.commaEveryMinute=function(){return", joka minuutti"},t.prototype.commaEveryX0Days=function(){return", joka %s. päivä"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", joka %s. viikonpäivä"},t.prototype.commaEveryX0Months=function(){return", joka %s. kuukausi"},t.prototype.commaEveryX0Years=function(){return", joka %s. vuosi"},t.prototype.commaOnDayX0OfTheMonth=function(){return", kuukauden %s päivä"},t.prototype.commaOnlyInX0=function(){return", vain %s"},t.prototype.commaOnlyOnX0=function(){return", vain %s"},t.prototype.commaOnThe=function(){return","},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", kuukauden viimeisenä päivänä"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", kuukauden viimeisenä viikonpäivänä"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", kuukauden viimeinen %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", kuukauden %s"},t.prototype.commaX0ThroughX1=function(){return", %s - %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s - %s"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s päivää ennen kuukauden viimeistä päivää"},t.prototype.commaStartingX0=function(){return", alkaen %s"},t.prototype.everyHour=function(){return"joka tunti"},t.prototype.everyMinute=function(){return"joka minuutti"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"joka minuutti %s - %s välillä"},t.prototype.everySecond=function(){return"joka sekunti"},t.prototype.everyX0Hours=function(){return"joka %s. tunti"},t.prototype.everyX0Minutes=function(){return"joka %s. minuutti"},t.prototype.everyX0Seconds=function(){return"joka %s. sekunti"},t.prototype.fifth=function(){return"viides"},t.prototype.first=function(){return"ensimmäinen"},t.prototype.firstWeekday=function(){return"ensimmäinen viikonpäivä"},t.prototype.fourth=function(){return"neljäs"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"joka tunti minuuttien %s - %s välillä"},t.prototype.second=function(){return"toinen"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"joka minuutti sekunttien %s - %s välillä"},t.prototype.spaceAnd=function(){return" ja"},t.prototype.spaceAndSpace=function(){return" ja "},t.prototype.spaceX0OfTheMonth=function(){return" %s kuukaudessa"},t.prototype.third=function(){return"kolmas"},t.prototype.weekdayNearestDayX0=function(){return"viikonpäivä lähintä %s päivää"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.lastDay=function(){return"viimeinen päivä"},t.prototype.commaAndOnX0=function(){return", ja edelleen %s"},t.prototype.daysOfTheWeek=function(){return["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},t.prototype.monthsOfTheYear=function(){return["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"]},t}();n.fi=u,e().locales.fi=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fr.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fr.min.js new file mode 100644 index 00000000..5619881e --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/fr.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/fr.min",["cronstrue"],t):"object"==typeof exports?exports["locales/fr.min"]=t(require("cronstrue")):e["locales/fr.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var u=r[e]={exports:{}};return t[e](u,u.exports,o),u.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{o.r(n);var e=o(34),t=o.n(e),r=n;Object.defineProperty(r,"__esModule",{value:!0}),r.fr=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.everyMinute=function(){return"toutes les minutes"},e.prototype.everyHour=function(){return"toutes les heures"},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Une erreur est survenue en générant la description de l'expression cron. Vérifiez sa syntaxe."},e.prototype.atSpace=function(){return"À "},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Toutes les minutes entre %s et %s"},e.prototype.at=function(){return"À"},e.prototype.spaceAnd=function(){return" et"},e.prototype.everySecond=function(){return"toutes les secondes"},e.prototype.everyX0Seconds=function(){return"toutes les %s secondes"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"les secondes entre %s et %s après la minute"},e.prototype.atX0SecondsPastTheMinute=function(){return"%s secondes après la minute"},e.prototype.everyX0Minutes=function(){return"toutes les %s minutes"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"les minutes entre %s et %s après l'heure"},e.prototype.atX0MinutesPastTheHour=function(){return"%s minutes après l'heure"},e.prototype.everyX0Hours=function(){return"toutes les %s heures"},e.prototype.betweenX0AndX1=function(){return"de %s à %s"},e.prototype.atX0=function(){return"à %s"},e.prototype.commaEveryDay=function(){return", tous les jours"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", tous les %s jours de la semaine"},e.prototype.commaX0ThroughX1=function(){return", de %s à %s"},e.prototype.commaAndX0ThroughX1=function(){return", et de %s à %s"},e.prototype.first=function(){return"premier"},e.prototype.second=function(){return"second"},e.prototype.third=function(){return"troisième"},e.prototype.fourth=function(){return"quatrième"},e.prototype.fifth=function(){return"cinquième"},e.prototype.commaOnThe=function(){return", le "},e.prototype.spaceX0OfTheMonth=function(){return" %s du mois"},e.prototype.lastDay=function(){return"le dernier jour"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", le dernier %s du mois"},e.prototype.commaOnlyOnX0=function(){return", uniquement le %s"},e.prototype.commaAndOnX0=function(){return", et %s"},e.prototype.commaEveryX0Months=function(){return", tous les %s mois"},e.prototype.commaOnlyInX0=function(){return", uniquement en %s"},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", le dernier jour du mois"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", le dernier jour ouvrable du mois"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s jours avant le dernier jour du mois"},e.prototype.firstWeekday=function(){return"premier jour ouvrable"},e.prototype.weekdayNearestDayX0=function(){return"jour ouvrable le plus proche du %s"},e.prototype.commaOnTheX0OfTheMonth=function(){return", le %s du mois"},e.prototype.commaEveryX0Days=function(){return", tous les %s jours"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", du %s au %s du mois"},e.prototype.commaOnDayX0OfTheMonth=function(){return", le %s du mois"},e.prototype.commaEveryX0Years=function(){return", tous les %s ans"},e.prototype.commaDaysX0ThroughX1=function(){return", du %s au %s"},e.prototype.commaStartingX0=function(){return", à partir de %s"},e.prototype.daysOfTheWeek=function(){return["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},e.prototype.monthsOfTheYear=function(){return["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]},e}();r.fr=u,t().locales.fr=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/he.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/he.min.js new file mode 100644 index 00000000..d5f11855 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/he.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/he.min",["cronstrue"],e):"object"==typeof exports?exports["locales/he.min"]=e(require("cronstrue")):t["locales/he.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.he=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"אירעה שגיאה בעת יצירת תיאור הביטוי. בדוק את תחביר הביטוי cron."},t.prototype.everyMinute=function(){return"כל דקה"},t.prototype.everyHour=function(){return"כל שעה"},t.prototype.atSpace=function(){return"ב "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"כל דקה %s עד %s"},t.prototype.at=function(){return"ב"},t.prototype.spaceAnd=function(){return" ו"},t.prototype.everySecond=function(){return"כל שניה"},t.prototype.everyX0Seconds=function(){return"כל %s שניות"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"%s עד %s שניות של הדקה"},t.prototype.atX0SecondsPastTheMinute=function(){return"ב %s שניות של הדקה"},t.prototype.everyX0Minutes=function(){return"כל %s דקות"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"%s עד %s דקות של השעה"},t.prototype.atX0MinutesPastTheHour=function(){return"ב %s דקות של השעה"},t.prototype.everyX0Hours=function(){return"כל %s שעות"},t.prototype.betweenX0AndX1=function(){return"%s עד %s"},t.prototype.atX0=function(){return"ב %s"},t.prototype.commaEveryDay=function(){return", כל יום"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", כל %s ימים בשבוע"},t.prototype.commaX0ThroughX1=function(){return", %s עד %s"},t.prototype.commaAndX0ThroughX1=function(){return", ו %s עד %s"},t.prototype.first=function(){return"ראשון"},t.prototype.second=function(){return"שני"},t.prototype.third=function(){return"שלישי"},t.prototype.fourth=function(){return"רביעי"},t.prototype.fifth=function(){return"חמישי"},t.prototype.commaOnThe=function(){return", ב "},t.prototype.spaceX0OfTheMonth=function(){return" %s של החודש"},t.prototype.lastDay=function(){return"היום האחרון"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", רק ב %s של החודש"},t.prototype.commaOnlyOnX0=function(){return", רק ב %s"},t.prototype.commaAndOnX0=function(){return", וב %s"},t.prototype.commaEveryX0Months=function(){return", כל %s חודשים"},t.prototype.commaOnlyInX0=function(){return", רק ב %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ביום האחרון של החודש"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ביום החול האחרון של החודש"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s ימים לפני היום האחרון בחודש"},t.prototype.firstWeekday=function(){return"יום החול הראשון"},t.prototype.weekdayNearestDayX0=function(){return"יום החול הראשון הקרוב אל %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", ביום ה%s של החודש"},t.prototype.commaEveryX0Days=function(){return", כל %s ימים"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", בין היום ה%s וה%s של החודש"},t.prototype.commaOnDayX0OfTheMonth=function(){return", ביום ה%s של החודש"},t.prototype.commaEveryX0Years=function(){return", כל %s שנים"},t.prototype.commaStartingX0=function(){return", החל מ %s"},t.prototype.daysOfTheWeek=function(){return["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"]},t.prototype.monthsOfTheYear=function(){return["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"]},t}();o.he=u,e().locales.he=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/hu.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/hu.min.js new file mode 100644 index 00000000..49a9808b --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/hu.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/hu.min",["cronstrue"],e):"object"==typeof exports?exports["locales/hu.min"]=e(require("cronstrue")):t["locales/hu.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},n={};function r(t){var o=n[t];if(void 0!==o)return o.exports;var u=n[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var t=r(34),e=r.n(t),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.hu=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Hiba történt a kifejezésleírás generálásakor. Ellenőrizze a cron kifejezés szintaxisát."},t.prototype.everyMinute=function(){return"minden percben"},t.prototype.everyHour=function(){return"minden órában"},t.prototype.atSpace=function(){return"Ekkor: "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"percenként %s és %s között"},t.prototype.at=function(){return"Ekkor:"},t.prototype.spaceAnd=function(){return" és"},t.prototype.everySecond=function(){return"minden másodpercben"},t.prototype.everyX0Seconds=function(){return"%s másodpercenként"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"%s. másodpercben %s perc után"},t.prototype.atX0SecondsPastTheMinute=function(){return"%s. másodpercben"},t.prototype.everyX0Minutes=function(){return"minden %s. percben"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"%s. percben %s óra után"},t.prototype.atX0MinutesPastTheHour=function(){return"%s. percben"},t.prototype.everyX0Hours=function(){return"minden %s órában"},t.prototype.betweenX0AndX1=function(){return"%s és %s között"},t.prototype.atX0=function(){return"ekkor %s"},t.prototype.commaEveryDay=function(){return", minden nap"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", a hét minden %s napján"},t.prototype.commaX0ThroughX1=function(){return", %s - %s"},t.prototype.commaAndX0ThroughX1=function(){return", és %s - %s"},t.prototype.first=function(){return"első"},t.prototype.second=function(){return"második"},t.prototype.third=function(){return"harmadik"},t.prototype.fourth=function(){return"negyedik"},t.prototype.fifth=function(){return"ötödik"},t.prototype.commaOnThe=function(){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s a hónapban"},t.prototype.lastDay=function(){return"az utolsó nap"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", a hónap utolsó %s"},t.prototype.commaOnlyOnX0=function(){return", csak ekkor: %s"},t.prototype.commaAndOnX0=function(){return", és %s"},t.prototype.commaEveryX0Months=function(){return", minden %s hónapban"},t.prototype.commaOnlyInX0=function(){return", csak ekkor: %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", a hónap utolsó napján"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", a hónap utolsó hétköznapján"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s nappal a hónap utolsó napja előtt"},t.prototype.firstWeekday=function(){return"első hétköznap"},t.prototype.weekdayNearestDayX0=function(){return"hétköznap legközelebbi nap %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", a hónap %s"},t.prototype.commaEveryX0Days=function(){return", %s naponként"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", a hónap %s és %s napja között"},t.prototype.commaOnDayX0OfTheMonth=function(){return", a hónap %s napján"},t.prototype.commaEveryHour=function(){return", minden órában"},t.prototype.commaEveryX0Years=function(){return", %s évente"},t.prototype.commaStartingX0=function(){return", %s kezdettel"},t.prototype.daysOfTheWeek=function(){return["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"]},t.prototype.monthsOfTheYear=function(){return["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"]},t}();n.hu=u,e().locales.hu=new u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/id.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/id.min.js new file mode 100644 index 00000000..8603fe3a --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/id.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/id.min",["cronstrue"],e):"object"==typeof exports?exports["locales/id.min"]=e(require("cronstrue")):t["locales/id.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},r={};function n(t){var o=r[t];if(void 0!==o)return o.exports;var a=r[t]={exports:{}};return e[t](a,a.exports,n),a.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};return(()=>{n.r(o);var t=n(34),e=n.n(t),r=o;Object.defineProperty(r,"__esModule",{value:!0}),r.id=void 0;var a=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Terjadi kesalahan saat membuat deskripsi ekspresi. Periksa sintaks ekspresi cron."},t.prototype.everyMinute=function(){return"setiap menit"},t.prototype.everyHour=function(){return"setiap jam"},t.prototype.atSpace=function(){return"Pada "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Setiap menit diantara %s dan %s"},t.prototype.at=function(){return"Pada"},t.prototype.spaceAnd=function(){return" dan"},t.prototype.everySecond=function(){return"setiap detik"},t.prototype.everyX0Seconds=function(){return"setiap %s detik"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"detik ke %s sampai %s melewati menit"},t.prototype.atX0SecondsPastTheMinute=function(){return"pada %s detik lewat satu menit"},t.prototype.everyX0Minutes=function(){return"setiap %s menit"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"menit ke %s sampai %s melewati jam"},t.prototype.atX0MinutesPastTheHour=function(){return"pada %s menit melewati jam"},t.prototype.everyX0Hours=function(){return"setiap %s jam"},t.prototype.betweenX0AndX1=function(){return"diantara %s dan %s"},t.prototype.atX0=function(){return"pada %s"},t.prototype.commaEveryDay=function(){return", setiap hari"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", setiap hari %s dalam seminggu"},t.prototype.commaX0ThroughX1=function(){return", %s sampai %s"},t.prototype.commaAndX0ThroughX1=function(){return", dan %s sampai %s"},t.prototype.first=function(){return"pertama"},t.prototype.second=function(){return"kedua"},t.prototype.third=function(){return"ketiga"},t.prototype.fourth=function(){return"keempat"},t.prototype.fifth=function(){return"kelima"},t.prototype.commaOnThe=function(){return", di "},t.prototype.spaceX0OfTheMonth=function(){return" %s pada bulan"},t.prototype.lastDay=function(){return"hari terakhir"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", pada %s terakhir bulan ini"},t.prototype.commaOnlyOnX0=function(){return", hanya pada %s"},t.prototype.commaAndOnX0=function(){return", dan pada %s"},t.prototype.commaEveryX0Months=function(){return", setiap bulan %s "},t.prototype.commaOnlyInX0=function(){return", hanya pada %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", pada hari terakhir bulan ini"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", pada hari kerja terakhir setiap bulan"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s hari sebelum hari terakhir setiap bulan"},t.prototype.firstWeekday=function(){return"hari kerja pertama"},t.prototype.weekdayNearestDayX0=function(){return"hari kerja terdekat %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", pada %s bulan ini"},t.prototype.commaEveryX0Days=function(){return", setiap %s hari"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", antara hari %s dan %s dalam sebulan"},t.prototype.commaOnDayX0OfTheMonth=function(){return", pada hari %s dalam sebulan"},t.prototype.commaEveryHour=function(){return", setiap jam"},t.prototype.commaEveryX0Years=function(){return", setiap %s tahun"},t.prototype.commaStartingX0=function(){return", mulai pada %s"},t.prototype.daysOfTheWeek=function(){return["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},t.prototype.monthsOfTheYear=function(){return["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]},t}();r.id=a,e().locales.id=new a})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/it.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/it.min.js new file mode 100644 index 00000000..cf85bb69 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/it.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/it.min",["cronstrue"],t):"object"==typeof exports?exports["locales/it.min"]=t(require("cronstrue")):e["locales/it.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var i=o[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var e=n(34),t=n.n(e),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.it=void 0;var i=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"È verificato un errore durante la generazione la descrizione espressione. Controllare la sintassi delle espressioni cron."},e.prototype.at=function(){return"Alle"},e.prototype.atSpace=function(){return"Alle "},e.prototype.atX0=function(){return"alle %s"},e.prototype.atX0MinutesPastTheHour=function(){return"al %s minuto passata l'ora"},e.prototype.atX0SecondsPastTheMinute=function(){return"al %s secondo passato il minuto"},e.prototype.betweenX0AndX1=function(){return"tra le %s e le %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", tra il giorno %s e %s del mese"},e.prototype.commaEveryDay=function(){return", ogni giorno"},e.prototype.commaEveryX0Days=function(){return", ogni %s giorni"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", ogni %s giorni della settimana"},e.prototype.commaEveryX0Months=function(){return", ogni %s mesi"},e.prototype.commaEveryX0Years=function(){return", ogni %s anni"},e.prototype.commaOnDayX0OfTheMonth=function(){return", il giorno %s del mese"},e.prototype.commaOnlyInX0=function(){return", solo in %s"},e.prototype.commaOnlyOnX0=function(){return", solo il %s"},e.prototype.commaAndOnX0=function(){return", e il %s"},e.prototype.commaOnThe=function(){return", il "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", l'ultimo giorno del mese"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", nell'ultima settimana del mese"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s giorni prima dell'ultimo giorno del mese"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", l'ultimo %s del mese"},e.prototype.commaOnTheX0OfTheMonth=function(){return", il %s del mese"},e.prototype.commaX0ThroughX1=function(){return", %s al %s"},e.prototype.commaAndX0ThroughX1=function(){return", e %s al %s"},e.prototype.everyHour=function(){return"ogni ora"},e.prototype.everyMinute=function(){return"ogni minuto"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Ogni minuto tra le %s e le %s"},e.prototype.everySecond=function(){return"ogni secondo"},e.prototype.everyX0Hours=function(){return"ogni %s ore"},e.prototype.everyX0Minutes=function(){return"ogni %s minuti"},e.prototype.everyX0Seconds=function(){return"ogni %s secondi"},e.prototype.fifth=function(){return"quinto"},e.prototype.first=function(){return"primo"},e.prototype.firstWeekday=function(){return"primo giorno della settimana"},e.prototype.fourth=function(){return"quarto"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuti %s al %s dopo l'ora"},e.prototype.second=function(){return"secondo"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"secondi %s al %s oltre il minuto"},e.prototype.spaceAnd=function(){return" e"},e.prototype.spaceX0OfTheMonth=function(){return" %s del mese"},e.prototype.lastDay=function(){return"l'ultimo giorno"},e.prototype.third=function(){return"terzo"},e.prototype.weekdayNearestDayX0=function(){return"giorno della settimana più vicino al %s"},e.prototype.commaStartingX0=function(){return", a partire %s"},e.prototype.daysOfTheWeek=function(){return["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"]},e.prototype.monthsOfTheYear=function(){return["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"]},e}();o.it=i,t().locales.it=new i})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ja.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ja.min.js new file mode 100644 index 00000000..02156792 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ja.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/ja.min",["cronstrue"],e):"object"==typeof exports?exports["locales/ja.min"]=e(require("cronstrue")):t["locales/ja.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.ja=void 0;var u=function(){function t(){}return t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"毎分"},t.prototype.everyHour=function(){return"毎時"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"式の記述を生成する際にエラーが発生しました。Cron 式の構文を確認してください。"},t.prototype.atSpace=function(){return"次において実施"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"%s から %s まで毎分"},t.prototype.at=function(){return"次において実施"},t.prototype.spaceAnd=function(){return"と"},t.prototype.everySecond=function(){return"毎秒"},t.prototype.everyX0Seconds=function(){return"%s 秒ごと"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"毎分 %s 秒から %s 秒まで"},t.prototype.atX0SecondsPastTheMinute=function(){return"毎分 %s 秒過ぎ"},t.prototype.everyX0Minutes=function(){return"%s 分ごと"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"毎時 %s 分から %s 分まで"},t.prototype.atX0MinutesPastTheHour=function(){return"毎時 %s 分過ぎ"},t.prototype.everyX0Hours=function(){return"%s 時間ごと"},t.prototype.betweenX0AndX1=function(){return"%s と %s の間"},t.prototype.atX0=function(){return"次において実施 %s"},t.prototype.commaEveryDay=function(){return"、毎日"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return"、週のうち %s 日ごと"},t.prototype.commaX0ThroughX1=function(){return"、%s から %s まで"},t.prototype.commaAndX0ThroughX1=function(){return"、%s から %s まで"},t.prototype.first=function(){return"1 番目"},t.prototype.second=function(){return"2 番目"},t.prototype.third=function(){return"3 番目"},t.prototype.fourth=function(){return"4 番目"},t.prototype.fifth=function(){return"5 番目"},t.prototype.commaOnThe=function(){return"次に"},t.prototype.spaceX0OfTheMonth=function(){return"月のうち %s"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return"月の最後の %s に"},t.prototype.commaOnlyOnX0=function(){return"%s にのみ"},t.prototype.commaEveryX0Months=function(){return"、%s か月ごと"},t.prototype.commaOnlyInX0=function(){return"%s でのみ"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return"次の最終日に"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return"月の最後の平日に"},t.prototype.firstWeekday=function(){return"最初の平日"},t.prototype.weekdayNearestDayX0=function(){return"%s 日の直近の平日"},t.prototype.commaOnTheX0OfTheMonth=function(){return"月の %s に"},t.prototype.commaEveryX0Days=function(){return"、%s 日ごと"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return"、月の %s 日から %s 日の間"},t.prototype.commaOnDayX0OfTheMonth=function(){return"、月の %s 日目"},t.prototype.spaceAndSpace=function(){return"と"},t.prototype.commaEveryMinute=function(){return"、毎分"},t.prototype.commaEveryHour=function(){return"、毎時"},t.prototype.commaEveryX0Years=function(){return"、%s 年ごと"},t.prototype.commaStartingX0=function(){return"、%s に開始"},t.prototype.aMPeriod=function(){return"AM"},t.prototype.pMPeriod=function(){return"PM"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return"月の最終日の %s 日前"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.lastDay=function(){return"最終日"},t.prototype.commaAndOnX0=function(){return"、〜と %s"},t.prototype.daysOfTheWeek=function(){return["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},t.prototype.monthsOfTheYear=function(){return["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]},t}();o.ja=u,e().locales.ja=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ko.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ko.min.js new file mode 100644 index 00000000..548b183d --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ko.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/ko.min",["cronstrue"],e):"object"==typeof exports?exports["locales/ko.min"]=e(require("cronstrue")):t["locales/ko.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.ko=void 0;var u=function(){function t(){}return t.prototype.setPeriodBeforeTime=function(){return!0},t.prototype.pm=function(){return"오후"},t.prototype.am=function(){return"오전"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"표현식 설명을 생성하는 중 오류가 발생했습니다. cron 표현식 구문을 확인하십시오."},t.prototype.everyMinute=function(){return"1분마다"},t.prototype.everyHour=function(){return"1시간마다"},t.prototype.atSpace=function(){return"시간 "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"%s 및 %s 사이에 매 분"},t.prototype.at=function(){return"시간"},t.prototype.spaceAnd=function(){return" 및"},t.prototype.everySecond=function(){return"1초마다"},t.prototype.everyX0Seconds=function(){return"%s초마다"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"정분 후 %s초에서 %s초까지"},t.prototype.atX0SecondsPastTheMinute=function(){return"정분 후 %s초에서"},t.prototype.everyX0Minutes=function(){return"%s분마다"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"정시 후 %s분에서 %s분까지"},t.prototype.atX0MinutesPastTheHour=function(){return"정시 후 %s분에서"},t.prototype.everyX0Hours=function(){return"%s시간마다"},t.prototype.betweenX0AndX1=function(){return"%s에서 %s 사이"},t.prototype.atX0=function(){return"%s에서"},t.prototype.commaEveryDay=function(){return", 매일"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", 주 중 %s일마다"},t.prototype.commaX0ThroughX1=function(){return", %s에서 %s까지"},t.prototype.commaAndX0ThroughX1=function(){return", 및 %s에서 %s까지"},t.prototype.first=function(){return"첫 번째"},t.prototype.second=function(){return"두 번째"},t.prototype.third=function(){return"세 번째"},t.prototype.fourth=function(){return"네 번째"},t.prototype.fifth=function(){return"다섯 번째"},t.prototype.commaOnThe=function(){return", 해당 "},t.prototype.spaceX0OfTheMonth=function(){return" 해당 월의 %s"},t.prototype.lastDay=function(){return"마지막 날"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", 해당 월의 마지막 %s"},t.prototype.commaOnlyOnX0=function(){return", %s에만"},t.prototype.commaAndOnX0=function(){return", 및 %s에"},t.prototype.commaEveryX0Months=function(){return", %s개월마다"},t.prototype.commaOnlyInX0=function(){return", %s에만"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", 해당 월의 마지막 날에"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", 해당 월의 마지막 평일에"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", 해당 월의 마지막 날 %s일 전"},t.prototype.firstWeekday=function(){return"첫 번째 평일"},t.prototype.weekdayNearestDayX0=function(){return"%s일과 가장 가까운 평일"},t.prototype.commaOnTheX0OfTheMonth=function(){return", 해당 월의 %s에"},t.prototype.commaEveryX0Days=function(){return", %s일마다"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", 해당 월의 %s일에서 %s일까지"},t.prototype.commaOnDayX0OfTheMonth=function(){return", 해당 월의 %s일에"},t.prototype.commaEveryMinute=function(){return", 1분마다"},t.prototype.commaEveryHour=function(){return", 1시간마다"},t.prototype.commaEveryX0Years=function(){return", %s년마다"},t.prototype.commaStartingX0=function(){return", %s부터"},t.prototype.daysOfTheWeek=function(){return["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},t.prototype.monthsOfTheYear=function(){return["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},t}();o.ko=u,e().locales.ko=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/my.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/my.min.js new file mode 100644 index 00000000..ceb1c14b --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/my.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/my.min",["cronstrue"],e):"object"==typeof exports?exports["locales/my.min"]=e(require("cronstrue")):t["locales/my.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},n={};function r(t){var o=n[t];if(void 0!==o)return o.exports;var a=n[t]={exports:{}};return e[t](a,a.exports,r),a.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var t=r(34),e=r.n(t),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.my=void 0;var a=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Terdapat ralat semasa menjana penerangan ungkapan. Sila periksa sintaks ungkapan cron."},t.prototype.everyMinute=function(){return"setiap minit"},t.prototype.everyHour=function(){return"setiap jam"},t.prototype.atSpace=function(){return"Pada "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Setiap minit antara %s dan %s"},t.prototype.at=function(){return"Pada"},t.prototype.spaceAnd=function(){return" dan"},t.prototype.everySecond=function(){return"setiap saat"},t.prototype.everyX0Seconds=function(){return"setiap %s saat"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"saat ke %s hingga %s selepas minit"},t.prototype.atX0SecondsPastTheMinute=function(){return"pada %s saat selepas minit"},t.prototype.everyX0Minutes=function(){return"setiap %s minit"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minit ke %s hingga %s selepas jam"},t.prototype.atX0MinutesPastTheHour=function(){return"pada %s minit selepas jam"},t.prototype.everyX0Hours=function(){return"setiap %s jam"},t.prototype.betweenX0AndX1=function(){return"antara %s dan %s"},t.prototype.atX0=function(){return"pada %s"},t.prototype.commaEveryDay=function(){return", setiap hari"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", setiap %s hari dalam minggu"},t.prototype.commaX0ThroughX1=function(){return", %s hingga %s"},t.prototype.commaAndX0ThroughX1=function(){return", dan %s hingga %s"},t.prototype.first=function(){return"pertama"},t.prototype.second=function(){return"kedua"},t.prototype.third=function(){return"ketiga"},t.prototype.fourth=function(){return"keempat"},t.prototype.fifth=function(){return"kelima"},t.prototype.commaOnThe=function(){return", pada "},t.prototype.spaceX0OfTheMonth=function(){return" %s pada bulan"},t.prototype.lastDay=function(){return"hari terakhir"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", pada %s terakhir bulan"},t.prototype.commaOnlyOnX0=function(){return", hanya pada %s"},t.prototype.commaAndOnX0=function(){return", dan pada %s"},t.prototype.commaEveryX0Months=function(){return", setiap bulan %s"},t.prototype.commaOnlyInX0=function(){return", hanya pada %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", pada hari terakhir bulan"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", pada minggu terakhir bulan"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s hari sebelum hari terakhir bulan"},t.prototype.firstWeekday=function(){return"hari pertama minggu bekerja"},t.prototype.weekdayNearestDayX0=function(){return"hari bekerja yang terdekat dengan %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", pada %s bulan"},t.prototype.commaEveryX0Days=function(){return", setiap %s hari"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", antara hari %s dan %s dalam bulan"},t.prototype.commaOnDayX0OfTheMonth=function(){return", pada hari %s dalam bulan"},t.prototype.commaEveryHour=function(){return", setiap jam"},t.prototype.commaEveryX0Years=function(){return", setiap %s tahun"},t.prototype.commaStartingX0=function(){return", bermula %s"},t.prototype.daysOfTheWeek=function(){return["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"]},t.prototype.monthsOfTheYear=function(){return["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"]},t}();n.my=a,e().locales.my=new a})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/nb.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/nb.min.js new file mode 100644 index 00000000..4a7aeed5 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/nb.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/nb.min",["cronstrue"],t):"object"==typeof exports?exports["locales/nb.min"]=t(require("cronstrue")):e["locales/nb.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var e=r(34),t=r.n(e),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.nb=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"En feil inntraff ved generering av uttrykksbeskrivelse. Sjekk cron syntaks."},e.prototype.at=function(){return"Kl."},e.prototype.atSpace=function(){return"Kl."},e.prototype.atX0=function(){return"på %s"},e.prototype.atX0MinutesPastTheHour=function(){return"på %s minutter etter timen"},e.prototype.atX0SecondsPastTheMinute=function(){return"på %s sekunder etter minuttet"},e.prototype.betweenX0AndX1=function(){return"mellom %s og %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mellom dag %s og %s av måneden"},e.prototype.commaEveryDay=function(){return", hver dag"},e.prototype.commaEveryX0Days=function(){return", hver %s dag"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", hver %s ukedag"},e.prototype.commaEveryX0Months=function(){return", hver %s måned"},e.prototype.commaEveryX0Years=function(){return", hvert %s år"},e.prototype.commaOnDayX0OfTheMonth=function(){return", på dag %s av måneden"},e.prototype.commaOnlyInX0=function(){return", bare i %s"},e.prototype.commaOnlyOnX0=function(){return", på %s"},e.prototype.commaAndOnX0=function(){return", og på %s"},e.prototype.commaOnThe=function(){return", på "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", på den siste dagen i måneden"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", den siste ukedagen i måneden"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dager før den siste dagen i måneden"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", på den siste %s av måneden"},e.prototype.commaOnTheX0OfTheMonth=function(){return", på den %s av måneden"},e.prototype.commaX0ThroughX1=function(){return", %s til og med %s"},e.prototype.commaAndX0ThroughX1=function(){return", og %s til og med %s"},e.prototype.everyHour=function(){return"hver time"},e.prototype.everyMinute=function(){return"hvert minutt"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Hvert minutt mellom %s og %s"},e.prototype.everySecond=function(){return"hvert sekund"},e.prototype.everyX0Hours=function(){return"hver %s time"},e.prototype.everyX0Minutes=function(){return"hvert %s minutt"},e.prototype.everyX0Seconds=function(){return"hvert %s sekund"},e.prototype.fifth=function(){return"femte"},e.prototype.first=function(){return"første"},e.prototype.firstWeekday=function(){return"første ukedag"},e.prototype.fourth=function(){return"fjerde"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuttene fra %s til og med %s etter timen"},e.prototype.second=function(){return"sekund"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundene fra %s til og med %s etter minuttet"},e.prototype.spaceAnd=function(){return" og"},e.prototype.spaceX0OfTheMonth=function(){return" %s i måneden"},e.prototype.lastDay=function(){return"den siste dagen"},e.prototype.third=function(){return"tredje"},e.prototype.weekdayNearestDayX0=function(){return"ukedag nærmest dag %s"},e.prototype.commaStartingX0=function(){return", starter %s"},e.prototype.daysOfTheWeek=function(){return["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},e.prototype.monthsOfTheYear=function(){return["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"]},e}();n.nb=u,t().locales.nb=new u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/nl.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/nl.min.js new file mode 100644 index 00000000..d10fc9e2 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/nl.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/nl.min",["cronstrue"],t):"object"==typeof exports?exports["locales/nl.min"]=t(require("cronstrue")):e["locales/nl.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,o),u.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{o.r(r);var e=o(34),t=o.n(e),n=r;Object.defineProperty(n,"__esModule",{value:!0}),n.nl=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.everyMinute=function(){return"elke minuut"},e.prototype.everyHour=function(){return"elk uur"},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Er is een fout opgetreden bij het vertalen van de gegevens. Controleer de gegevens."},e.prototype.atSpace=function(){return"Op "},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Elke minuut tussen %s en %s"},e.prototype.at=function(){return"Op"},e.prototype.spaceAnd=function(){return" en"},e.prototype.everySecond=function(){return"elke seconde"},e.prototype.everyX0Seconds=function(){return"elke %s seconden"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconden %s t/m %s na de minuut"},e.prototype.atX0SecondsPastTheMinute=function(){return"op %s seconden na de minuut"},e.prototype.everyX0Minutes=function(){return"elke %s minuten"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuut %s t/m %s na het uur"},e.prototype.atX0MinutesPastTheHour=function(){return"op %s minuten na het uur"},e.prototype.everyX0Hours=function(){return"elke %s uur"},e.prototype.betweenX0AndX1=function(){return"tussen %s en %s"},e.prototype.atX0=function(){return"op %s"},e.prototype.commaEveryDay=function(){return", elke dag"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", elke %s dagen van de week"},e.prototype.commaX0ThroughX1=function(){return", %s t/m %s"},e.prototype.commaAndX0ThroughX1=function(){return", en %s t/m %s"},e.prototype.first=function(){return"eerste"},e.prototype.second=function(){return"tweede"},e.prototype.third=function(){return"derde"},e.prototype.fourth=function(){return"vierde"},e.prototype.fifth=function(){return"vijfde"},e.prototype.commaOnThe=function(){return", op de "},e.prototype.spaceX0OfTheMonth=function(){return" %s van de maand"},e.prototype.lastDay=function(){return"de laatste dag"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", op de laatste %s van de maand"},e.prototype.commaOnlyOnX0=function(){return", alleen op %s"},e.prototype.commaAndOnX0=function(){return", en op %s"},e.prototype.commaEveryX0Months=function(){return", elke %s maanden"},e.prototype.commaOnlyInX0=function(){return", alleen in %s"},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", op de laatste dag van de maand"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", op de laatste werkdag van de maand"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dagen vóór de laatste dag van de maand"},e.prototype.firstWeekday=function(){return"eerste werkdag"},e.prototype.weekdayNearestDayX0=function(){return"werkdag dichtst bij dag %s"},e.prototype.commaOnTheX0OfTheMonth=function(){return", op de %s van de maand"},e.prototype.commaEveryX0Days=function(){return", elke %s dagen"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", tussen dag %s en %s van de maand"},e.prototype.commaOnDayX0OfTheMonth=function(){return", op dag %s van de maand"},e.prototype.commaEveryX0Years=function(){return", elke %s jaren"},e.prototype.commaStartingX0=function(){return", beginnend %s"},e.prototype.daysOfTheWeek=function(){return["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},e.prototype.monthsOfTheYear=function(){return["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"]},e}();n.nl=u,t().locales.nl=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pl.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pl.min.js new file mode 100644 index 00000000..07492168 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pl.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/pl.min",["cronstrue"],e):"object"==typeof exports?exports["locales/pl.min"]=e(require("cronstrue")):t["locales/pl.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function n(t){var r=o[t];if(void 0!==r)return r.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var t=n(34),e=n.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.pl=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Wystąpił błąd podczas generowania opisu wyrażenia cron. Sprawdź składnię wyrażenia cron."},t.prototype.at=function(){return"O"},t.prototype.atSpace=function(){return"O "},t.prototype.atX0=function(){return"o %s"},t.prototype.atX0MinutesPastTheHour=function(){return"w %s minucie"},t.prototype.atX0SecondsPastTheMinute=function(){return"w %s sekundzie"},t.prototype.betweenX0AndX1=function(){return"od %s do %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", od %s-ego do %s-ego dnia miesiąca"},t.prototype.commaEveryDay=function(){return", co dzień"},t.prototype.commaEveryX0Days=function(){return", co %s dni"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", co %s dni tygodnia"},t.prototype.commaEveryX0Months=function(){return", co %s miesięcy"},t.prototype.commaEveryX0Years=function(){return", co %s lat"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s-ego dnia miesiąca"},t.prototype.commaOnlyInX0=function(){return", tylko %s"},t.prototype.commaOnlyOnX0=function(){return", tylko %s"},t.prototype.commaAndOnX0=function(){return", i %s"},t.prototype.commaOnThe=function(){return", "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ostatni dzień miesiąca"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ostatni dzień roboczy miesiąca"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dni przed ostatnim dniem miesiąca"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", ostatni %s miesiąca"},t.prototype.commaOnTheX0OfTheMonth=function(){return", %s miesiąca"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", i od %s do %s"},t.prototype.everyHour=function(){return"co godzinę"},t.prototype.everyMinute=function(){return"co minutę"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Co minutę od %s do %s"},t.prototype.everySecond=function(){return"co sekundę"},t.prototype.everyX0Hours=function(){return"co %s godzin"},t.prototype.everyX0Minutes=function(){return"co %s minut"},t.prototype.everyX0Seconds=function(){return"co %s sekund"},t.prototype.fifth=function(){return"piąty"},t.prototype.first=function(){return"pierwszy"},t.prototype.firstWeekday=function(){return"pierwszy dzień roboczy"},t.prototype.fourth=function(){return"czwarty"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuty od %s do %s"},t.prototype.second=function(){return"drugi"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundy od %s do %s"},t.prototype.spaceAnd=function(){return" i"},t.prototype.spaceX0OfTheMonth=function(){return" %s miesiąca"},t.prototype.lastDay=function(){return"ostatni dzień"},t.prototype.third=function(){return"trzeci"},t.prototype.weekdayNearestDayX0=function(){return"dzień roboczy najbliższy %s-ego dnia"},t.prototype.commaStartingX0=function(){return", startowy %s"},t.prototype.daysOfTheWeek=function(){return["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"]},t.prototype.monthsOfTheYear=function(){return["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"]},t}();o.pl=u,e().locales.pl=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pt_BR.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pt_BR.min.js new file mode 100644 index 00000000..3c68e4ff --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pt_BR.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/pt_BR.min",["cronstrue"],e):"object"==typeof exports?exports["locales/pt_BR.min"]=e(require("cronstrue")):t["locales/pt_BR.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function n(t){var r=o[t];if(void 0!==r)return r.exports;var a=o[t]={exports:{}};return e[t](a,a.exports,n),a.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var t=n(34),e=n.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.pt_BR=void 0;var a=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ocorreu um erro ao gerar a descrição da expressão Cron."},t.prototype.at=function(){return"às"},t.prototype.atSpace=function(){return"às "},t.prototype.atX0=function(){return"Às %s"},t.prototype.atX0MinutesPastTheHour=function(){return"aos %s minutos da hora"},t.prototype.atX0SecondsPastTheMinute=function(){return"aos %s segundos do minuto"},t.prototype.betweenX0AndX1=function(){return"entre %s e %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre os dias %s e %s do mês"},t.prototype.commaEveryDay=function(){return", a cada dia"},t.prototype.commaEveryX0Days=function(){return", a cada %s dias"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", a cada %s dias de semana"},t.prototype.commaEveryX0Months=function(){return", a cada %s meses"},t.prototype.commaOnDayX0OfTheMonth=function(){return", no dia %s do mês"},t.prototype.commaOnlyInX0=function(t){return t&&t.length>1&&"-"===t[1]?"somente %s":", somente em %s"},t.prototype.commaOnlyOnX0=function(t){return t&&t.length>1&&"-"===t[1]?", somente %s":", somente de %s"},t.prototype.commaAndOnX0=function(){return", e de %s"},t.prototype.commaOnThe=function(){return", na "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", no último dia do mês"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", no último dia da semana do mês"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dias antes do último dia do mês"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", na última %s do mês"},t.prototype.commaOnTheX0OfTheMonth=function(){return", no %s do mês"},t.prototype.commaX0ThroughX1=function(){return", de %s a %s"},t.prototype.commaAndX0ThroughX1=function(){return", e de %s a %s"},t.prototype.everyHour=function(){return"a cada hora"},t.prototype.everyMinute=function(){return"a cada minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"a cada minuto entre %s e %s"},t.prototype.everySecond=function(){return"a cada segundo"},t.prototype.everyX0Hours=function(){return"a cada %s horas"},t.prototype.everyX0Minutes=function(){return"a cada %s minutos"},t.prototype.everyX0Seconds=function(){return"a cada %s segundos"},t.prototype.fifth=function(){return"quinta"},t.prototype.first=function(){return"primeira"},t.prototype.firstWeekday=function(){return"primeiro dia da semana"},t.prototype.fourth=function(){return"quarta"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"do minuto %s até %s de cada hora"},t.prototype.second=function(){return"segunda"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"No segundo %s até %s de cada minuto"},t.prototype.spaceAnd=function(){return" e"},t.prototype.spaceX0OfTheMonth=function(){return" %s do mês"},t.prototype.lastDay=function(){return"o último dia"},t.prototype.third=function(){return"terceira"},t.prototype.weekdayNearestDayX0=function(){return"dia da semana mais próximo do dia %s"},t.prototype.commaEveryX0Years=function(){return", a cada %s anos"},t.prototype.commaStartingX0=function(){return", iniciando %s"},t.prototype.daysOfTheWeek=function(){return["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},t.prototype.monthsOfTheYear=function(){return["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},t}();o.pt_BR=a,e().locales.pt_BR=new a})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pt_PT.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pt_PT.min.js new file mode 100644 index 00000000..37fb9f4b --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/pt_PT.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/pt_PT.min",["cronstrue"],e):"object"==typeof exports?exports["locales/pt_PT.min"]=e(require("cronstrue")):t["locales/pt_PT.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var a=o[t]={exports:{}};return e[t](a,a.exports,r),a.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.pt_PT=void 0;var a=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ocorreu um erro ao gerar a descrição da expressão Cron."},t.prototype.at=function(){return"às"},t.prototype.atSpace=function(){return"às "},t.prototype.atX0=function(){return"Às %s"},t.prototype.atX0MinutesPastTheHour=function(){return"aos %s minutos da hora"},t.prototype.atX0SecondsPastTheMinute=function(){return"aos %s segundos do minuto"},t.prototype.betweenX0AndX1=function(){return"entre %s e %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", entre os dias %s e %s do mês"},t.prototype.commaEveryDay=function(){return", a cada dia"},t.prototype.commaEveryX0Days=function(){return", a cada %s dias"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", a cada %s dias de semana"},t.prototype.commaEveryX0Months=function(){return", a cada %s meses"},t.prototype.commaOnDayX0OfTheMonth=function(){return", no dia %s do mês"},t.prototype.commaOnlyInX0=function(){return", somente em %s"},t.prototype.commaOnlyOnX0=function(){return", somente de %s"},t.prototype.commaAndOnX0=function(){return", e de %s"},t.prototype.commaOnThe=function(){return", na "},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", no último dia do mês"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", no último dia da semana do mês"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dias antes do último dia do mês"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", na última %s do mês"},t.prototype.commaOnTheX0OfTheMonth=function(){return", no %s do mês"},t.prototype.commaX0ThroughX1=function(){return", de %s a %s"},t.prototype.commaAndX0ThroughX1=function(){return", e de %s a %s"},t.prototype.everyHour=function(){return"a cada hora"},t.prototype.everyMinute=function(){return"a cada minuto"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"a cada minuto entre %s e %s"},t.prototype.everySecond=function(){return"a cada segundo"},t.prototype.everyX0Hours=function(){return"a cada %s horas"},t.prototype.everyX0Minutes=function(){return"a cada %s minutos"},t.prototype.everyX0Seconds=function(){return"a cada %s segundos"},t.prototype.fifth=function(){return"quinta"},t.prototype.first=function(){return"primeira"},t.prototype.firstWeekday=function(){return"primeiro dia da semana"},t.prototype.fourth=function(){return"quarta"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"do minuto %s até %s de cada hora"},t.prototype.second=function(){return"segunda"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"No segundo %s até %s de cada minuto"},t.prototype.spaceAnd=function(){return" e"},t.prototype.spaceX0OfTheMonth=function(){return" %s do mês"},t.prototype.lastDay=function(){return"o último dia"},t.prototype.third=function(){return"terceira"},t.prototype.weekdayNearestDayX0=function(){return"dia da semana mais próximo do dia %s"},t.prototype.commaEveryX0Years=function(){return", a cada %s anos"},t.prototype.commaStartingX0=function(){return", iniciando %s"},t.prototype.daysOfTheWeek=function(){return["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},t.prototype.monthsOfTheYear=function(){return["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},t}();o.pt_PT=a,e().locales.pt_PT=new a})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ro.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ro.min.js new file mode 100644 index 00000000..5603ca8a --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ro.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/ro.min",["cronstrue"],t):"object"==typeof exports?exports["locales/ro.min"]=t(require("cronstrue")):e["locales/ro.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var e=r(34),t=r.n(e),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.ro=void 0;var i=function(){function e(){}return e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Eroare la generarea descrierii. Verificați sintaxa."},e.prototype.at=function(){return"La"},e.prototype.atSpace=function(){return"La "},e.prototype.atX0=function(){return"la %s"},e.prototype.atX0MinutesPastTheHour=function(){return"la și %s minute"},e.prototype.atX0SecondsPastTheMinute=function(){return"la și %s secunde"},e.prototype.betweenX0AndX1=function(){return"între %s și %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", între zilele %s și %s ale lunii"},e.prototype.commaEveryDay=function(){return", în fiecare zi"},e.prototype.commaEveryX0Days=function(){return", la fiecare %s zile"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", la fiecare a %s-a zi a săptămânii"},e.prototype.commaEveryX0Months=function(){return", la fiecare %s luni"},e.prototype.commaEveryX0Years=function(){return", o dată la %s ani"},e.prototype.commaOnDayX0OfTheMonth=function(){return", în ziua %s a lunii"},e.prototype.commaOnlyInX0=function(){return", doar în %s"},e.prototype.commaOnlyOnX0=function(){return", doar %s"},e.prototype.commaAndOnX0=function(){return", și %s"},e.prototype.commaOnThe=function(){return", în "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", în ultima zi a lunii"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", în ultima zi lucrătoare a lunii"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s zile înainte de ultima zi a lunii"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", în ultima %s a lunii"},e.prototype.commaOnTheX0OfTheMonth=function(){return", în %s a lunii"},e.prototype.commaX0ThroughX1=function(){return", de %s până %s"},e.prototype.commaAndX0ThroughX1=function(){return", și de %s până %s"},e.prototype.everyHour=function(){return"în fiecare oră"},e.prototype.everyMinute=function(){return"în fiecare minut"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"În fiecare minut între %s și %s"},e.prototype.everySecond=function(){return"în fiecare secundă"},e.prototype.everyX0Hours=function(){return"la fiecare %s ore"},e.prototype.everyX0Minutes=function(){return"la fiecare %s minute"},e.prototype.everyX0Seconds=function(){return"la fiecare %s secunde"},e.prototype.fifth=function(){return"a cincea"},e.prototype.first=function(){return"prima"},e.prototype.firstWeekday=function(){return"prima zi a săptămânii"},e.prototype.fourth=function(){return"a patra"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"între minutele %s și %s"},e.prototype.second=function(){return"a doua"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"între secunda %s și secunda %s"},e.prototype.spaceAnd=function(){return" și"},e.prototype.spaceX0OfTheMonth=function(){return" %s a lunii"},e.prototype.lastDay=function(){return"ultima zi"},e.prototype.third=function(){return"a treia"},e.prototype.weekdayNearestDayX0=function(){return"cea mai apropiată zi a săptămânii de ziua %s"},e.prototype.commaMonthX0ThroughMonthX1=function(){return", din %s până în %s"},e.prototype.commaYearX0ThroughYearX1=function(){return", din %s până în %s"},e.prototype.atX0MinutesPastTheHourGt20=function(){return"la și %s de minute"},e.prototype.atX0SecondsPastTheMinuteGt20=function(){return"la și %s de secunde"},e.prototype.commaStartingX0=function(){return", pornire %s"},e.prototype.daysOfTheWeek=function(){return["duminică","luni","marți","miercuri","joi","vineri","sâmbătă"]},e.prototype.monthsOfTheYear=function(){return["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"]},e}();n.ro=i,t().locales.ro=new i})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ru.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ru.min.js new file mode 100644 index 00000000..8da53bb8 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/ru.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/ru.min",["cronstrue"],e):"object"==typeof exports?exports["locales/ru.min"]=e(require("cronstrue")):t["locales/ru.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.ru=void 0;var u=function(t,e){var o=Number(t);return void 0!==o?e[o%100>4&&o%100<20?2:[2,0,1,1,1,2][o%10<5?Math.abs(o)%10:5]]:e[2]},p=function(t,e){var o=Number(t);return void 0!==o?e[0===o?0:1===o||2===o||4===o?1:2]:e[1]},s=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"каждую минуту"},t.prototype.everyHour=function(){return"каждый час"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Произошла ошибка во время генерации описания выражения. Проверьте синтаксис крон-выражения."},t.prototype.atSpace=function(){return"В "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Каждую минуту с %s по %s"},t.prototype.at=function(){return"В"},t.prototype.spaceAnd=function(){return" и"},t.prototype.everySecond=function(){return"каждую секунду"},t.prototype.everyX0Seconds=function(t){return u(t,["каждую %s секунду","каждые %s секунды","каждые %s секунд"])},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"секунды с %s по %s"},t.prototype.atX0SecondsPastTheMinute=function(t){return u(t,["в %s секунду","в %s секунды","в %s секунд"])},t.prototype.everyX0Minutes=function(t){return u(t,["каждую %s минуту","каждые %s минуты","каждые %s минут"])},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"минуты с %s по %s"},t.prototype.atX0MinutesPastTheHour=function(t){return u(t,["в %s минуту","в %s минуты","в %s минут"])},t.prototype.everyX0Hours=function(t){return u(t,["каждый %s час","каждые %s часа","каждые %s часов"])},t.prototype.betweenX0AndX1=function(){return"с %s по %s"},t.prototype.atX0=function(){return"в %s"},t.prototype.commaEveryDay=function(){return", каждый день"},t.prototype.commaEveryX0DaysOfTheWeek=function(t){return u(t,["",", каждые %s дня недели",", каждые %s дней недели"])},t.prototype.commaX0ThroughX1=function(t){return!t||"2"!=t[0]&&"3"!=t[0]?", с %s по %s":", со %s по %s"},t.prototype.commaAndX0ThroughX1=function(t){return!t||"2"!=t[0]&&"3"!=t[0]?" и с %s по %s":" и со %s по %s"},t.prototype.first=function(t){return p(t,["первое","первый","первую"])},t.prototype.second=function(t){return p(t,["второе","второй","вторую"])},t.prototype.third=function(t){return p(t,["третье","третий","третью"])},t.prototype.fourth=function(t){return p(t,["четвертое","четвертый","четвертую"])},t.prototype.fifth=function(t){return p(t,["пятое","пятый","пятую"])},t.prototype.commaOnThe=function(t){return"2"===t?", во ":", в "},t.prototype.spaceX0OfTheMonth=function(){return" %s месяца"},t.prototype.lastDay=function(){return"последний день"},t.prototype.commaOnTheLastX0OfTheMonth=function(t){return p(t,[", в последнее %s месяца",", в последний %s месяца",", в последнюю %s месяца"])},t.prototype.commaOnlyOnX0=function(t){return t&&"2"===t[0]?", только во %s":", только в %s"},t.prototype.commaAndOnX0=function(){return", и %s"},t.prototype.commaEveryX0Months=function(t){return u(t,[""," каждые %s месяца"," каждые %s месяцев"])},t.prototype.commaOnlyInMonthX0=function(){return", только %s"},t.prototype.commaOnlyInX0=function(){return", только в %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", в последний день месяца"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", в последний будний день месяца"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(t){return u(t,[", за %s день до конца месяца",", за %s дня до конца месяца",", за %s дней до конца месяца"])},t.prototype.firstWeekday=function(){return"первый будний день"},t.prototype.weekdayNearestDayX0=function(){return"ближайший будний день к %s числу"},t.prototype.commaOnTheX0OfTheMonth=function(){return", в %s месяца"},t.prototype.commaEveryX0Days=function(t){return u(t,[", каждый %s день",", каждые %s дня",", каждые %s дней"])},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(t){return t&&"2"==t.substring(0,t.indexOf("-"))?", со %s по %s число месяца":", с %s по %s число месяца"},t.prototype.commaOnDayX0OfTheMonth=function(t){return t&&"2"==t[0]?", во %s число месяца":", в %s число месяца"},t.prototype.commaEveryX0Years=function(t){return u(t,[", каждый %s год",", каждые %s года",", каждые %s лет"])},t.prototype.commaStartingX0=function(){return", начало %s"},t.prototype.daysOfTheWeek=function(){return["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"]},t.prototype.daysOfTheWeekInCase=function(t){return void 0===t&&(t=2),1==t?["воскресенья","понедельника","вторника","среды","четверга","пятницы","субботы"]:["воскресенье","понедельник","вторник","среду","четверг","пятницу","субботу"]},t.prototype.monthsOfTheYear=function(){return["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"]},t.prototype.monthsOfTheYearInCase=function(t){return 1==t?["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"]:this.monthsOfTheYear()},t}();o.ru=s,e().locales.ru=new s})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sk.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sk.min.js new file mode 100644 index 00000000..f0846b8b --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sk.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/sk.min",["cronstrue"],e):"object"==typeof exports?exports["locales/sk.min"]=e(require("cronstrue")):t["locales/sk.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function n(t){var r=o[t];if(void 0!==r)return r.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var t=n(34),e=n.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.sk=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Pri vytváraní popisu došlo k chybe. Skontrolujte prosím správnosť syntaxe cronu."},t.prototype.everyMinute=function(){return"každú minútu"},t.prototype.everyHour=function(){return"každú hodinu"},t.prototype.atSpace=function(){return"V "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Každú minútu medzi %s a %s"},t.prototype.at=function(){return"V"},t.prototype.spaceAnd=function(){return" a"},t.prototype.everySecond=function(){return"každú sekundu"},t.prototype.everyX0Seconds=function(){return"každých %s sekúnd"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekundy od %s do %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"v %s sekúnd"},t.prototype.everyX0Minutes=function(){return"každých %s minút"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minúty od %s do %s"},t.prototype.atX0MinutesPastTheHour=function(){return"v %s minút"},t.prototype.everyX0Hours=function(){return"každých %s hodín"},t.prototype.betweenX0AndX1=function(){return"medzi %s a %s"},t.prototype.atX0=function(){return"v %s"},t.prototype.commaEveryDay=function(){return", každý deň"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", každých %s dní v týždni"},t.prototype.commaX0ThroughX1=function(){return", od %s do %s"},t.prototype.commaAndX0ThroughX1=function(){return", a od %s do %s"},t.prototype.first=function(){return"prvý"},t.prototype.second=function(){return"druhý"},t.prototype.third=function(){return"tretí"},t.prototype.fourth=function(){return"štvrtý"},t.prototype.fifth=function(){return"piaty"},t.prototype.commaOnThe=function(){return", "},t.prototype.spaceX0OfTheMonth=function(){return" %s v mesiaci"},t.prototype.lastDay=function(){return"posledný deň"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", posledný %s v mesiaci"},t.prototype.commaOnlyOnX0=function(){return", iba v %s"},t.prototype.commaAndOnX0=function(){return", a v %s"},t.prototype.commaEveryX0Months=function(){return", každých %s mesiacov"},t.prototype.commaOnlyInX0=function(){return", iba v %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", posledný deň v mesiaci"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", posledný pracovný deň v mesiaci"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dní pred posledným dňom v mesiaci"},t.prototype.firstWeekday=function(){return"prvý pracovný deň"},t.prototype.weekdayNearestDayX0=function(){return"pracovný deň najbližšie %s. dňu"},t.prototype.commaOnTheX0OfTheMonth=function(){return", v %s v mesiaci"},t.prototype.commaEveryX0Days=function(){return", každých %s dní"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", medzi dňami %s a %s v mesiaci"},t.prototype.commaOnDayX0OfTheMonth=function(){return", %s. deň v mesiaci"},t.prototype.commaEveryX0Years=function(){return", každých %s rokov"},t.prototype.commaStartingX0=function(){return", začínajúcich %s"},t.prototype.daysOfTheWeek=function(){return["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},t.prototype.monthsOfTheYear=function(){return["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"]},t}();o.sk=u,e().locales.sk=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sl.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sl.min.js new file mode 100644 index 00000000..7e6812f8 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sl.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/sl.min",["cronstrue"],t):"object"==typeof exports?exports["locales/sl.min"]=t(require("cronstrue")):e["locales/sl.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var u=o[e]={exports:{}};return t[e](u,u.exports,n),u.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var e=n(34),t=n.n(e),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.sl=void 0;var u=function(){function e(){}return e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Pri generiranju opisa izraza je prišlo do napake. Preverite sintakso izraza cron."},e.prototype.at=function(){return"Ob"},e.prototype.atSpace=function(){return"Ob "},e.prototype.atX0=function(){return"ob %s"},e.prototype.atX0MinutesPastTheHour=function(){return"ob %s."},e.prototype.atX0SecondsPastTheMinute=function(){return"ob %s."},e.prototype.betweenX0AndX1=function(){return"od %s do %s"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", od %s. do %s. dne v mesecu"},e.prototype.commaEveryDay=function(){return", vsak dan"},e.prototype.commaEveryX0Days=function(){return", vsakih %s dni"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", vsakih %s dni v tednu"},e.prototype.commaEveryX0Months=function(){return", vsakih %s mesecev"},e.prototype.commaEveryX0Years=function(){return", vsakih %s let"},e.prototype.commaOnDayX0OfTheMonth=function(){return", %s. dan v mesecu"},e.prototype.commaOnlyInX0=function(){return", samo v %s"},e.prototype.commaOnlyOnX0=function(){return", samo v %s"},e.prototype.commaAndOnX0=function(){return"in naprej %s"},e.prototype.commaOnThe=function(){return", "},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", zadnji %s v mesecu"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", zadnji delovni dan v mesecu"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dni pred koncem meseca"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", zadnji %s v mesecu"},e.prototype.commaOnTheX0OfTheMonth=function(){return", %s v mesecu"},e.prototype.commaX0ThroughX1=function(){return", od %s do %s"},e.prototype.commaAndX0ThroughX1=function(){return", in od %s do %s"},e.prototype.everyHour=function(){return"vsako uro"},e.prototype.everyMinute=function(){return"vsako minuto"},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Vsako minuto od %s do %s"},e.prototype.everySecond=function(){return"vsako sekundo"},e.prototype.everyX0Hours=function(){return"vsakih %s ur"},e.prototype.everyX0Minutes=function(){return"vsakih %s minut"},e.prototype.everyX0Seconds=function(){return"vsakih %s sekund"},e.prototype.fifth=function(){return"peti"},e.prototype.first=function(){return"prvi"},e.prototype.firstWeekday=function(){return"prvi delovni dan"},e.prototype.fourth=function(){return"četrti"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minute od %s do %s"},e.prototype.second=function(){return"drugi"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunde od %s do %s"},e.prototype.spaceAnd=function(){return" in"},e.prototype.spaceX0OfTheMonth=function(){return" %s v mesecu"},e.prototype.lastDay=function(){return"zadnjič"},e.prototype.third=function(){return"tretji"},e.prototype.weekdayNearestDayX0=function(){return"delovni dan, najbližji %s. dnevu"},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.commaStartingX0=function(){return", začenši %s"},e.prototype.daysOfTheWeek=function(){return["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},e.prototype.monthsOfTheYear=function(){return["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"]},e}();o.sl=u,t().locales.sl=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sv.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sv.min.js new file mode 100644 index 00000000..6cac5052 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sv.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/sv.min",["cronstrue"],t):"object"==typeof exports?exports["locales/sv.min"]=t(require("cronstrue")):e["locales/sv.min"]=t(e.cronstrue)}(globalThis,(e=>(()=>{"use strict";var t={34:t=>{t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var u=n[e]={exports:{}};return t[e](u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var e=r(34),t=r.n(e),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.sv=void 0;var u=function(){function e(){}return e.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},e.prototype.atX0MinutesPastTheHourGt20=function(){return null},e.prototype.commaMonthX0ThroughMonthX1=function(){return null},e.prototype.commaYearX0ThroughYearX1=function(){return null},e.prototype.use24HourTimeFormatByDefault=function(){return!0},e.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Ett fel inträffade vid generering av uttryckets beskrivning. Kontrollera cron-uttryckets syntax."},e.prototype.everyMinute=function(){return"varje minut"},e.prototype.everyHour=function(){return"varje timme"},e.prototype.atSpace=function(){return"Kl "},e.prototype.everyMinuteBetweenX0AndX1=function(){return"Varje minut mellan %s och %s"},e.prototype.at=function(){return"Kl"},e.prototype.spaceAnd=function(){return" och"},e.prototype.everySecond=function(){return"varje sekund"},e.prototype.everyX0Seconds=function(){return"varje %s sekund"},e.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunderna från %s till och med %s efter minuten"},e.prototype.atX0SecondsPastTheMinute=function(){return"på %s sekunder efter minuten"},e.prototype.everyX0Minutes=function(){return"var %s minut"},e.prototype.minutesX0ThroughX1PastTheHour=function(){return"minuterna från %s till och med %s efter timmen"},e.prototype.atX0MinutesPastTheHour=function(){return"på %s minuten efter timmen"},e.prototype.everyX0Hours=function(){return"var %s timme"},e.prototype.betweenX0AndX1=function(){return"mellan %s och %s"},e.prototype.atX0=function(){return"kl %s"},e.prototype.commaEveryDay=function(){return", varje dag"},e.prototype.commaEveryX0DaysOfTheWeek=function(){return", var %s dag i veckan"},e.prototype.commaX0ThroughX1=function(){return", %s till %s"},e.prototype.commaAndX0ThroughX1=function(){return", och %s till %s"},e.prototype.first=function(){return"första"},e.prototype.second=function(){return"andra"},e.prototype.third=function(){return"tredje"},e.prototype.fourth=function(){return"fjärde"},e.prototype.fifth=function(){return"femte"},e.prototype.commaOnThe=function(){return", den "},e.prototype.spaceX0OfTheMonth=function(){return" %sen av månaden"},e.prototype.lastDay=function(){return"den sista dagen"},e.prototype.commaOnTheLastX0OfTheMonth=function(){return", på sista %s av månaden"},e.prototype.commaOnlyOnX0=function(){return", varje %s"},e.prototype.commaAndOnX0=function(){return", och på %s"},e.prototype.commaEveryX0Months=function(){return", var %s månad"},e.prototype.commaOnlyInX0=function(){return", bara på %s"},e.prototype.commaOnTheLastDayOfTheMonth=function(){return", på sista dagen av månaden"},e.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", på sista veckodag av månaden"},e.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s dagar före den sista dagen i månaden"},e.prototype.firstWeekday=function(){return"första veckodag"},e.prototype.weekdayNearestDayX0=function(){return"veckodagen närmast dag %s"},e.prototype.commaOnTheX0OfTheMonth=function(){return", på den %s av månaden"},e.prototype.commaEveryX0Days=function(){return", var %s dag"},e.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", mellan dag %s och %s av månaden"},e.prototype.commaOnDayX0OfTheMonth=function(){return", på dag %s av månaden"},e.prototype.commaEveryX0Years=function(){return", var %s år"},e.prototype.commaStartingX0=function(){return", startar %s"},e.prototype.daysOfTheWeek=function(){return["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"]},e.prototype.monthsOfTheYear=function(){return["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"]},e}();n.sv=u,t().locales.sv=new u})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sw.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sw.min.js new file mode 100644 index 00000000..32babe1d --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/sw.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/sw.min",["cronstrue"],e):"object"==typeof exports?exports["locales/sw.min"]=e(require("cronstrue")):t["locales/sw.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},n={};function o(t){var r=n[t];if(void 0!==r)return r.exports;var a=n[t]={exports:{}};return e[t](a,a.exports,o),a.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{o.r(r);var t=o(34),e=o.n(t),n=r;Object.defineProperty(n,"__esModule",{value:!0}),n.sw=void 0;var a=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Kuna tatizo wakati wa kutunga msemo. Angalia cron expression syntax."},t.prototype.everyMinute=function(){return"kila dakika"},t.prototype.everyHour=function(){return"kila saa"},t.prototype.atSpace=function(){return"Kwa "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Kila dakika kwanzia %s hadi %s"},t.prototype.at=function(){return"Kwa"},t.prototype.spaceAnd=function(){return" na"},t.prototype.everySecond=function(){return"kila sekunde"},t.prototype.everyX0Seconds=function(){return"kila sekunde %s"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"sekunde ya %s hadi %s baada ya dakika"},t.prototype.atX0SecondsPastTheMinute=function(){return"sekunde %s baada ya dakika"},t.prototype.everyX0Minutes=function(){return"kila dakika %s"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},t.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},t.prototype.everyX0Hours=function(){return"every %s hours"},t.prototype.betweenX0AndX1=function(){return"kati ya %s na %s"},t.prototype.atX0=function(){return"kwenye %s"},t.prototype.commaEveryDay=function(){return", kila siku"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", kila siku %s ya wiki"},t.prototype.commaX0ThroughX1=function(){return", %s hadi %s"},t.prototype.commaAndX0ThroughX1=function(){return", na %s hadi %s"},t.prototype.first=function(){return"ya kwanza"},t.prototype.second=function(){return"ya pili"},t.prototype.third=function(){return"ya tatu"},t.prototype.fourth=function(){return"ya nne"},t.prototype.fifth=function(){return"ya tano"},t.prototype.commaOnThe=function(){return", kwenye "},t.prototype.spaceX0OfTheMonth=function(){return" siku %s ya mwezi"},t.prototype.lastDay=function(){return"siku ya mwisho"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", siku ya %s ya mwezi"},t.prototype.commaOnlyOnX0=function(){return", kwa %s tu"},t.prototype.commaAndOnX0=function(){return", na pia %s"},t.prototype.commaEveryX0Months=function(){return", kila mwezi wa %s"},t.prototype.commaOnlyInX0=function(){return", kwa %s tu"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", siku ya mwisho wa mwezi"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", wikendi ya mwisho wa mwezi"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", siku ya %s kabla ya siku ya mwisho wa mwezi"},t.prototype.firstWeekday=function(){return"siku za kazi ya kwanza"},t.prototype.weekdayNearestDayX0=function(){return"siku ya kazi karibu na siku ya %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", siku ya %s ya mwezi"},t.prototype.commaEveryX0Days=function(){return", kila siku %s"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", kati ya siku %s na %s ya mwezi"},t.prototype.commaOnDayX0OfTheMonth=function(){return", siku ya %s ya mwezi"},t.prototype.commaEveryX0Years=function(){return", kila miaka %s"},t.prototype.commaStartingX0=function(){return", kwanzia %s"},t.prototype.daysOfTheWeek=function(){return["Jumapili","Jumatatu","Jumanne","Jumatano","Alhamisi","Ijumaa","Jumamosi"]},t.prototype.monthsOfTheYear=function(){return["Januari","Februari","Machi","Aprili","Mei","Juni","Julai","Agosti","Septemba","Oktoba","Novemba","Desemba"]},t}();n.sw=a,e().locales.sw=new a})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/th.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/th.min.js new file mode 100644 index 00000000..eeecc43a --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/th.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/th.min",["cronstrue"],e):"object"==typeof exports?exports["locales/th.min"]=e(require("cronstrue")):t["locales/th.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.th=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"เกิดข้อผิดพลาดขณะสร้างคำอธิบายนิพจน์ ตรวจสอบไวยากรณ์นิพจน์ครอน"},t.prototype.everyMinute=function(){return"ทุกๆ นาที"},t.prototype.everyHour=function(){return"ทุกๆ ชั่วโมง"},t.prototype.atSpace=function(){return"เมื่อ "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"ทุกๆ นาที %s และ %s"},t.prototype.at=function(){return"เมื่อ"},t.prototype.spaceAnd=function(){return" และ"},t.prototype.everySecond=function(){return"ทุกๆ วินาที"},t.prototype.everyX0Seconds=function(){return"ทุกๆ %s วินาที"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"วินาที %s ถึง %s นาทีที่ผ่านมา"},t.prototype.atX0SecondsPastTheMinute=function(){return"เมื่อ %s วินาที นาทีที่ผ่านมา"},t.prototype.everyX0Minutes=function(){return"ทุกๆ %s นาที"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"นาที %s ถึง %s ชั่วโมงที่ผ่านมา"},t.prototype.atX0MinutesPastTheHour=function(){return"เมื่อ %s นาที ชั่วโมงที่ผ่านมา"},t.prototype.everyX0Hours=function(){return"ทุกๆ %s ชั่วโมง"},t.prototype.betweenX0AndX1=function(){return"ระหว่าง %s ถึง %s"},t.prototype.atX0=function(){return"เมื่อ %s"},t.prototype.commaEveryDay=function(){return", ทุกๆ วัน"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", ทุกๆ %s วันของสัปดาห์"},t.prototype.commaX0ThroughX1=function(){return", %s ถึง %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s ถึง %s"},t.prototype.first=function(){return"แรก"},t.prototype.second=function(){return"ที่สอง"},t.prototype.third=function(){return"ที่สาม"},t.prototype.fourth=function(){return"ที่สี่"},t.prototype.fifth=function(){return"ที่ห้า"},t.prototype.commaOnThe=function(){return", ในวัน "},t.prototype.spaceX0OfTheMonth=function(){return" %s ของเดือน"},t.prototype.lastDay=function(){return"วันสุดท้าย"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", ณ สุดท้าย %s ของเดือน"},t.prototype.commaOnlyOnX0=function(){return", เท่านั้น %s"},t.prototype.commaAndOnX0=function(){return", และใน %s"},t.prototype.commaEveryX0Months=function(){return", ทุกๆ %s เดือน"},t.prototype.commaOnlyInX0=function(){return", เท่านั้น %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ในวันสิ้นเดือน"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ในวันธรรมดาสุดท้ายของเดือน"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s วันก่อนวันสุดท้ายของเดือน"},t.prototype.firstWeekday=function(){return"วันธรรมดาวันแรก"},t.prototype.weekdayNearestDayX0=function(){return"วันธรรมดาที่ใกล้ที่สุด %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", ในวัน %s ของเดือน"},t.prototype.commaEveryX0Days=function(){return", ทุกๆ %s วัน"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", ระหว่างวัน %s และ %s ของเดือน"},t.prototype.commaOnDayX0OfTheMonth=function(){return", ในวัน %s ของเดือน"},t.prototype.commaEveryHour=function(){return", ทุกๆ ชั่วโมง"},t.prototype.commaEveryX0Years=function(){return", ทุกๆ %s ปี"},t.prototype.commaStartingX0=function(){return", เริ่ม %s"},t.prototype.daysOfTheWeek=function(){return["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"]},t.prototype.monthsOfTheYear=function(){return["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"]},t}();o.th=u,e().locales.th=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/tr.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/tr.min.js new file mode 100644 index 00000000..31eadc63 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/tr.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/tr.min",["cronstrue"],e):"object"==typeof exports?exports["locales/tr.min"]=e(require("cronstrue")):t["locales/tr.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},n={};function r(t){var o=n[t];if(void 0!==o)return o.exports;var a=n[t]={exports:{}};return e[t](a,a.exports,r),a.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};return(()=>{r.r(o);var t=r(34),e=r.n(t),n=o;Object.defineProperty(n,"__esModule",{value:!0}),n.tr=void 0;var a=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"her dakika"},t.prototype.everyHour=function(){return"her saat"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"İfade açıklamasını oluştururken bir hata oluştu. Cron ifadesini gözden geçirin."},t.prototype.atSpace=function(){return"Saat "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Saat %s ve %s arasındaki her dakika"},t.prototype.at=function(){return"Saat"},t.prototype.spaceAnd=function(){return" ve"},t.prototype.everySecond=function(){return"her saniye"},t.prototype.everyX0Seconds=function(){return"her %s saniyede bir"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"dakikaların %s. ve %s. saniyeleri arası"},t.prototype.atX0SecondsPastTheMinute=function(){return"dakikaların %s. saniyesinde"},t.prototype.everyX0Minutes=function(){return"her %s dakikada bir"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"saatlerin %s. ve %s. dakikaları arası"},t.prototype.atX0MinutesPastTheHour=function(){return"saatlerin %s. dakikasında"},t.prototype.everyX0Hours=function(){return"her %s saatte"},t.prototype.betweenX0AndX1=function(){return"%s ile %s arasında"},t.prototype.atX0=function(){return"saat %s"},t.prototype.commaEveryDay=function(){return", her gün"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", ayın her %s günü"},t.prototype.commaX0ThroughX1=function(){return", %s ile %s arasında"},t.prototype.commaAndX0ThroughX1=function(){return", ve %s ile %s arasında"},t.prototype.first=function(){return"ilk"},t.prototype.second=function(){return"ikinci"},t.prototype.third=function(){return"üçüncü"},t.prototype.fourth=function(){return"dördüncü"},t.prototype.fifth=function(){return"beşinci"},t.prototype.commaOnThe=function(){return", ayın "},t.prototype.spaceX0OfTheMonth=function(){return" %s günü"},t.prototype.lastDay=function(){return"son gün"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", ayın son %s günü"},t.prototype.commaOnlyOnX0=function(){return", sadece %s günü"},t.prototype.commaAndOnX0=function(){return", ve %s"},t.prototype.commaEveryX0Months=function(){return", %s ayda bir"},t.prototype.commaOnlyInX0=function(){return", sadece %s için"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", ayın son günü"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", ayın son iş günü"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s ayın son gününden önceki günler"},t.prototype.firstWeekday=function(){return"ilk iş günü"},t.prototype.weekdayNearestDayX0=function(){return"%s. günü sonrasındaki ilk iş günü"},t.prototype.commaOnTheX0OfTheMonth=function(){return", ayın %s"},t.prototype.commaEveryX0Days=function(){return", %s günde bir"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", ayın %s. ve %s. günleri arası"},t.prototype.commaOnDayX0OfTheMonth=function(){return", ayın %s. günü"},t.prototype.commaEveryX0Years=function(){return", %s yılda bir"},t.prototype.commaStartingX0=function(){return", başlangıç %s"},t.prototype.daysOfTheWeek=function(){return["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},t.prototype.monthsOfTheYear=function(){return["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"]},t}();n.tr=a,e().locales.tr=new a})(),o})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/uk.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/uk.min.js new file mode 100644 index 00000000..10b5f217 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/uk.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/uk.min",["cronstrue"],e):"object"==typeof exports?exports["locales/uk.min"]=e(require("cronstrue")):t["locales/uk.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.uk=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"щохвилини"},t.prototype.everyHour=function(){return"щогодини"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"ВІдбулася помилка підчас генерації опису. Перевірта правильність написання cron виразу."},t.prototype.atSpace=function(){return"О "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Щохвилини між %s та %s"},t.prototype.at=function(){return"О"},t.prototype.spaceAnd=function(){return" та"},t.prototype.everySecond=function(){return"Щосекунди"},t.prototype.everyX0Seconds=function(){return"кожні %s секунд"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"з %s по %s секунду"},t.prototype.atX0SecondsPastTheMinute=function(){return"о %s секунді"},t.prototype.everyX0Minutes=function(){return"кожні %s хвилин"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"з %s по %s хвилину"},t.prototype.atX0MinutesPastTheHour=function(){return"о %s хвилині"},t.prototype.everyX0Hours=function(){return"кожні %s годин"},t.prototype.betweenX0AndX1=function(){return"між %s та %s"},t.prototype.atX0=function(){return"о %s"},t.prototype.commaEveryDay=function(){return", щоденно"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", кожен %s день тижня"},t.prototype.commaX0ThroughX1=function(){return", %s по %s"},t.prototype.commaAndX0ThroughX1=function(){return", та %s по %s"},t.prototype.first=function(){return"перший"},t.prototype.second=function(){return"другий"},t.prototype.third=function(){return"третій"},t.prototype.fourth=function(){return"четвертий"},t.prototype.fifth=function(){return"п'ятий"},t.prototype.commaOnThe=function(){return", в "},t.prototype.spaceX0OfTheMonth=function(){return" %s місяця"},t.prototype.lastDay=function(){return"останній день"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", в останній %s місяця"},t.prototype.commaOnlyOnX0=function(){return", тільки в %s"},t.prototype.commaAndOnX0=function(){return", і в %s"},t.prototype.commaEveryX0Months=function(){return", кожен %s місяць"},t.prototype.commaOnlyInX0=function(){return", тільки в %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", в останній день місяця"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", в останній будень місяця"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s днів до останнього дня місяця"},t.prototype.firstWeekday=function(){return"перший будень"},t.prototype.weekdayNearestDayX0=function(){return"будень найближчий до %s дня"},t.prototype.commaOnTheX0OfTheMonth=function(){return", в %s місяця"},t.prototype.commaEveryX0Days=function(){return", кожен %s день"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", між %s та %s днями місяця"},t.prototype.commaOnDayX0OfTheMonth=function(){return", на %s день місяця"},t.prototype.commaEveryX0Years=function(){return", кожні %s роки"},t.prototype.commaStartingX0=function(){return", початок %s"},t.prototype.daysOfTheWeek=function(){return["неділя","понеділок","вівторок","середа","четвер","п'ятниця","субота"]},t.prototype.monthsOfTheYear=function(){return["січень","лютий","березень","квітень","травень","червень","липень","серпень","вересень","жовтень","листопад","грудень"]},t}();o.uk=u,e().locales.uk=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/vi.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/vi.min.js new file mode 100644 index 00000000..48c86600 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/vi.min.js @@ -0,0 +1 @@ +!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/vi.min",["cronstrue"],n):"object"==typeof exports?exports["locales/vi.min"]=n(require("cronstrue")):t["locales/vi.min"]=n(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var n={34:n=>{n.exports=t}},o={};function e(t){var r=o[t];if(void 0!==r)return r.exports;var u=o[t]={exports:{}};return n[t](u,u.exports,e),u.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{e.r(r);var t=e(34),n=e.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.vi=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"Đã xảy ra lỗi khi tạo mô tả biểu thức. Vui lòng kiểm tra cú pháp biểu thức cron."},t.prototype.everyMinute=function(){return"mỗi phút"},t.prototype.everyHour=function(){return"mỗi giờ"},t.prototype.atSpace=function(){return"Vào "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Mỗi phút giữa %s and %s"},t.prototype.at=function(){return"Vào"},t.prototype.spaceAnd=function(){return" và"},t.prototype.everySecond=function(){return"mỗi giây"},t.prototype.everyX0Seconds=function(){return"mỗi %s giây"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"giây thứ %s qua phút thứ %s"},t.prototype.atX0SecondsPastTheMinute=function(){return"tại giây thứ %s của mỗi phút"},t.prototype.everyX0Minutes=function(){return"mỗi %s phút"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"phút thứ %s qua %s tiếng"},t.prototype.atX0MinutesPastTheHour=function(){return"vào %s phút của mỗi tiếng"},t.prototype.everyX0Hours=function(){return"mỗi %s tiếng"},t.prototype.betweenX0AndX1=function(){return"giữa %s và %s"},t.prototype.atX0=function(){return"vào %s"},t.prototype.commaEveryDay=function(){return", mỗi ngày"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", mỗi %s ngày trong tuần"},t.prototype.commaX0ThroughX1=function(){return", %s đến %s"},t.prototype.commaAndX0ThroughX1=function(){return", %s đến %s"},t.prototype.first=function(){return"đầu tiên"},t.prototype.second=function(){return"thứ 2"},t.prototype.third=function(){return"thứ 3"},t.prototype.fourth=function(){return"thứ 4"},t.prototype.fifth=function(){return"thứ 5"},t.prototype.commaOnThe=function(){return", trên "},t.prototype.spaceX0OfTheMonth=function(){return" %s của tháng"},t.prototype.lastDay=function(){return"ngày cuối cùng"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", vào ngày %s cuối cùng của tháng"},t.prototype.commaOnlyOnX0=function(){return", chỉ trên %s"},t.prototype.commaAndOnX0=function(){return", và hơn %s"},t.prototype.commaEveryX0Months=function(){return", mỗi ngày %s tháng"},t.prototype.commaOnlyInX0=function(){return", chỉ trong %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", vào ngày cuối cùng của tháng"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", vào ngày cuối tuần của tháng"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s ngày trước ngày cuối cùng của tháng"},t.prototype.firstWeekday=function(){return"ngày đầu tuần"},t.prototype.weekdayNearestDayX0=function(){return"ngày trong tuần ngày gần nhất %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", vào ngày %s của tháng"},t.prototype.commaEveryX0Days=function(){return", mỗi %s ngày"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", giữa ngày %s và %s trong tháng"},t.prototype.commaOnDayX0OfTheMonth=function(){return", vào %s ngày trong tháng"},t.prototype.commaEveryHour=function(){return", mỗi tiếng"},t.prototype.commaEveryX0Years=function(){return", mỗi %s năm"},t.prototype.commaStartingX0=function(){return", bắt đầu %s"},t.prototype.daysOfTheWeek=function(){return["Chủ nhật","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"]},t.prototype.monthsOfTheYear=function(){return["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"]},t}();o.vi=u,n().locales.vi=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/zh_CN.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/zh_CN.min.js new file mode 100644 index 00000000..610b7efc --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/zh_CN.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/zh_CN.min",["cronstrue"],e):"object"==typeof exports?exports["locales/zh_CN.min"]=e(require("cronstrue")):t["locales/zh_CN.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function r(t){var n=o[t];if(void 0!==n)return n.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,r),u.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{r.r(n);var t=r(34),e=r.n(t),o=n;Object.defineProperty(o,"__esModule",{value:!0}),o.zh_CN=void 0;var u=function(){function t(){}return t.prototype.setPeriodBeforeTime=function(){return!0},t.prototype.pm=function(){return"下午"},t.prototype.am=function(){return"上午"},t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return", 从%s年至%s年"},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.everyMinute=function(){return"每分钟"},t.prototype.everyHour=function(){return"每小时"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"生成表达式描述时发生了错误,请检查cron表达式语法。"},t.prototype.atSpace=function(){return"在"},t.prototype.everyMinuteBetweenX0AndX1=function(){return"在 %s 至 %s 之间的每分钟"},t.prototype.at=function(){return"在"},t.prototype.spaceAnd=function(){return" 和"},t.prototype.everySecond=function(){return"每秒"},t.prototype.everyX0Seconds=function(){return"每隔 %s 秒"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"在每分钟的第 %s 到 %s 秒"},t.prototype.atX0SecondsPastTheMinute=function(){return"在每分钟的第 %s 秒"},t.prototype.everyX0Minutes=function(){return"每隔 %s 分钟"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"在每小时的第 %s 到 %s 分钟"},t.prototype.atX0MinutesPastTheHour=function(){return"在每小时的第 %s 分钟"},t.prototype.everyX0Hours=function(){return"每隔 %s 小时"},t.prototype.betweenX0AndX1=function(){return"在 %s 和 %s 之间"},t.prototype.atX0=function(){return"在%s"},t.prototype.commaEveryDay=function(){return", 每天"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", 每周的每 %s 天"},t.prototype.commaX0ThroughX1=function(){return", %s至%s"},t.prototype.commaAndX0ThroughX1=function(){return", 和%s至%s"},t.prototype.first=function(){return"第一个"},t.prototype.second=function(){return"第二个"},t.prototype.third=function(){return"第三个"},t.prototype.fourth=function(){return"第四个"},t.prototype.fifth=function(){return"第五个"},t.prototype.commaOnThe=function(){return", 限每月的"},t.prototype.spaceX0OfTheMonth=function(){return"%s"},t.prototype.lastDay=function(){return"本月最后一天"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", 限每月的最后一个%s"},t.prototype.commaOnlyOnX0=function(){return", 仅%s"},t.prototype.commaAndOnX0=function(){return", 或者为%s"},t.prototype.commaEveryX0Months=function(){return", 每隔 %s 个月"},t.prototype.commaOnlyInX0=function(){return", 仅限%s"},t.prototype.commaOnlyInMonthX0=function(){return", 仅于%s份"},t.prototype.commaOnlyInYearX0=function(){return", 仅于 %s 年"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", 限每月的最后一天"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", 限每月的最后一个工作日"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", 限每月最后%s天"},t.prototype.firstWeekday=function(){return"第一个工作日"},t.prototype.weekdayNearestDayX0=function(){return"最接近 %s 号的工作日"},t.prototype.commaOnTheX0OfTheMonth=function(){return", 限每月的%s"},t.prototype.commaEveryX0Days=function(){return", 每隔 %s 天"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", 限每月的 %s 至 %s 之间"},t.prototype.commaOnDayX0OfTheMonth=function(){return", 限每月%s"},t.prototype.commaEveryX0Years=function(){return", 每隔 %s 年"},t.prototype.commaStartingX0=function(){return", %s开始"},t.prototype.dayX0=function(){return" %s 号"},t.prototype.daysOfTheWeek=function(){return["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},t.prototype.monthsOfTheYear=function(){return["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},t}();o.zh_CN=u,e().locales.zh_CN=new u})(),n})())); \ No newline at end of file diff --git a/dlrs/main/staticresources/dlrs/js/cronstrue/locales/zh_TW.min.js b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/zh_TW.min.js new file mode 100644 index 00000000..9fbf7292 --- /dev/null +++ b/dlrs/main/staticresources/dlrs/js/cronstrue/locales/zh_TW.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("cronstrue")):"function"==typeof define&&define.amd?define("locales/zh_TW.min",["cronstrue"],e):"object"==typeof exports?exports["locales/zh_TW.min"]=e(require("cronstrue")):t["locales/zh_TW.min"]=e(t.cronstrue)}(globalThis,(t=>(()=>{"use strict";var e={34:e=>{e.exports=t}},o={};function n(t){var r=o[t];if(void 0!==r)return r.exports;var u=o[t]={exports:{}};return e[t](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{n.r(r);var t=n(34),e=n.n(t),o=r;Object.defineProperty(o,"__esModule",{value:!0}),o.zh_TW=void 0;var u=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return", 從 %s 年至 %s 年"},t.prototype.use24HourTimeFormatByDefault=function(){return!0},t.prototype.everyMinute=function(){return"每分鐘"},t.prototype.everyHour=function(){return"每小時"},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"產生表達式描述時發生了錯誤,請檢查 cron 表達式語法。"},t.prototype.atSpace=function(){return"在 "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"在 %s 和 %s 之間的每分鐘"},t.prototype.at=function(){return"在"},t.prototype.spaceAnd=function(){return" 和"},t.prototype.everySecond=function(){return"每秒"},t.prototype.everyX0Seconds=function(){return"每 %s 秒"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"在每分鐘的 %s 到 %s 秒"},t.prototype.atX0SecondsPastTheMinute=function(){return"在每分鐘的 %s 秒"},t.prototype.everyX0Minutes=function(){return"每 %s 分鐘"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"在每小時的 %s 到 %s 分鐘"},t.prototype.atX0MinutesPastTheHour=function(){return"在每小時的 %s 分"},t.prototype.everyX0Hours=function(){return"每 %s 小時"},t.prototype.betweenX0AndX1=function(){return"在 %s 和 %s 之間"},t.prototype.atX0=function(){return"在 %s"},t.prototype.commaEveryDay=function(){return", 每天"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", 每週的每 %s 天"},t.prototype.commaX0ThroughX1=function(){return", %s 到 %s"},t.prototype.commaAndX0ThroughX1=function(){return", 和 %s 到 %s"},t.prototype.first=function(){return"第一個"},t.prototype.second=function(){return"第二個"},t.prototype.third=function(){return"第三個"},t.prototype.fourth=function(){return"第四個"},t.prototype.fifth=function(){return"第五個"},t.prototype.commaOnThe=function(){return", 在每月 "},t.prototype.spaceX0OfTheMonth=function(){return"%s "},t.prototype.lastDay=function(){return"最後一天"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", 每月的最後一個 %s "},t.prototype.commaOnlyOnX0=function(){return", 僅在 %s"},t.prototype.commaAndOnX0=function(){return", 或 %s"},t.prototype.commaEveryX0Months=function(){return", 每 %s 月"},t.prototype.commaOnlyInX0=function(){return", 僅在 %s"},t.prototype.commaOnlyInMonthX0=function(){return", 僅在 %s"},t.prototype.commaOnlyInYearX0=function(){return", 僅在 %s 年"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", 每月的最後一天"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", 每月的最後一個工作日"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s 這個月的最後一天的前幾天"},t.prototype.firstWeekday=function(){return"第一個工作日"},t.prototype.weekdayNearestDayX0=function(){return"最接近 %s 號的工作日"},t.prototype.commaOnTheX0OfTheMonth=function(){return", 每月的 %s "},t.prototype.commaEveryX0Days=function(){return", 每 %s 天"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", 在每月的 %s 和 %s 之間"},t.prototype.commaOnDayX0OfTheMonth=function(){return", 每月的 %s"},t.prototype.commaEveryX0Years=function(){return", 每 %s 年"},t.prototype.commaStartingX0=function(){return", %s 開始"},t.prototype.dayX0=function(){return" %s 號"},t.prototype.daysOfTheWeek=function(){return["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},t.prototype.monthsOfTheYear=function(){return["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},t}();o.zh_TW=u,e().locales.zh_TW=new u})(),r})())); \ No newline at end of file diff --git a/dlrs/main/tabs/ManageLookupRollupSummaries.tab-meta.xml b/dlrs/main/tabs/ManageLookupRollupSummaries.tab-meta.xml index 400815a7..b970d6f9 100644 --- a/dlrs/main/tabs/ManageLookupRollupSummaries.tab-meta.xml +++ b/dlrs/main/tabs/ManageLookupRollupSummaries.tab-meta.xml @@ -1,4 +1,4 @@ - + Custom9: Lightning diff --git a/dlrs/main/tabs/ManageLookupRollupSummaries2.tab-meta.xml b/dlrs/main/tabs/ManageLookupRollupSummaries2.tab-meta.xml new file mode 100644 index 00000000..9331d4f0 --- /dev/null +++ b/dlrs/main/tabs/ManageLookupRollupSummaries2.tab-meta.xml @@ -0,0 +1,7 @@ + + + Manage Lookup Rollup Configs + ManageLookupRollupSummaries + + Custom67: Gears + diff --git a/dlrs/main/triggers/RollupSummariesTrigger.trigger-meta.xml b/dlrs/main/triggers/RollupSummariesTrigger.trigger-meta.xml index 78d3f042..9eb00646 100644 --- a/dlrs/main/triggers/RollupSummariesTrigger.trigger-meta.xml +++ b/dlrs/main/triggers/RollupSummariesTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/package-lock.json b/package-lock.json index 70f0f8b7..bbb102cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,10 @@ "name": "DLRS-Local-Dev-Setup", "version": "0.0.1", "hasInstallScript": true, + "dependencies": { + "cronstrue": "^2.48.0", + "js-levenshtein": "^1.1.6" + }, "devDependencies": { "@lwc/eslint-plugin-lwc": "^1.1.1", "@prettier/plugin-xml": "^0.13.1", @@ -3381,6 +3385,14 @@ "node": ">=10" } }, + "node_modules/cronstrue": { + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.48.0.tgz", + "integrity": "sha512-w+VAWjiBJmKYeeK+i0ur3G47LcKNgFuWwb8LVJTaXSS2ExtQ5zdiIVnuysgB3N457gTaSllme0qTpdsJWK/wIg==", + "bin": { + "cronstrue": "bin/cli.js" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7386,6 +7398,14 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", diff --git a/package.json b/package.json index 8c4f20f9..7a2efa30 100644 --- a/package.json +++ b/package.json @@ -44,5 +44,9 @@ "**/{aura,lwc}/**": [ "eslint" ] + }, + "dependencies": { + "cronstrue": "^2.48.0", + "js-levenshtein": "^1.1.6" } } diff --git a/sfdx-project.json b/sfdx-project.json index a1e85d31..35dad1f4 100644 --- a/sfdx-project.json +++ b/sfdx-project.json @@ -28,5 +28,5 @@ ], "namespace": "dlrs", "sfdcLoginUrl": "https://login.salesforce.com", - "sourceApiVersion": "60.0" + "sourceApiVersion": "62.0" } diff --git a/unpackaged/config/qa/applications/DLRS_QA_App.app-meta.xml b/unpackaged/config/qa/applications/DLRS_QA_App.app-meta.xml index 0698890f..28bc3e15 100644 --- a/unpackaged/config/qa/applications/DLRS_QA_App.app-meta.xml +++ b/unpackaged/config/qa/applications/DLRS_QA_App.app-meta.xml @@ -2,21 +2,21 @@ View - Action override created by Lightning App Builder during activation. - QAContactRecordPage + Action override updated by Lightning App Builder during activation. + QAAccountRecordPage Small false Flexipage - Contact + Account View - Action override created by Lightning App Builder during activation. - QAContactRecordPage + Action override updated by Lightning App Builder during activation. + QAAccountRecordPage Large false Flexipage - Contact + Account View @@ -39,92 +39,92 @@ View Action override created by Lightning App Builder during activation. - QALeadRecordPage + QAContactRecordPage Small false Flexipage - Lead + Contact View Action override created by Lightning App Builder during activation. - QALeadRecordPage + QAContactRecordPage Large false Flexipage - Lead + Contact View Action override created by Lightning App Builder during activation. - QAOpportunityRecordPage + QALeadRecordPage Small false Flexipage - Opportunity + Lead View Action override created by Lightning App Builder during activation. - QAOpportunityRecordPage + QALeadRecordPage Large false Flexipage - Opportunity + Lead View Action override updated by Lightning App Builder during activation. - QAAccountRecordPage + QALookupChildRecordPage Small false Flexipage - Account + QALookupChild__c View Action override updated by Lightning App Builder during activation. - QAAccountRecordPage + QALookupChildRecordPage Large false Flexipage - Account + QALookupChild__c View Action override updated by Lightning App Builder during activation. - QALookupChildRecordPage + QALookupParentRecordPage Small false Flexipage - QALookupChild__c + QALookupParent__c View Action override updated by Lightning App Builder during activation. - QALookupChildRecordPage + QALookupParentRecordPage Large false Flexipage - QALookupChild__c + QALookupParent__c View - Action override updated by Lightning App Builder during activation. - QALookupParentRecordPage + Action override created by Lightning App Builder during activation. + QAOpportunityRecordPage Small false Flexipage - QALookupParent__c + Opportunity View - Action override updated by Lightning App Builder during activation. - QALookupParentRecordPage + Action override created by Lightning App Builder during activation. + QAOpportunityRecordPage Large false Flexipage - QALookupParent__c + Opportunity #7B4ED0 @@ -150,8 +150,9 @@ standard-Lead standard-Case standard-Opportunity + standard-Campaign standard-report standard-Dashboard Lightning DLRS_QA_App_UtilityBar - \ No newline at end of file + diff --git a/unpackaged/config/qa/classes/AccountTest.cls b/unpackaged/config/qa/classes/AccountTest.cls new file mode 100644 index 00000000..afd2a7c0 --- /dev/null +++ b/unpackaged/config/qa/classes/AccountTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class AccountTest +{ + @IsTest + private static void testTrigger() + { + // Force the QALookupParentTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new Account()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/AccountTest.cls-meta.xml b/unpackaged/config/qa/classes/AccountTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/AccountTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/CampaignMemberTest.cls b/unpackaged/config/qa/classes/CampaignMemberTest.cls new file mode 100644 index 00000000..1297f394 --- /dev/null +++ b/unpackaged/config/qa/classes/CampaignMemberTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class CampaignMemberTest +{ + @IsTest + private static void testTrigger() + { + // Force the CampaignMemberTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new CampaignMember()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/CampaignMemberTest.cls-meta.xml b/unpackaged/config/qa/classes/CampaignMemberTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/CampaignMemberTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/CaseTest.cls b/unpackaged/config/qa/classes/CaseTest.cls new file mode 100644 index 00000000..8994a915 --- /dev/null +++ b/unpackaged/config/qa/classes/CaseTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class CaseTest +{ + @IsTest + private static void testTrigger() + { + // Force the CaseTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new Case()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/CaseTest.cls-meta.xml b/unpackaged/config/qa/classes/CaseTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/CaseTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/ContactTest.cls b/unpackaged/config/qa/classes/ContactTest.cls new file mode 100644 index 00000000..eeebad4c --- /dev/null +++ b/unpackaged/config/qa/classes/ContactTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class ContactTest +{ + @IsTest + private static void testTrigger() + { + // Force the ContactTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new Contact()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/ContactTest.cls-meta.xml b/unpackaged/config/qa/classes/ContactTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/ContactTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/OpportunityContactRoleTest.cls b/unpackaged/config/qa/classes/OpportunityContactRoleTest.cls new file mode 100644 index 00000000..a402ce20 --- /dev/null +++ b/unpackaged/config/qa/classes/OpportunityContactRoleTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class OpportunityContactRoleTest +{ + @IsTest + private static void testTrigger() + { + // Force the OpportunityContactRoleTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new OpportunityContactRole()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/OpportunityContactRoleTest.cls-meta.xml b/unpackaged/config/qa/classes/OpportunityContactRoleTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/OpportunityContactRoleTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/OpportunityTest.cls b/unpackaged/config/qa/classes/OpportunityTest.cls new file mode 100644 index 00000000..576a618a --- /dev/null +++ b/unpackaged/config/qa/classes/OpportunityTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class OpportunityTest +{ + @IsTest + private static void testTrigger() + { + // Force the OpportunityTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new Opportunity()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/OpportunityTest.cls-meta.xml b/unpackaged/config/qa/classes/OpportunityTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/OpportunityTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/QAHelper.cls-meta.xml b/unpackaged/config/qa/classes/QAHelper.cls-meta.xml index df13efa8..800ee428 100644 --- a/unpackaged/config/qa/classes/QAHelper.cls-meta.xml +++ b/unpackaged/config/qa/classes/QAHelper.cls-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/qa/classes/QALookupChildTest.cls b/unpackaged/config/qa/classes/QALookupChildTest.cls new file mode 100644 index 00000000..9cb15ffe --- /dev/null +++ b/unpackaged/config/qa/classes/QALookupChildTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class QALookupChildTest +{ + @IsTest + private static void testTrigger() + { + // Force the QALookupChildTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new QALookupChild__c()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/QALookupChildTest.cls-meta.xml b/unpackaged/config/qa/classes/QALookupChildTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/QALookupChildTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/classes/QALookupParentTest.cls b/unpackaged/config/qa/classes/QALookupParentTest.cls new file mode 100644 index 00000000..bb51d696 --- /dev/null +++ b/unpackaged/config/qa/classes/QALookupParentTest.cls @@ -0,0 +1,13 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +@IsTest +private class QALookupParentTest +{ + @IsTest + private static void testTrigger() + { + // Force the QALookupParentTrigger to be invoked, fails the test if org config or other Apex code prevents this. + RollupService.testHandler(new QALookupParent__c()); + } +} \ No newline at end of file diff --git a/unpackaged/config/qa/classes/QALookupParentTest.cls-meta.xml b/unpackaged/config/qa/classes/QALookupParentTest.cls-meta.xml new file mode 100644 index 00000000..998805a8 --- /dev/null +++ b/unpackaged/config/qa/classes/QALookupParentTest.cls-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Concatenate.md new file mode 100644 index 00000000..a8de1d65 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + Account_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Account + + + ConcatenateDelimiter__c + , + + + Description__c + + + + FieldToAggregate__c + Name + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ParentId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Min.md new file mode 100644 index 00000000..e38404e8 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + Account_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Account + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + NumberOfEmployees + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ParentId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Sum.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Sum.md new file mode 100644 index 00000000..ac2ee8c6 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Account_Sum.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Sum + + + AggregateResultField__c + Account_Sum__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Account + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + NumberOfEmployees + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ParentId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Concatenate.md new file mode 100644 index 00000000..136b37eb --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + Case_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + ; + + + Description__c + + + + FieldToAggregate__c + Status + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Count.md new file mode 100644 index 00000000..5eb16355 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + Case_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Min.md new file mode 100644 index 00000000..e5de9bf7 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Case_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + Case_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Concatenate.md new file mode 100644 index 00000000..3b1171c1 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + Contact_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Contact + + + ConcatenateDelimiter__c + ; + + + Description__c + + + + FieldToAggregate__c + FirstName + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Count.md new file mode 100644 index 00000000..dd197ace --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + Contact_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Contact + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Min.md new file mode 100644 index 00000000..92bc038d --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Contact_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + Contact_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Contact + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Birthdate + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Concatenate.md new file mode 100644 index 00000000..e8127b83 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate Distinct + + + AggregateResultField__c + Opportunity_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Opportunity + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + StageName + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Max.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Max.md new file mode 100644 index 00000000..0dc94a05 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Max.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Max + + + AggregateResultField__c + Opportunity_Max__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Opportunity + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Amount + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Sum.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Sum.md new file mode 100644 index 00000000..8c609b0e --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_Opportunity_Sum.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Sum + + + AggregateResultField__c + Opportunity_Sum__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Opportunity + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Amount + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + AccountId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Concatenate.md new file mode 100644 index 00000000..a7e7c513 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate Distinct + + + AggregateResultField__c + QA_Lookup_Parent_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupParent__c + + + ConcatenateDelimiter__c + ; + + + Description__c + + + + FieldToAggregate__c + Colours__c + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Account__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Min.md new file mode 100644 index 00000000..c10c00cf --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + QA_Lookup_Parent_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupParent__c + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + QA_Lookup_Amount_Min__c + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Account__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Sum.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Sum.md new file mode 100644 index 00000000..f14e353a --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Account_QALookupParent_Sum.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Sum + + + AggregateResultField__c + QA_Lookup_Parent_Sum__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupParent__c + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Total__c + + + FieldToOrderBy__c + + + + ParentObject__c + Account + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Account__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Concatenate.md new file mode 100644 index 00000000..5903d529 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + CampaignMember_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + CampaignMember + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + LastName + + + FieldToOrderBy__c + + + + ParentObject__c + Campaign + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + CampaignId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Count.md new file mode 100644 index 00000000..5c4ea337 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + CampaignMember_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + CampaignMember + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + Campaign + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + CampaignId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Min.md new file mode 100644 index 00000000..17058153 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Campaign_CampaignMember_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + CampaignMember_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + CampaignMember + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + Campaign + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + CampaignId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Concatenate.md new file mode 100644 index 00000000..29706f2f --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + Case_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + , + + + Description__c + + + + FieldToAggregate__c + Status + + + FieldToOrderBy__c + + + + ParentObject__c + Case + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ParentId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Count.md new file mode 100644 index 00000000..d77a1870 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + Case_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + Case + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ParentId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Min.md new file mode 100644 index 00000000..288679ad --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_Case_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + Case_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + Case + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ParentId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Concatenate.md new file mode 100644 index 00000000..0b4a4682 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + QA_Lookup_Parent_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupParent__c + + + ConcatenateDelimiter__c + ; + + + Description__c + + + + FieldToAggregate__c + Colours__c + + + FieldToOrderBy__c + + + + ParentObject__c + Case + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Case__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Min.md new file mode 100644 index 00000000..ac4d9507 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + QA_Lookup_Parent_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupParent__c + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + QA_Lookup_Amount_Min__c + + + FieldToOrderBy__c + + + + ParentObject__c + Case + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Case__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Sum.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Sum.md new file mode 100644 index 00000000..be42d959 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Case_QALookupParent_Sum.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Sum + + + AggregateResultField__c + QA_Lookup_Parent_Sum__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupParent__c + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Total__c + + + FieldToOrderBy__c + + + + ParentObject__c + Case + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Case__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Concatenate.md new file mode 100644 index 00000000..ac90fc0a --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + OCR_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + OpportunityContactRole + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Role + + + FieldToOrderBy__c + + + + ParentObject__c + Contact + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ContactId + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Count.md new file mode 100644 index 00000000..c52ebe4f --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + OCR_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + OpportunityContactRole + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + Contact + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ContactId + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Min.md new file mode 100644 index 00000000..f05ccf52 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Contact_OCR_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + OCR_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + OpportunityContactRole + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + Contact + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + ContactId + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Concatenate.md new file mode 100644 index 00000000..8065dc87 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + OCR_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + OpportunityContactRole + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Role + + + FieldToOrderBy__c + + + + ParentObject__c + Contact + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + Id + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Count.md new file mode 100644 index 00000000..96119f97 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + OCR_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + OpportunityContactRole + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + Opportunity + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + OpportunityId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Min.md new file mode 100644 index 00000000..b22add25 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.Opportunity_OCR_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + OCR_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + OpportunityContactRole + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + Opportunity + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + OpportunityId + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Concatenate.md new file mode 100644 index 00000000..d1f89917 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + Case_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + , + + + Description__c + + + + FieldToAggregate__c + Status + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + QA_Lookup_Parent__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Count.md new file mode 100644 index 00000000..a17b0595 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + Case_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + QA_Lookup_Parent__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Min.md new file mode 100644 index 00000000..676d473b --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Case_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + Case_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Case + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + QA_Lookup_Parent__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Concatenate.md new file mode 100644 index 00000000..c382ab4e --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate + + + AggregateResultField__c + Opportunity_Concatenate__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Opportunity + + + ConcatenateDelimiter__c + ; + + + Description__c + + + + FieldToAggregate__c + Name + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + QA_Lookup_Parent__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Count.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Count.md new file mode 100644 index 00000000..5dd2bf1d --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Count.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Count + + + AggregateResultField__c + Opportunity_Count__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Opportunity + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Id + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + QA_Lookup_Parent__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Min.md new file mode 100644 index 00000000..806d022d --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_Opportunity_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + Opportunity_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + Opportunity + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + CreatedDate + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + QA_Lookup_Parent__c + + + RowLimit__c + 0.0 + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Concatenate.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Concatenate.md new file mode 100644 index 00000000..6e01180a --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Concatenate.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Concatenate Distinct + + + AggregateResultField__c + Colours__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupChild__c + + + ConcatenateDelimiter__c + ; + + + Description__c + + + + FieldToAggregate__c + Color__c + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + LookupParent__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Min.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Min.md new file mode 100644 index 00000000..d2f816e8 --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Min.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Min + + + AggregateResultField__c + QA_Lookup_Amount_Min__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupChild__c + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Amount__c + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + LookupParent__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Sum.md b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Sum.md new file mode 100644 index 00000000..efd1a53c --- /dev/null +++ b/unpackaged/config/qa/customMetadata/LookupRollupSummary2.QALookupParent_QALookupChild_Sum.md @@ -0,0 +1,85 @@ + + + + false + + Active__c + true + + + AggregateAllRows__c + false + + + AggregateOperation__c + Sum + + + AggregateResultField__c + Total__c + + + CalculationMode__c + Realtime + + + CalculationSharingMode__c + System + + + ChildObject__c + QALookupChild__c + + + ConcatenateDelimiter__c + + + + Description__c + + + + FieldToAggregate__c + Amount__c + + + FieldToOrderBy__c + + + + ParentObject__c + QALookupParent__c + + + RelationshipCriteriaFields__c + + + + RelationshipCriteria__c + + + + RelationshipField__c + LookupParent__c + + + RowLimit__c + + + + TestCode2__c + + + + TestCodeParent__c + + + + TestCodeSeeAllData__c + false + + + TestCode__c + + + diff --git a/unpackaged/config/qa/layouts/Account-Account Layout.layout b/unpackaged/config/qa/layouts/Account-Account Layout.layout new file mode 100644 index 00000000..58c42b36 --- /dev/null +++ b/unpackaged/config/qa/layouts/Account-Account Layout.layout @@ -0,0 +1,338 @@ + + + Submit + + true + true + true + + + + Edit + Self_Relationship_Number_Target__c + + + Edit + Opportunity_Sum__c + + + Edit + Opportunity_Max__c + + + Edit + Opportunity_Concatenate__c + + + Edit + Case_Min__c + + + Edit + Case_Count__c + + + Edit + Case_Concatenate__c + + + Edit + Contact_Count__c + + + Edit + Contact_Min__c + + + Edit + Contact_Concatenate__c + + + + + Edit + Account_Sum__c + + + Edit + Account_Min__c + + + Edit + Account_Concatenate__c + + + Edit + QA_Lookup_Parent_Sum__c + + + Edit + QA_Lookup_Parent_Min__c + + + Edit + QA_Lookup_Parent_Concatenate__c + + + + + + false + true + true + + + + Edit + OwnerId + + + Required + Name + + + Edit + ParentId + + + Edit + AccountNumber + + + Edit + Site + + + Edit + Type + + + Edit + Industry + + + Edit + AnnualRevenue + + + + + Edit + Rating + + + Edit + Phone + + + Edit + Fax + + + Edit + Website + + + Edit + TickerSymbol + + + Edit + Ownership + + + Edit + NumberOfEmployees + + + Edit + Sic + + + + + + false + false + true + + + + Edit + BillingAddress + + + + + Edit + ShippingAddress + + + + + + false + false + true + + + + + + + false + false + true + + + + Readonly + CreatedById + + + + + Readonly + LastModifiedById + + + + + + false + false + true + + + + Edit + Description + + + + + + true + false + false + + + + + + + + + FeedItem.TextPost + + + FeedItem.ContentPost + + + NewTask + + + NewContact + + + NewCase + + + LogACall + + + NewNote + + + NewOpportunity + + + NewEvent + + + FeedItem.RypplePost + + + FeedItem.LinkPost + + + FeedItem.PollPost + + + FeedItem.QuestionPost + + + SendEmail + + + + FULL_NAME + CONTACT.TITLE + CONTACT.EMAIL + CONTACT.PHONE1 + RelatedContactList + + + OPPORTUNITY.NAME + OPPORTUNITY.STAGE_NAME + OPPORTUNITY.AMOUNT + OPPORTUNITY.CLOSE_DATE + RelatedOpportunityList + + + CASES.CASE_NUMBER + NAME + CASES.SUBJECT + CASES.PRIORITY + CASES.CREATED_DATE_DATE_ONLY + CASES.STATUS + OWNER_NAME + RelatedCaseList + + + TASK.SUBJECT + TASK.WHO_NAME + TASK.WHAT_NAME + ACTIVITY.TASK + TASK.DUE_DATE + TASK.STATUS + TASK.PRIORITY + CORE.USERS.FULL_NAME + RelatedActivityList + + + TASK.SUBJECT + TASK.WHO_NAME + TASK.WHAT_NAME + ACTIVITY.TASK + TASK.DUE_DATE + CORE.USERS.FULL_NAME + TASK.LAST_UPDATE + RelatedHistoryList + + + RelatedNoteList + + + ACCOUNT.NAME + OPPORTUNITY.NAME + PARTNER.ROLE + RelatedPartnerList + + + NAME + QALookupParent__c.Account__c + + ParentId + false + false + false + false + false + + 00h7i000007iBWD + 4 + 0 + Default + + diff --git a/unpackaged/config/qa/objects/Account/Account.object-meta.xml b/unpackaged/config/qa/objects/Account/Account.object-meta.xml new file mode 100644 index 00000000..f183f60e --- /dev/null +++ b/unpackaged/config/qa/objects/Account/Account.object-meta.xml @@ -0,0 +1,250 @@ + + + + CallHighlightAction + Default + + + CallHighlightAction + Large + Default + + + CallHighlightAction + Small + Default + + + CancelEdit + Default + + + CancelEdit + Large + Default + + + CancelEdit + Small + Default + + + Delete + Default + + + Delete + Large + Default + + + Delete + Small + Default + + + Edit + Default + + + Edit + Large + Default + + + Edit + Small + Default + + + EmailHighlightAction + Default + + + EmailHighlightAction + Large + Default + + + EmailHighlightAction + Small + Default + + + EnableCustomerPortalUser + Default + + + EnableCustomerPortalUser + Large + Default + + + EnableCustomerPortalUser + Small + Default + + + List + Default + + + List + Large + Default + + + List + Small + Default + + + ListClean + Default + + + ListClean + Large + Default + + + ListClean + Small + Default + + + New + Default + + + New + Large + Default + + + New + Small + Default + + + RequestUpdate + Default + + + RequestUpdate + Large + Default + + + RequestUpdate + Small + Default + + + SaveEdit + Default + + + SaveEdit + Large + Default + + + SaveEdit + Small + Default + + + SmsHighlightAction + Default + + + SmsHighlightAction + Large + Default + + + SmsHighlightAction + Small + Default + + + Tab + Default + + + Tab + Large + Default + + + Tab + Small + Default + + + View + Default + + + View + Large + Default + + + View + Small + Default + + + ViewCustomerPortalUser + Default + + + ViewCustomerPortalUser + Large + Default + + + ViewCustomerPortalUser + Small + Default + + + WebsiteHighlightAction + Default + + + WebsiteHighlightAction + Large + Default + + + WebsiteHighlightAction + Small + Default + + SYSTEM + true + false + Private + + ACCOUNT.NAME + ACCOUNT.ADDRESS1_CITY + ACCOUNT.PHONE1 + ACCOUNT.NAME + ACCOUNT.SITE + CORE.USERS.ALIAS + ACCOUNT.TYPE + ACCOUNT.NAME + ACCOUNT.SITE + CORE.USERS.ALIAS + ACCOUNT.TYPE + ACCOUNT.PHONE1 + ACCOUNT.NAME + ACCOUNT.SITE + ACCOUNT.PHONE1 + CORE.USERS.ALIAS + + ReadWrite + diff --git a/unpackaged/config/qa/objects/Account/fields/Account_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Account_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..f2b456c1 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Account_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Account_Concatenate__c + Populated via Account_Account_Concatenate Rollup + false + Populated via Account_Account_Concatenate Rollup + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Account_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Account_Min__c.field-meta.xml new file mode 100644 index 00000000..95d89925 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Account_Min__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Account_Min__c + Populated via Account_Account_Min Rollup + false + Populated via Account_Account_Min Rollup + + 18 + false + 2 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Account_Sum__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Account_Sum__c.field-meta.xml new file mode 100644 index 00000000..93bfe6fe --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Account_Sum__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Account_Sum__c + Populated via Account_Account_Sum Rollup + false + Populated via Account_Account_Sum Rollup + + 18 + false + 2 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Case_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Case_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..beab70cc --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Case_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Case_Concatenate__c + Populated via Account_Case_Concatenate DLRS + false + Populated via Account_Case_Concatenate DLRS + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Case_Count__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Case_Count__c.field-meta.xml new file mode 100644 index 00000000..67573c87 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Case_Count__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Case_Count__c + Populated via Account_Case_Count DLRS + false + Populated via Account_Case_Count DLRS + + 18 + false + 0 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Case_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Case_Min__c.field-meta.xml new file mode 100644 index 00000000..27556cf1 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Case_Min__c.field-meta.xml @@ -0,0 +1,10 @@ + + + Case_Min__c + Populated via Account_Case_Min DLRS + Populated via Account_Case_Min DLRS + + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/Account/fields/Contact_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Contact_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..7c39a85f --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Contact_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Contact_Concatenate__c + Populated via Account_Contact_Concatenate DLRS + false + Populated via Account_Contact_Concatenate DLRS + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Contact_Count__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Contact_Count__c.field-meta.xml new file mode 100644 index 00000000..88e03e70 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Contact_Count__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Contact_Count__c + Populated via Account_Contact_Count DLRS + false + Populated via Account_Contact_Count DLRS + + 8 + false + 0 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Contact_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Contact_Min__c.field-meta.xml new file mode 100644 index 00000000..5717a685 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Contact_Min__c.field-meta.xml @@ -0,0 +1,10 @@ + + + Contact_Min__c + Populated via Account_Contact_Min DLRS + Populated via Account_Contact_Min DLRS + + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/Account/fields/Opportunity_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Opportunity_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..4fbd9b0d --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Opportunity_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Opportunity_Concatenate__c + Populated via Account_Opportunity_Concatenate DLRS + false + Populated via Account_Opportunity_Concatenate DLRS + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Account/fields/Opportunity_Max__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Opportunity_Max__c.field-meta.xml new file mode 100644 index 00000000..9a8cbc96 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Opportunity_Max__c.field-meta.xml @@ -0,0 +1,12 @@ + + + Opportunity_Max__c + Populated via Account_Opportunity_Max DLRS + Populated via Account_Opportunity_Max DLRS + + 18 + false + 2 + false + Currency + diff --git a/unpackaged/config/qa/objects/Account/fields/Opportunity_Sum__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/Opportunity_Sum__c.field-meta.xml new file mode 100644 index 00000000..f3bdebbf --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/Opportunity_Sum__c.field-meta.xml @@ -0,0 +1,12 @@ + + + Opportunity_Sum__c + Populated via Account_Opportunity_Sum DLRS + Populated via Account_Opportunity_Sum DLRS + + 18 + false + 2 + false + Currency + diff --git a/unpackaged/config/qa/objects/Account/fields/NumberOfLocations__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/OpportuntiyContactRole_Sum__c.field-meta.xml similarity index 64% rename from unpackaged/config/qa/objects/Account/fields/NumberOfLocations__c.field-meta.xml rename to unpackaged/config/qa/objects/Account/fields/OpportuntiyContactRole_Sum__c.field-meta.xml index 8688efa6..4d3fb18c 100644 --- a/unpackaged/config/qa/objects/Account/fields/NumberOfLocations__c.field-meta.xml +++ b/unpackaged/config/qa/objects/Account/fields/OpportuntiyContactRole_Sum__c.field-meta.xml @@ -1,11 +1,12 @@ - NumberOfLocations__c + OpportuntiyContactRole_Sum__c + for DLRS testing false - + 18 false - 2 + 0 false Number false diff --git a/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..cfaaa4bc --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Concatenate__c.field-meta.xml @@ -0,0 +1,14 @@ + + + QA_Lookup_Parent_Concatenate__c + Populated via Account_QALookupParent_Concatenate Rollup + false + Populated via Account_QALookupParent_Concatenate Rollup +Shows Distinct Values + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Min__c.field-meta.xml new file mode 100644 index 00000000..8c3ed2ed --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Min__c.field-meta.xml @@ -0,0 +1,14 @@ + + + QA_Lookup_Parent_Min__c + Populated via Account_QALookupParent_Min Rollup + false + Populated via Account_QALookupParent_Min Rollup + + 18 + false + 2 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Sum__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Sum__c.field-meta.xml new file mode 100644 index 00000000..80726755 --- /dev/null +++ b/unpackaged/config/qa/objects/Account/fields/QA_Lookup_Parent_Sum__c.field-meta.xml @@ -0,0 +1,14 @@ + + + QA_Lookup_Parent_Sum__c + Populated via Account_QALookupParent_Sum Rollup + false + Populated via Account_QALookupParent_Sum Rollup + + 18 + false + 2 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Account/fields/SLAExpirationDate__c.field-meta.xml b/unpackaged/config/qa/objects/Account/fields/SLAExpirationDate__c.field-meta.xml deleted file mode 100644 index bbf391be..00000000 --- a/unpackaged/config/qa/objects/Account/fields/SLAExpirationDate__c.field-meta.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - SLAExpirationDate__c - false - - false - false - Date - diff --git a/unpackaged/config/qa/objects/Campaign/Campaign.object-meta.xml b/unpackaged/config/qa/objects/Campaign/Campaign.object-meta.xml new file mode 100644 index 00000000..ff69a26f --- /dev/null +++ b/unpackaged/config/qa/objects/Campaign/Campaign.object-meta.xml @@ -0,0 +1,177 @@ + + + + AddCampaign + Default + + + AddCampaign + Large + Default + + + AddCampaign + Small + Default + + + AdvancedSetup + Default + + + AdvancedSetup + Large + Default + + + AdvancedSetup + Small + Default + + + CancelEdit + Default + + + CancelEdit + Large + Default + + + CancelEdit + Small + Default + + + Clone + Default + + + Clone + Large + Default + + + Clone + Small + Default + + + Delete + Default + + + Delete + Large + Default + + + Delete + Small + Default + + + Edit + Default + + + Edit + Large + Default + + + Edit + Small + Default + + + List + Default + + + List + Large + Default + + + List + Small + Default + + + New + Default + + + New + Large + Default + + + New + Small + Default + + + SaveEdit + Default + + + SaveEdit + Large + Default + + + SaveEdit + Small + Default + + + Tab + Default + + + Tab + Large + Default + + + Tab + Small + Default + + + View + Default + + + View + Large + Default + + + View + Small + Default + + SYSTEM + false + false + Private + + CAMPAIGN.NAME + CAMPAIGN.STATUS + CAMPAIGN.START_DATE + CAMPAIGN.NAME + CAMPAIGN.NAME + CAMPAIGN.NAME + PARENT_NAME + CAMPAIGN.CAMPAIGN_TYPE + CAMPAIGN.STATUS + CAMPAIGN.START_DATE + CAMPAIGN.END_DATE + CAMPAIGN.NUM_RESPONSES + CORE.USERS.ALIAS + + FullAccess + diff --git a/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..a6900b75 --- /dev/null +++ b/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Concatenate__c.field-meta.xml @@ -0,0 +1,12 @@ + + + CampaignMember_Concatenate__c + Populated via Campaign_CampaignMember_Concatenate DLRS + false + Populated via Campaign_CampaignMember_Concatenate DLRS + + 255 + false + Text + false + diff --git a/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Count__c.field-meta.xml b/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Count__c.field-meta.xml new file mode 100644 index 00000000..64349f10 --- /dev/null +++ b/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Count__c.field-meta.xml @@ -0,0 +1,13 @@ + + + CampaignMember_Count__c + Populated via Campaign_CampaignMember_Count DLRS + false + Populated via Campaign_CampaignMember_Count DLRS + + 18 + false + 0 + Number + false + diff --git a/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Min__c.field-meta.xml new file mode 100644 index 00000000..ab258bec --- /dev/null +++ b/unpackaged/config/qa/objects/Campaign/fields/CampaignMember_Min__c.field-meta.xml @@ -0,0 +1,9 @@ + + + CampaignMember_Min__c + Populated via Campaign_CampaignMember_Min DLRS + Populated via Campaign_CampaignMember_Min DLRS + + false + DateTime + diff --git a/unpackaged/config/qa/objects/Case/Case.object-meta.xml b/unpackaged/config/qa/objects/Case/Case.object-meta.xml new file mode 100644 index 00000000..a53f2699 --- /dev/null +++ b/unpackaged/config/qa/objects/Case/Case.object-meta.xml @@ -0,0 +1,224 @@ + + + + Accept + Default + + + Accept + Large + Default + + + Accept + Small + Default + + + CancelEdit + Default + + + CancelEdit + Large + Default + + + CancelEdit + Small + Default + + + ChangeStatus + Default + + + ChangeStatus + Large + Default + + + ChangeStatus + Small + Default + + + Clone + Default + + + Clone + Large + Default + + + Clone + Small + Default + + + CloneAsChild + Default + + + CloneAsChild + Large + Default + + + CloneAsChild + Small + Default + + + CloseCase + Default + + + CloseCase + Large + Default + + + CloseCase + Small + Default + + + Delete + Default + + + Delete + Large + Default + + + Delete + Small + Default + + + Edit + Default + + + Edit + Large + Default + + + Edit + Small + Default + + + List + Default + + + List + Large + Default + + + List + Small + Default + + + MassClose + Default + + + MassClose + Large + Default + + + MassClose + Small + Default + + + NewCase + Default + + + NewCase + Large + Default + + + NewCase + Small + Default + + + SaveEdit + Default + + + SaveEdit + Large + Default + + + SaveEdit + Small + Default + + + Tab + Default + + + Tab + Large + Default + + + Tab + Small + Default + + + View + Default + + + View + Large + Default + + + View + Small + Default + + SYSTEM + true + Private + + CASES.CASE_NUMBER + CASES.SUBJECT + CASES.CREATED_DATE + CASES.PRIORITY + CASES.CASE_NUMBER + CASES.SUBJECT + NAME + ACCOUNT.NAME + CASES.STATUS + CASES.CASE_NUMBER + CASES.SUBJECT + NAME + ACCOUNT.NAME + CASES.STATUS + CASES.CASE_NUMBER + CASES.SUBJECT + CASES.STATUS + CASES.CREATED_DATE + CORE.USERS.ALIAS + + ReadWriteTransfer + diff --git a/unpackaged/config/qa/objects/Case/fields/Case_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/Case_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..6db7a49f --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/Case_Concatenate__c.field-meta.xml @@ -0,0 +1,15 @@ + + + Case_Concatenate__c + Populated via Case_Case_Concatenate DLRS + false + Populated via Case_Case_Concatenate DLRS + + 255 + false + false + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Case/fields/Case_Count__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/Case_Count__c.field-meta.xml new file mode 100644 index 00000000..5bfb8fe8 --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/Case_Count__c.field-meta.xml @@ -0,0 +1,16 @@ + + + Case_Count__c + Populated via Case_Case_Count DLRS + false + Populated via Case_Case_Count DLRS + + 18 + false + 0 + false + false + false + Number + false + diff --git a/unpackaged/config/qa/objects/Case/fields/Case_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/Case_Min__c.field-meta.xml new file mode 100644 index 00000000..7b338840 --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/Case_Min__c.field-meta.xml @@ -0,0 +1,12 @@ + + + Case_Min__c + Populated via Case_Case_Min DLRS + Populated via Case_Case_Min DLRS + + false + false + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..79f17812 --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Concatenate__c.field-meta.xml @@ -0,0 +1,15 @@ + + + QA_Lookup_Parent_Concatenate__c + Populated via Case_QALookupParent_Concatenate DLRS + false + Populated via Case_QALookupParent_Concatenate DLRS + + 255 + false + false + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Min__c.field-meta.xml new file mode 100644 index 00000000..62bf4010 --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Min__c.field-meta.xml @@ -0,0 +1,16 @@ + + + QA_Lookup_Parent_Min__c + Populated via Case_QALookupParent_Min DLRS + false + Populated via Case_QALookupParent_Min DLRS + + 18 + false + 2 + false + false + false + Number + false + diff --git a/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Sum__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Sum__c.field-meta.xml new file mode 100644 index 00000000..f112347c --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent_Sum__c.field-meta.xml @@ -0,0 +1,16 @@ + + + QA_Lookup_Parent_Sum__c + Populated via Case_QALookupParent_Sum DLRS + false + Populated via Case_QALookupParent_Sum DLRS + + 18 + false + 2 + false + false + false + Number + false + diff --git a/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent__c.field-meta.xml b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent__c.field-meta.xml new file mode 100644 index 00000000..a85510ce --- /dev/null +++ b/unpackaged/config/qa/objects/Case/fields/QA_Lookup_Parent__c.field-meta.xml @@ -0,0 +1,16 @@ + + + QA_Lookup_Parent__c + SetNull + Lookup to create Standard Object Child to Custom Object Parent relationship test + Lookup to create Standard Object Child to Custom Object Parent relationship test + + QALookupParent__c + Cases + Cases_QA_Lookup_Parent + false + false + false + false + Lookup + diff --git a/unpackaged/config/qa/objects/Contact/Contact.object-meta.xml b/unpackaged/config/qa/objects/Contact/Contact.object-meta.xml new file mode 100644 index 00000000..55159300 --- /dev/null +++ b/unpackaged/config/qa/objects/Contact/Contact.object-meta.xml @@ -0,0 +1,353 @@ + + + + AddCampaign + Default + + + AddCampaign + Large + Default + + + AddCampaign + Small + Default + + + AddToCampaign + Default + + + AddToCampaign + Large + Default + + + AddToCampaign + Small + Default + + + CallHighlightAction + Default + + + CallHighlightAction + Large + Default + + + CallHighlightAction + Small + Default + + + CancelEdit + Default + + + CancelEdit + Large + Default + + + CancelEdit + Small + Default + + + Clone + Default + + + Clone + Large + Default + + + Clone + Small + Default + + + Delete + Default + + + Delete + Large + Default + + + Delete + Small + Default + + + Edit + Default + + + Edit + Large + Default + + + Edit + Small + Default + + + EmailHighlightAction + Default + + + EmailHighlightAction + Large + Default + + + EmailHighlightAction + Small + Default + + + EnableCustomerPortal + Default + + + EnableCustomerPortal + Large + Default + + + EnableCustomerPortal + Small + Default + + + EnablePartnerPortalUser + Default + + + EnablePartnerPortalUser + Large + Default + + + EnablePartnerPortalUser + Small + Default + + + EnableSelfService + Default + + + EnableSelfService + Large + Default + + + EnableSelfService + Small + Default + + + List + Default + + + List + Large + Default + + + List + Small + Default + + + ListClean + Default + + + ListClean + Large + Default + + + ListClean + Small + Default + + + Merge + Default + + + Merge + Large + Default + + + Merge + Small + Default + + + NewContact + Default + + + NewContact + Large + Default + + + NewContact + Small + Default + + + RequestUpdate + Default + + + RequestUpdate + Large + Default + + + RequestUpdate + Small + Default + + + SaveEdit + Default + + + SaveEdit + Large + Default + + + SaveEdit + Small + Default + + + SmsHighlightAction + Default + + + SmsHighlightAction + Large + Default + + + SmsHighlightAction + Small + Default + + + Tab + Default + + + Tab + Large + Default + + + Tab + Small + Default + + + View + Default + + + View + Large + Default + + + View + Small + Default + + + ViewCustomerPortal + Default + + + ViewCustomerPortal + Large + Default + + + ViewCustomerPortal + Small + Default + + + ViewPartnerPortalUser + Default + + + ViewPartnerPortalUser + Large + Default + + + ViewPartnerPortalUser + Small + Default + + + ViewSelfService + Default + + + ViewSelfService + Large + Default + + + ViewSelfService + Small + Default + + SYSTEM + true + false + ControlledByParent + + FULL_NAME + ACCOUNT.NAME + CONTACT.PHONE1 + FULL_NAME + ACCOUNT.NAME + ACCOUNT.SITE + FULL_NAME + ACCOUNT.NAME + ACCOUNT.SITE + CONTACT.PHONE1 + CONTACT.PHONE3 + CONTACT.PHONE4 + CONTACT.PHONE5 + CONTACT.PHONE6 + ACCOUNT.PHONE1 + FULL_NAME + ACCOUNT.NAME + ACCOUNT.SITE + CONTACT.PHONE1 + CONTACT.EMAIL + CORE.USERS.ALIAS + + ControlledByParent + diff --git a/unpackaged/config/qa/objects/Contact/fields/OCR_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Contact/fields/OCR_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..d295099f --- /dev/null +++ b/unpackaged/config/qa/objects/Contact/fields/OCR_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + OCR_Concatenate__c + Populated via Contact_OCR_Concatenate DLRS + false + Populated via Contact_OCR_Concatenate DLRS + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Contact/fields/OCR_Count__c.field-meta.xml b/unpackaged/config/qa/objects/Contact/fields/OCR_Count__c.field-meta.xml new file mode 100644 index 00000000..4f369f63 --- /dev/null +++ b/unpackaged/config/qa/objects/Contact/fields/OCR_Count__c.field-meta.xml @@ -0,0 +1,14 @@ + + + OCR_Count__c + Populated via Contact_OCR_Count DLRS + false + Populated via Contact_OCR_Count DLRS + + 18 + false + 0 + false + Number + false + diff --git a/unpackaged/config/qa/objects/Contact/fields/OCR_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Contact/fields/OCR_Min__c.field-meta.xml new file mode 100644 index 00000000..1b2ee57a --- /dev/null +++ b/unpackaged/config/qa/objects/Contact/fields/OCR_Min__c.field-meta.xml @@ -0,0 +1,10 @@ + + + OCR_Min__c + Populated via Contact_OCR_Min DLRS + Populated via Contact_OCR_Min DLRS + + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/Opportunity/Opportunity.object-meta.xml b/unpackaged/config/qa/objects/Opportunity/Opportunity.object-meta.xml new file mode 100644 index 00000000..c5e1e83d --- /dev/null +++ b/unpackaged/config/qa/objects/Opportunity/Opportunity.object-meta.xml @@ -0,0 +1,165 @@ + + + + AddInfluence + Default + + + AddInfluence + Large + Default + + + AddInfluence + Small + Default + + + CancelEdit + Default + + + CancelEdit + Large + Default + + + CancelEdit + Small + Default + + + Clone + Default + + + Clone + Large + Default + + + Clone + Small + Default + + + Delete + Default + + + Delete + Large + Default + + + Delete + Small + Default + + + Edit + Default + + + Edit + Large + Default + + + Edit + Small + Default + + + List + Default + + + List + Large + Default + + + List + Small + Default + + + New + Default + + + New + Large + Default + + + New + Small + Default + + + SaveEdit + Default + + + SaveEdit + Large + Default + + + SaveEdit + Small + Default + + + Tab + Default + + + Tab + Large + Default + + + Tab + Small + Default + + + View + Default + + + View + Large + Default + + + View + Small + Default + + SYSTEM + true + false + Private + + OPPORTUNITY.NAME + ACCOUNT.NAME + OPPORTUNITY.CLOSE_DATE + OPPORTUNITY.NAME + ACCOUNT.NAME + ACCOUNT.SITE + OPPORTUNITY.NAME + ACCOUNT.NAME + ACCOUNT.SITE + OPPORTUNITY.NAME + ACCOUNT.NAME + ACCOUNT.SITE + OPPORTUNITY.STAGE_NAME + OPPORTUNITY.CLOSE_DATE + CORE.USERS.ALIAS + + ReadWrite + diff --git a/unpackaged/config/qa/objects/Opportunity/fields/OCR_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/Opportunity/fields/OCR_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..e3c8dd39 --- /dev/null +++ b/unpackaged/config/qa/objects/Opportunity/fields/OCR_Concatenate__c.field-meta.xml @@ -0,0 +1,14 @@ + + + OCR_Concatenate__c + Populated via Opportunity_OCR_Concatenate DLRS + false + Populated via Opportunity_OCR_Concatenate DLRS + + 255 + false + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/Opportunity/fields/OCR_Count__c.field-meta.xml b/unpackaged/config/qa/objects/Opportunity/fields/OCR_Count__c.field-meta.xml new file mode 100644 index 00000000..250d4ceb --- /dev/null +++ b/unpackaged/config/qa/objects/Opportunity/fields/OCR_Count__c.field-meta.xml @@ -0,0 +1,15 @@ + + + OCR_Count__c + Populated via Opportunity_OCR_Count DLRS + false + Populated via Opportunity_OCR_Count DLRS + + 18 + false + 0 + false + false + Number + false + diff --git a/unpackaged/config/qa/objects/Opportunity/fields/OCR_Min__c.field-meta.xml b/unpackaged/config/qa/objects/Opportunity/fields/OCR_Min__c.field-meta.xml new file mode 100644 index 00000000..01655b25 --- /dev/null +++ b/unpackaged/config/qa/objects/Opportunity/fields/OCR_Min__c.field-meta.xml @@ -0,0 +1,11 @@ + + + OCR_Min__c + Populated via Opportunity_OCR_Min DLRS + Populated via Opportunity_OCR_Min DLRS + + false + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/Opportunity/fields/QA_Lookup_Parent__c.field-meta.xml b/unpackaged/config/qa/objects/Opportunity/fields/QA_Lookup_Parent__c.field-meta.xml new file mode 100644 index 00000000..b5df48d6 --- /dev/null +++ b/unpackaged/config/qa/objects/Opportunity/fields/QA_Lookup_Parent__c.field-meta.xml @@ -0,0 +1,13 @@ + + + QA_Lookup_Parent__c + SetNull + + QALookupParent__c + Opportunities + Opportunities + false + false + false + Lookup + diff --git a/unpackaged/config/qa/objects/QALookupChild__c/QALookupChild__c.object-meta.xml b/unpackaged/config/qa/objects/QALookupChild__c/QALookupChild__c.object-meta.xml index a3d820b7..141c8666 100644 --- a/unpackaged/config/qa/objects/QALookupChild__c/QALookupChild__c.object-meta.xml +++ b/unpackaged/config/qa/objects/QALookupChild__c/QALookupChild__c.object-meta.xml @@ -130,6 +130,16 @@ View Default + + View + Large + Default + + + View + Small + Default + false SYSTEM Deployed @@ -154,4 +164,4 @@ Private Public - \ No newline at end of file + diff --git a/unpackaged/config/qa/objects/QALookupChild__c/fields/Color__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupChild__c/fields/Color__c.field-meta.xml index 67d211d2..0e54e048 100644 --- a/unpackaged/config/qa/objects/QALookupChild__c/fields/Color__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupChild__c/fields/Color__c.field-meta.xml @@ -1,7 +1,6 @@ Color__c - false false false diff --git a/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent2__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent2__c.field-meta.xml index a3e85655..2ddee8ba 100644 --- a/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent2__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent2__c.field-meta.xml @@ -2,7 +2,6 @@ LookupParent2__c SetNull - false QALookupParent__c QALookup Children (Lookup Parent 2) @@ -10,4 +9,4 @@ false false Lookup - \ No newline at end of file + diff --git a/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent__c.field-meta.xml index 790c63a6..3a35964f 100644 --- a/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupChild__c/fields/LookupParent__c.field-meta.xml @@ -2,7 +2,6 @@ LookupParent__c SetNull - false QALookupParent__c QALookup Children @@ -10,4 +9,4 @@ false false Lookup - \ No newline at end of file + diff --git a/unpackaged/config/qa/objects/QALookupChild__c/fields/Record_Notes__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupChild__c/fields/Record_Notes__c.field-meta.xml index 5beb7b00..85534234 100644 --- a/unpackaged/config/qa/objects/QALookupChild__c/fields/Record_Notes__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupChild__c/fields/Record_Notes__c.field-meta.xml @@ -1,7 +1,6 @@ Record_Notes__c - false Use this field to record any additional notes about how this record is going to be used in the test dataset. 32768 diff --git a/unpackaged/config/qa/objects/QALookupParent__c/QALookupParent__c.object-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/QALookupParent__c.object-meta.xml index fe433186..2cf0f793 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/QALookupParent__c.object-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/QALookupParent__c.object-meta.xml @@ -130,6 +130,16 @@ View Default + + View + Large + Default + + + View + Small + Default + false SYSTEM Deployed @@ -154,4 +164,4 @@ Read Public - \ No newline at end of file + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Account__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Account__c.field-meta.xml new file mode 100644 index 00000000..01eb09c9 --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Account__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Account__c + SetNull + Lookup relationship used to test Custom Object Child to Standard Object Parent scenario + Lookup relationship used to test Custom Object Child to Standard Object Parent scenario + + Account + QA Lookup Parents + QA_Lookup_Parents_Account + false + false + Lookup + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..19e91f15 --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Case_Concatenate__c + Populated via QALookupParent_Case_Concatenate Rollup + false + Populated via QALookupParent_Case_Concatenate Rollup + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Count__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Count__c.field-meta.xml new file mode 100644 index 00000000..849da57a --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Count__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Case_Count__c + Populated via QALookupParent_Case_Count Rollup + false + Populated via QALookupParent_Case_Count Rollup + + 18 + false + 0 + false + Number + false + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Min__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Min__c.field-meta.xml new file mode 100644 index 00000000..e137ba4e --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case_Min__c.field-meta.xml @@ -0,0 +1,10 @@ + + + Case_Min__c + Populated via QALookupParent_Case_Min Rollup + Populated via QALookupParent_Case_Min Rollup + + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Case__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case__c.field-meta.xml new file mode 100644 index 00000000..7d132dd7 --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Case__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Case__c + SetNull + Lookup relationship used to test Custom Object Child to Standard Object Parent scenario + Lookup relationship used to test Custom Object Child to Standard Object Parent scenario + + Case + QA Lookup Parents + QA_Lookup_Parents_Case + false + false + Lookup + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Colours__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Colours__c.field-meta.xml index 08cbefd5..860de1dc 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/fields/Colours__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Colours__c.field-meta.xml @@ -1,7 +1,9 @@ Colours__c - false + Populated via QALookupParent_QALookupChild_Concatenate Rollup + Populated via QALookupParent_QALookupChild_Concatenate Rollup +Show Distinct Values false false diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Concatenate__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Concatenate__c.field-meta.xml new file mode 100644 index 00000000..e352916f --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Concatenate__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Opportunity_Concatenate__c + Populated via QALookupParent_Opportunity_Concatenate Rollup + false + Populated via QALookupParent_Opportunity_Concatenate Rollup + + 255 + false + false + Text + false + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Count__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Count__c.field-meta.xml new file mode 100644 index 00000000..55131d5f --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Count__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Opportunity_Count__c + Populated via QALookupParent_Opportunity_Count Rollup + false + Populated via QALookupParent_Opportunity_Count Rollup + + 18 + false + 0 + false + Number + false + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Min__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Min__c.field-meta.xml new file mode 100644 index 00000000..6d5a91df --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Opportunity_Min__c.field-meta.xml @@ -0,0 +1,10 @@ + + + Opportunity_Min__c + Populated via QALookupParent_Opportunity_Min Rollup + Populated via QALookupParent_Opportunity_Min Rollup + + false + false + DateTime + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/QA_Lookup_Amount_Min__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/QA_Lookup_Amount_Min__c.field-meta.xml new file mode 100644 index 00000000..29a5d519 --- /dev/null +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/QA_Lookup_Amount_Min__c.field-meta.xml @@ -0,0 +1,14 @@ + + + QA_Lookup_Amount_Min__c + Populated via QALookupParent_QALookupChild_Min Rollup + false + Populated via QALookupParent_QALookupChild_Min Rollup + + 18 + false + 2 + false + Number + false + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Record_Notes__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Record_Notes__c.field-meta.xml index 5beb7b00..85534234 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/fields/Record_Notes__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Record_Notes__c.field-meta.xml @@ -1,7 +1,6 @@ Record_Notes__c - false Use this field to record any additional notes about how this record is going to be used in the test dataset. 32768 diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship_Number_Target__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship_Number_Target__c.field-meta.xml index f99f0415..e4986f00 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship_Number_Target__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship_Number_Target__c.field-meta.xml @@ -11,4 +11,4 @@ false Number false - \ No newline at end of file + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship__c.field-meta.xml index fa4faacb..0f1726fe 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Self_Relationship__c.field-meta.xml @@ -2,7 +2,6 @@ Self_Relationship__c SetNull - false Lookup to Lookup Parent. Used to test self-relationship rollups on a custom object. @@ -12,4 +11,4 @@ false false Lookup - \ No newline at end of file + diff --git a/unpackaged/config/qa/objects/QALookupParent__c/fields/Total__c.field-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/fields/Total__c.field-meta.xml index da0296a5..f8c48e33 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/fields/Total__c.field-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/fields/Total__c.field-meta.xml @@ -1,7 +1,9 @@ Total__c + Populated via QALookupParent_QALookupChild_Sum Rollup false + Populated via QALookupParent_QALookupChild_Sum Rollup 18 false diff --git a/unpackaged/config/qa/objects/QALookupParent__c/validationRules/Not_42.validationRule-meta.xml b/unpackaged/config/qa/objects/QALookupParent__c/validationRules/Not_42.validationRule-meta.xml index 9ffe589d..8351ca20 100644 --- a/unpackaged/config/qa/objects/QALookupParent__c/validationRules/Not_42.validationRule-meta.xml +++ b/unpackaged/config/qa/objects/QALookupParent__c/validationRules/Not_42.validationRule-meta.xml @@ -1,7 +1,7 @@ Not_42 - true + false Total__c !=42 Total__c The answer is not 42! diff --git a/unpackaged/config/qa/permissionsets/DLRSQAPermissions.permissionset-meta.xml b/unpackaged/config/qa/permissionsets/DLRSQAPermissions.permissionset-meta.xml index ec3d0d84..fd707c17 100644 --- a/unpackaged/config/qa/permissionsets/DLRSQAPermissions.permissionset-meta.xml +++ b/unpackaged/config/qa/permissionsets/DLRSQAPermissions.permissionset-meta.xml @@ -5,6 +5,151 @@ true Apps, Objects and other pemissions for DLRS QA Engineer + + true + Account.Account_Concatenate__c + true + + + true + Account.Account_Min__c + true + + + true + Account.Account_Sum__c + true + + + true + Account.Case_Concatenate__c + true + + + true + Account.Case_Count__c + true + + + true + Account.Case_Min__c + true + + + true + Account.Contact_Count__c + true + + + true + Account.Contact_Min__c + true + + + true + Account.NumberOfLocations__c + true + + + true + Account.Opportunity_Concatenate__c + true + + + true + Account.Opportunity_Max__c + true + + + true + Account.Opportunity_Sum__c + true + + + true + Account.OpportuntiyContactRole_Sum__c + true + + + true + Account.QA_Lookup_Parent_Concatenate__c + true + + + true + Account.QA_Lookup_Parent_Min__c + true + + + true + Account.QA_Lookup_Parent_Sum__c + true + + + true + Account.SLAExpirationDate__c + true + + + true + Account.Self_Relationship_Number_Target__c + true + + + true + Case.Case_Concatenate__c + true + + + true + Case.Case_Count__c + true + + + true + Case.Case_Min__c + true + + + true + Case.QA_Lookup_Parent_Concatenate__c + true + + + true + Case.QA_Lookup_Parent_Min__c + true + + + true + Case.QA_Lookup_Parent_Sum__c + true + + + true + Case.QA_Lookup_Parent__c + true + + + true + Opportunity.OCR_Concatenate__c + true + + + true + Opportunity.OCR_Count__c + true + + + true + Opportunity.OCR_Min__c + true + + + true + Opportunity.QA_Lookup_Parent__c + true + true QALookupChild__c.Amount__c @@ -45,6 +190,31 @@ QALookupChild__c.Record_Notes__c true + + true + QALookupParent__c.Account__c + true + + + true + QALookupParent__c.Case_Concatenate__c + true + + + true + QALookupParent__c.Case_Count__c + true + + + true + QALookupParent__c.Case_Min__c + true + + + true + QALookupParent__c.Case__c + true + true QALookupParent__c.Colours__c @@ -65,6 +235,26 @@ QALookupParent__c.Descriptions__c true + + true + QALookupParent__c.Opportunity_Concatenate__c + true + + + true + QALookupParent__c.Opportunity_Count__c + true + + + true + QALookupParent__c.Opportunity_Min__c + true + + + true + QALookupParent__c.QA_Lookup_Amount_Min__c + true + true QALookupParent__c.Record_Notes__c @@ -92,6 +282,15 @@ false + + true + true + true + true + true + Case + true + true true diff --git a/unpackaged/config/qa/profiles/Admin.profile b/unpackaged/config/qa/profiles/Admin.profile new file mode 100644 index 00000000..9718e25b --- /dev/null +++ b/unpackaged/config/qa/profiles/Admin.profile @@ -0,0 +1,2218 @@ + + + + DLRS_QA_App + false + false + + + DeclarativeLookupRollupSummaries + false + true + + + DeclarativeLookupRollupSummaries2 + false + true + + + AccountTest + true + + + ApexClassesSelector + true + + + ApexTriggersSelector + true + + + AsyncApexJobsSelector + true + + + BypassHandler + true + + + BypassHandlerTest + true + + + CampaignMemberTest + true + + + CaseTest + true + + + ContactTest + true + + + CronJobDetailsSelector + true + + + CronTriggersSelector + true + + + CustomMetadataService + true + + + CustomMetadataServiceTest + true + + + LREngine + true + + + LookupRollupStatusCheckController + true + + + MLRSControllerTest + true + + + ManageLookupRollupSummariesController + true + + + ManageLookupRollupSummariesNewController + true + + + ManageLookupRollupSummariesNewTest + true + + + MetadataService + true + + + MetadataServiceCalloutMock + true + + + MetadataServiceTest + true + + + ObjectSelectorController + true + + + OpportunityContactRoleTest + true + + + OpportunityTest + true + + + OptimizerComponentController + true + + + OptimizerService + true + + + OptimizerServiceTest + true + + + QALookupChildTest + true + + + QALookupParentTest + true + + + RollupActionCalculate + true + + + RollupActionCalculateTest + true + + + RollupCalculateController + true + + + RollupCalculateControllerTest + true + + + RollupCalculateJob + true + + + RollupCalculateJobSchedulable + true + + + RollupController + true + + + RollupControllerTest + true + + + RollupDmlGuard + true + + + RollupDmlGuardTest + true + + + RollupEditorController + true + + + RollupJob + true + + + RollupJobTest + true + + + RollupScheduledCalculateController + true + + + RollupScheduledCalculateControllerTest + true + + + RollupService + true + + + RollupServiceException + true + + + RollupServiceTest + true + + + RollupServiceTest2 + true + + + RollupServiceTest3 + true + + + RollupServiceTest4 + true + + + RollupServiceTest5 + true + + + RollupServiceTest6 + true + + + RollupSummaries + true + + + RollupSummariesSelector + true + + + RollupSummariesSelectorTest + true + + + RollupSummariesTest + true + + + RollupSummariesTriggerTest + true + + + RollupSummary + true + + + RollupSummaryEnhancedController + true + + + RollupSummaryEnhancedControllerTest + true + + + RollupSummaryLogDeleteController + true + + + RollupSummaryLogDeleteControllerTest + true + + + RollupSummaryScheduleItemsSelector + true + + + RollupSummaryViewController + true + + + RollupSummaryViewControllerTest + true + + + TestContext + true + + + TestLREngine + true + + + Utilities + true + + + WelcomeController + true + + + WelcomeControllerTest + true + + + fflib_Answer + true + + + fflib_AnswerTest + true + + + fflib_AnyOrder + true + + + fflib_AnyOrderTest + true + + + fflib_ApexMocks + true + + + fflib_ApexMocksConfig + true + + + fflib_ApexMocksTest + true + + + fflib_ApexMocksUtils + true + + + fflib_ApexMocksUtilsTest + true + + + fflib_Application + true + + + fflib_ApplicationTest + true + + + fflib_ArgumentCaptor + true + + + fflib_ArgumentCaptorTest + true + + + fflib_IDGenerator + true + + + fflib_IDGeneratorTest + true + + + fflib_IMatcher + true + + + fflib_ISObjectDomain + true + + + fflib_ISObjectSelector + true + + + fflib_ISObjectUnitOfWork + true + + + fflib_InOrder + true + + + fflib_InOrderTest + true + + + fflib_Inheritor + true + + + fflib_InheritorTest + true + + + fflib_InvocationOnMock + true + + + fflib_Match + true + + + fflib_MatchTest + true + + + fflib_MatcherDefinitions + true + + + fflib_MatcherDefinitionsTest + true + + + fflib_MatchersReturnValue + true + + + fflib_MethodArgValues + true + + + fflib_MethodArgValuesTest + true + + + fflib_MethodCountRecorder + true + + + fflib_MethodReturnValue + true + + + fflib_MethodReturnValueRecorder + true + + + fflib_MethodVerifier + true + + + fflib_Mocks + true + + + fflib_MyList + true + + + fflib_QualifiedMethod + true + + + fflib_QualifiedMethodAndArgValues + true + + + fflib_QualifiedMethodTest + true + + + fflib_QueryFactory + true + + + fflib_QueryFactoryTest + true + + + fflib_SObjectDescribe + true + + + fflib_SObjectDescribeTest + true + + + fflib_SObjectDomain + true + + + fflib_SObjectDomainTest + true + + + fflib_SObjectMocks + true + + + fflib_SObjectSelector + true + + + fflib_SObjectSelectorTest + true + + + fflib_SObjectUnitOfWork + true + + + fflib_SObjectUnitOfWorkTest + true + + + fflib_SecurityUtils + true + + + fflib_SecurityUtilsTest + true + + + fflib_StringBuilder + true + + + fflib_StringBuilderTest + true + + + fflib_System + true + + + fflib_SystemTest + true + + + fflib_VerificationMode + true + + false + + true + Account.Account_Concatenate__c + true + + + true + Account.Account_Min__c + true + + + true + Account.Account_Sum__c + true + + + true + Account.Case_Concatenate__c + true + + + true + Account.Case_Count__c + true + + + true + Account.Case_Min__c + true + + + true + Account.Contact_Concatenate__c + true + + + true + Account.Contact_Count__c + true + + + true + Account.Contact_Min__c + true + + + true + Account.NumberOfLocations__c + true + + + true + Account.Opportunity_Concatenate__c + true + + + true + Account.Opportunity_Max__c + true + + + true + Account.Opportunity_Sum__c + true + + + true + Account.QA_Lookup_Parent_Concatenate__c + true + + + true + Account.QA_Lookup_Parent_Min__c + true + + + true + Account.QA_Lookup_Parent_Sum__c + true + + + true + Account.SLAExpirationDate__c + true + + + true + Campaign.CampaignMember_Concatenate__c + true + + + true + Campaign.CampaignMember_Count__c + true + + + true + Campaign.CampaignMember_Min__c + true + + + false + Case.AccountId + true + + + true + Case.AssetId + true + + + false + Case.AssetWarrantyId + false + + + false + Case.BusinessHoursId + false + + + true + Case.Case_Concatenate__c + true + + + true + Case.Case_Count__c + true + + + true + Case.Case_Min__c + true + + + false + Case.ClosedDate + true + + + false + Case.ClosedOnCreate + false + + + true + Case.ContactId + true + + + true + Case.Description + true + + + false + Case.EntitlementId + false + + + false + Case.IsClosedOnCreate + false + + + false + Case.IsEscalated + true + + + false + Case.IsStopped + false + + + false + Case.MilestoneStatus + false + + + false + Case.MilestoneStatusIcon + false + + + true + Case.Origin + true + + + true + Case.ParentId + true + + + true + Case.Priority + true + + + false + Case.ProductId + false + + + true + Case.QA_Lookup_Parent_Concatenate__c + true + + + true + Case.QA_Lookup_Parent_Min__c + true + + + true + Case.QA_Lookup_Parent_Sum__c + true + + + true + Case.QA_Lookup_Parent__c + true + + + true + Case.Reason + true + + + false + Case.ServiceContractId + false + + + false + Case.SlaExitDate + false + + + false + Case.SlaStartDate + false + + + false + Case.StopStartDate + false + + + true + Case.Subject + true + + + false + Case.SuppliedCompany + true + + + false + Case.SuppliedEmail + true + + + false + Case.SuppliedName + true + + + false + Case.SuppliedPhone + true + + + true + Case.Type + true + + + true + Contact.OCR_Concatenate__c + true + + + true + Contact.OCR_Count__c + true + + + true + Contact.OCR_Min__c + true + + + true + LookupChild__c.Amount__c + true + + + true + LookupChild__c.Color__c + true + + + true + LookupChild__c.Description2__c + true + + + true + LookupChild__c.Description__c + true + + + true + LookupChild__c.LookupParent2__c + true + + + true + LookupChild__c.LookupParent__c + true + + + true + LookupParent__c.Colours__c + true + + + true + LookupParent__c.Descriptions2__c + true + + + true + LookupParent__c.Descriptions__c + true + + + true + LookupParent__c.Total2__c + true + + + true + LookupParent__c.Total__c + true + + + true + LookupRollupSummary2__mdt.Active__c + true + + + true + LookupRollupSummary2__mdt.AggregateAllRows__c + true + + + true + LookupRollupSummary2__mdt.AggregateOperation__c + true + + + true + LookupRollupSummary2__mdt.CalculationMode__c + true + + + true + LookupRollupSummary2__mdt.CalculationSharingMode__c + true + + + true + LookupRollupSummary2__mdt.ConcatenateDelimiter__c + true + + + true + LookupRollupSummary2__mdt.Description__c + true + + + true + LookupRollupSummary2__mdt.FieldToOrderBy__c + true + + + true + LookupRollupSummary2__mdt.RelationshipCriteriaFields__c + true + + + true + LookupRollupSummary2__mdt.RelationshipCriteria__c + true + + + true + LookupRollupSummary2__mdt.RowLimit__c + true + + + true + LookupRollupSummary2__mdt.TestCode2__c + true + + + true + LookupRollupSummary2__mdt.TestCodeParent__c + true + + + true + LookupRollupSummary2__mdt.TestCodeSeeAllData__c + true + + + true + LookupRollupSummary2__mdt.TestCode__c + true + + + true + LookupRollupSummaryLog__c.ErrorMessage__c + true + + + true + LookupRollupSummaryLog__c.ParentObject__c + true + + + true + LookupRollupSummaryLog__c.ParentRecord__c + true + + + true + LookupRollupSummaryScheduleItems__c.LookupRollupSummary2__c + true + + + true + LookupRollupSummaryScheduleItems__c.ParentId__c + true + + + true + LookupRollupSummaryScheduleItems__c.ParentKeyPrefix__c + true + + + true + LookupRollupSummaryScheduleItems__c.ParentRecord__c + true + + + true + LookupRollupSummary__c.Active__c + true + + + true + LookupRollupSummary__c.AggregateAllRows__c + true + + + true + LookupRollupSummary__c.AggregateOperation__c + true + + + true + LookupRollupSummary__c.CalculateJobId__c + true + + + true + LookupRollupSummary__c.CalculationMode__c + true + + + true + LookupRollupSummary__c.CalculationSharingMode__c + true + + + true + LookupRollupSummary__c.ConcatenateDelimiter__c + true + + + true + LookupRollupSummary__c.Description__c + true + + + true + LookupRollupSummary__c.FieldToOrderBy__c + true + + + true + LookupRollupSummary__c.RelationshipCriteriaFields__c + true + + + true + LookupRollupSummary__c.RelationshipCriteria__c + true + + + true + LookupRollupSummary__c.RowLimit__c + true + + + true + LookupRollupSummary__c.TestCodeSeeAllData__c + true + + + true + LookupRollupSummary__c.TestCode__c + true + + + true + LookupRollupSummary__c.UniqueName__c + true + + + true + Opportunity.AccountId + true + + + true + Opportunity.Amount + true + + + true + Opportunity.CampaignId + true + + + true + Opportunity.ContractId + true + + + true + Opportunity.Description + true + + + false + Opportunity.ExpectedRevenue + true + + + true + Opportunity.IsPrivate + true + + + true + Opportunity.LeadSource + true + + + true + Opportunity.NextStep + true + + + true + Opportunity.OCR_Concatenate__c + true + + + true + Opportunity.OCR_Count__c + true + + + true + Opportunity.OCR_Min__c + true + + + true + Opportunity.Probability + true + + + true + Opportunity.QA_Lookup_Parent__c + true + + + true + Opportunity.TotalOpportunityQuantity + true + + + true + Opportunity.Type + true + + + true + QALookupParent__c.Account__c + true + + + true + QALookupParent__c.Case_Concatenate__c + true + + + true + QALookupParent__c.Case_Count__c + true + + + true + QALookupParent__c.Case_Min__c + true + + + true + QALookupParent__c.Case__c + true + + + false + QALookupParent__c.Colours__c + false + + + false + QALookupParent__c.Count_of_String_Children__c + false + + + false + QALookupParent__c.Descriptions2__c + false + + + false + QALookupParent__c.Descriptions__c + false + + + true + QALookupParent__c.Opportunity_Concatenate__c + true + + + true + QALookupParent__c.Opportunity_Count__c + true + + + true + QALookupParent__c.Opportunity_Min__c + true + + + true + QALookupParent__c.QA_Lookup_Amount_Min__c + true + + + false + QALookupParent__c.Record_Notes__c + false + + + false + QALookupParent__c.Self_Relationship_Number_Target__c + false + + + false + QALookupParent__c.Self_Relationship__c + false + + + false + QALookupParent__c.Total2__c + false + + + false + QALookupParent__c.Total__c + false + + + true + UserNotification__e.Payload__c + true + + + Account-Account Layout + + + Campaign-Campaign Layout + + + Case-Case Layout + + + CaseClose-Close Case Layout + + + Contact-Contact Layout + + + LookupChild__c-Lookup Child Layout + + + LookupParent__c-Lookup Parent Layout + + + LookupRollupCalculateJob__c-Lookup Rollup Calculate Job Layout + + + LookupRollupSummary2__mdt-Lookup Rollup Summary Layout + + + LookupRollupSummaryLog__c-Lookup Rollup Summary Log Layout + + + LookupRollupSummaryScheduleItems__c-Lookup Rollup Summary Queue Layout + + + LookupRollupSummary__c-Lookup Rollup Summary Layout + + + Opportunity-Opportunity Layout + + + QALookupParent__c-QA Lookup Parent Layout + + + true + true + true + true + true + Case + true + + + true + true + true + true + true + LookupChild__c + true + + + true + true + true + true + true + LookupParent__c + true + + + true + true + true + true + true + LookupRollupCalculateJob__c + true + + + true + true + true + true + true + LookupRollupSummaryLog__c + true + + + true + true + true + true + true + LookupRollupSummaryScheduleItems__c + true + + + true + true + true + true + true + LookupRollupSummary__c + true + + + true + true + true + true + true + Opportunity + true + + + true + true + true + true + true + QALookupParent__c + true + + + true + true + true + true + true + UserNotification__e + true + + + RollupSummaryView + true + + + managelookuprollupsummaries + true + + + managelookuprollupsummaries_New + true + + + managetrigger + true + + + managetriggermdt + true + + + rollupcalculate + true + + + rollupcalculatemdt + true + + + rollupscheduledcalculate + true + + + rollupscheduledcalculatemdt + true + + + rollupsummaryenhanced + true + + + rollupsummaryenhancednew + true + + + rollupsummarylogdelete + true + + + welcome + true + + + welcometab + true + + + LookupRollupCalculateJob__c + DefaultOn + + + LookupRollupListView + DefaultOn + + + LookupRollupSummariesHome + DefaultOn + + + LookupRollupSummaryLog__c + DefaultOn + + + LookupRollupSummaryScheduleItems__c + DefaultOn + + + LookupRollupSummary__c + DefaultOn + + + ManageLookupRollupSummaries + DefaultOn + + + ManageLookupRollupSummaries2 + DefaultOn + + + QALookupParent__c + Hidden + + + Welcome + DefaultOn + + + standard-Case + DefaultOn + + + standard-Opportunity + DefaultOn + + Salesforce + + true + AIViewInsightObjects + + + true + ActivateContract + + + true + ActivateOrder + + + true + ActivitiesAccess + + + true + AddDirectMessageMembers + + + true + AllowObjectDetectionTraining + + + true + AllowUniversalSearch + + + true + AllowViewKnowledge + + + true + ApexRestServices + + + true + ApiEnabled + + + true + AssignPermissionSets + + + true + AssignTopics + + + true + AuthorApex + + + true + BulkMacrosAllowed + + + true + CanAccessCE + + + true + CanInsertFeedSystemFields + + + true + CanUseNewDashboardBuilder + + + true + CanVerifyComment + + + true + ChangeDashboardColors + + + true + ChatterEditOwnPost + + + true + ChatterEditOwnRecordPost + + + true + ChatterFileLink + + + true + ChatterInternalUser + + + true + ChatterInviteExternalUsers + + + true + ChatterOwnGroups + + + true + ClientSecretRotation + + + true + ConnectOrgToEnvironmentHub + + + true + ConsentApiUpdate + + + true + ContentAdministrator + + + true + ContentWorkspaces + + + true + ConvertLeads + + + true + CreateCustomizeDashboards + + + true + CreateCustomizeFilters + + + true + CreateCustomizeReports + + + true + CreateDashboardFolders + + + true + CreateLtngTempFolder + + + true + CreateReportFolders + + + true + CreateTopics + + + true + CreateWorkBadgeDefinition + + + true + CreateWorkspaces + + + true + CustomizeApplication + + + true + DataExport + + + true + DelegatedTwoFactor + + + true + DeleteActivatedContract + + + true + DeleteTopics + + + true + DistributeFromPersWksp + + + true + EditActivatedOrders + + + true + EditBillingInfo + + + true + EditBrandTemplates + + + true + EditCaseComments + + + true + EditEvent + + + true + EditHtmlTemplates + + + true + EditKnowledge + + + true + EditMyDashboards + + + true + EditMyReports + + + true + EditOppLineItemUnitPrice + + + true + EditPublicDocuments + + + true + EditPublicFilters + + + true + EditPublicTemplates + + + true + EditReadonlyFields + + + true + EditTask + + + true + EditTopics + + + true + EmailMass + + + true + EmailSingle + + + true + EnableCommunityAppLauncher + + + true + EnableNotifications + + + true + ExportReport + + + true + FieldServiceAccess + + + true + GiveRecognitionBadge + + + true + ImportCustomObjects + + + true + ImportLeads + + + true + ImportPersonal + + + true + InstallPackaging + + + true + LightningConsoleAllowedForUser + + + true + LightningExperienceUser + + + true + ListEmailSend + + + true + ManageAnalyticSnapshots + + + true + ManageAuthProviders + + + true + ManageBusinessHourHolidays + + + true + ManageC360AConnections + + + true + ManageCMS + + + true + ManageCallCenters + + + true + ManageCases + + + true + ManageCategories + + + true + ManageCertificates + + + true + ManageContentPermissions + + + true + ManageContentProperties + + + true + ManageContentTypes + + + true + ManageCustomPermissions + + + true + ManageCustomReportTypes + + + true + ManageDashbdsInPubFolders + + + true + ManageDataCategories + + + true + ManageDataIntegrations + + + true + ManageDynamicDashboards + + + true + ManageEmailClientConfig + + + true + ManageEntitlements + + + true + ManageExchangeConfig + + + true + ManageHealthCheck + + + true + ManageHubConnections + + + true + ManageInteraction + + + true + ManageInternalUsers + + + true + ManageIpAddresses + + + true + ManageKnowledge + + + true + ManageKnowledgeImportExport + + + true + ManageLeads + + + true + ManageLoginAccessPolicies + + + true + ManageMobile + + + true + ManageNetworks + + + true + ManageOrchInstsAndWorkItems + + + true + ManagePackageLicenses + + + true + ManagePasswordPolicies + + + true + ManageProfilesPermissionsets + + + true + ManagePropositions + + + true + ManagePvtRptsAndDashbds + + + true + ManageRecommendationStrategies + + + true + ManageReleaseUpdates + + + true + ManageRemoteAccess + + + true + ManageReportsInPubFolders + + + true + ManageRoles + + + true + ManageSearchPromotionRules + + + true + ManageSharing + + + true + ManageSolutions + + + true + ManageSubscriptions + + + true + ManageSynonyms + + + true + ManageTranslation + + + true + ManageUnlistedGroups + + + true + ManageUsers + + + true + MassInlineEdit + + + true + MergeTopics + + + true + ModerateChatter + + + true + ModifyAllData + + + true + ModifyDataClassification + + + true + ModifyMetadata + + + true + NewReportBuilder + + + true + OmnichannelInventorySync + + + true + Packaging2 + + + true + Packaging2Delete + + + true + PrivacyDataAccess + + + true + RemoveDirectMessageMembers + + + true + ResetPasswords + + + true + RunReports + + + true + ScheduleReports + + + true + SelectFilesFromSalesforce + + + true + SendCustomNotifications + + + true + SendExternalEmailAvailable + + + true + SendSitRequests + + + true + ShareInternalArticles + + + true + ShowCompanyNameAsUserBadge + + + true + SolutionImport + + + true + SubmitMacrosAllowed + + + true + SubscribeDashboardRolesGrps + + + true + SubscribeDashboardToOtherUsers + + + true + SubscribeReportRolesGrps + + + true + SubscribeReportToOtherUsers + + + true + SubscribeReportsRunAsUser + + + true + SubscribeToLightningDashboards + + + true + SubscribeToLightningReports + + + true + TransactionalEmailSend + + + true + TransferAnyCase + + + true + TransferAnyEntity + + + true + TransferAnyLead + + + true + UseOmnichannelInventoryAPIs + + + true + UseTeamReassignWizards + + + true + UseWebLink + + + true + ViewAllData + + + true + ViewAllProfiles + + + true + ViewAllUsers + + + true + ViewDataAssessment + + + true + ViewDataCategories + + + true + ViewDataLeakageEvents + + + true + ViewDeveloperName + + + true + ViewEventLogFiles + + + true + ViewFlowUsageAndFlowEventData + + + true + ViewHealthCheck + + + true + ViewHelpLink + + + true + ViewMLModels + + + true + ViewMyTeamsDashboards + + + true + ViewPlatformEvents + + + true + ViewPublicDashboards + + + true + ViewPublicReports + + + true + ViewRoles + + + true + ViewSetup + + + true + ViewUserPII + + + true + WorkCalibrationUser + + diff --git a/unpackaged/config/qa/triggers/AccountTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/AccountTrigger.trigger-meta.xml index 9d9fc96d..09b12e89 100644 --- a/unpackaged/config/qa/triggers/AccountTrigger.trigger-meta.xml +++ b/unpackaged/config/qa/triggers/AccountTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/qa/triggers/CampaignMemberTrigger.trigger b/unpackaged/config/qa/triggers/CampaignMemberTrigger.trigger new file mode 100644 index 00000000..0ffccdf3 --- /dev/null +++ b/unpackaged/config/qa/triggers/CampaignMemberTrigger.trigger @@ -0,0 +1,8 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +trigger CampaignMemberTrigger on CampaignMember + (before delete, before insert, before update, after delete, after insert, after undelete, after update) +{ + RollupService.triggerHandler(CampaignMember.SObjectType); +} \ No newline at end of file diff --git a/unpackaged/config/qa/triggers/CampaignMemberTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/CampaignMemberTrigger.trigger-meta.xml new file mode 100644 index 00000000..09b12e89 --- /dev/null +++ b/unpackaged/config/qa/triggers/CampaignMemberTrigger.trigger-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/triggers/CaseTrigger.trigger b/unpackaged/config/qa/triggers/CaseTrigger.trigger new file mode 100644 index 00000000..0ea05db9 --- /dev/null +++ b/unpackaged/config/qa/triggers/CaseTrigger.trigger @@ -0,0 +1,8 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +trigger CaseTrigger on Case + (before delete, before insert, before update, after delete, after insert, after undelete, after update) +{ + RollupService.triggerHandler(Case.SObjectType); +} \ No newline at end of file diff --git a/unpackaged/config/qa/triggers/CaseTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/CaseTrigger.trigger-meta.xml new file mode 100644 index 00000000..09b12e89 --- /dev/null +++ b/unpackaged/config/qa/triggers/CaseTrigger.trigger-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/triggers/ContactTrigger.trigger b/unpackaged/config/qa/triggers/ContactTrigger.trigger new file mode 100644 index 00000000..5a81bc7e --- /dev/null +++ b/unpackaged/config/qa/triggers/ContactTrigger.trigger @@ -0,0 +1,8 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +trigger ContactTrigger on Contact + (before delete, before insert, before update, after delete, after insert, after undelete, after update) +{ + RollupService.triggerHandler(Contact.SObjectType); +} \ No newline at end of file diff --git a/unpackaged/config/qa/triggers/ContactTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/ContactTrigger.trigger-meta.xml new file mode 100644 index 00000000..09b12e89 --- /dev/null +++ b/unpackaged/config/qa/triggers/ContactTrigger.trigger-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/triggers/OpportunityContactRoleTrigger.trigger b/unpackaged/config/qa/triggers/OpportunityContactRoleTrigger.trigger new file mode 100644 index 00000000..61805740 --- /dev/null +++ b/unpackaged/config/qa/triggers/OpportunityContactRoleTrigger.trigger @@ -0,0 +1,8 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +trigger OpportunityContactRoleTrigger on OpportunityContactRole + (before delete, before insert, before update, after delete, after insert, after undelete, after update) +{ + RollupService.triggerHandler(OpportunityContactRole.SObjectType); +} \ No newline at end of file diff --git a/unpackaged/config/qa/triggers/OpportunityContactRoleTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/OpportunityContactRoleTrigger.trigger-meta.xml new file mode 100644 index 00000000..09b12e89 --- /dev/null +++ b/unpackaged/config/qa/triggers/OpportunityContactRoleTrigger.trigger-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/triggers/OpportunityTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/OpportunityTrigger.trigger-meta.xml index 9d9fc96d..09b12e89 100644 --- a/unpackaged/config/qa/triggers/OpportunityTrigger.trigger-meta.xml +++ b/unpackaged/config/qa/triggers/OpportunityTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/qa/triggers/QALookupChildTrigger.trigger b/unpackaged/config/qa/triggers/QALookupChildTrigger.trigger new file mode 100644 index 00000000..bdde7852 --- /dev/null +++ b/unpackaged/config/qa/triggers/QALookupChildTrigger.trigger @@ -0,0 +1,8 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +trigger QALookupChildTrigger on QALookupChild__c + (before delete, before insert, before update, after delete, after insert, after undelete, after update) +{ + RollupService.triggerHandler(QALookupChild__c.SObjectType); +} \ No newline at end of file diff --git a/unpackaged/config/qa/triggers/QALookupChildTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/QALookupChildTrigger.trigger-meta.xml new file mode 100644 index 00000000..09b12e89 --- /dev/null +++ b/unpackaged/config/qa/triggers/QALookupChildTrigger.trigger-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/qa/triggers/QALookupParentTrigger.trigger b/unpackaged/config/qa/triggers/QALookupParentTrigger.trigger new file mode 100644 index 00000000..7bb1ae2e --- /dev/null +++ b/unpackaged/config/qa/triggers/QALookupParentTrigger.trigger @@ -0,0 +1,8 @@ +/** + * Auto Generated and Deployed by the Declarative Lookup Rollup Summaries Tool package (dlrs) + **/ +trigger QALookupParentTrigger on QALookupParent__c + (before delete, before insert, before update, after delete, after insert, after undelete, after update) +{ + RollupService.triggerHandler(QALookupParent__c.SObjectType); +} \ No newline at end of file diff --git a/unpackaged/config/qa/triggers/QALookupParentTrigger.trigger-meta.xml b/unpackaged/config/qa/triggers/QALookupParentTrigger.trigger-meta.xml new file mode 100644 index 00000000..09b12e89 --- /dev/null +++ b/unpackaged/config/qa/triggers/QALookupParentTrigger.trigger-meta.xml @@ -0,0 +1,5 @@ + + + 62.0 + Active + diff --git a/unpackaged/config/test/customPermissions/DisableDLRS.customPermission-meta.xml b/unpackaged/config/test/customPermissions/DisableDLRS.customPermission-meta.xml new file mode 100644 index 00000000..273dd352 --- /dev/null +++ b/unpackaged/config/test/customPermissions/DisableDLRS.customPermission-meta.xml @@ -0,0 +1,6 @@ + + + Used to disable specific rollup jobs for specific users + false + + diff --git a/unpackaged/config/test/objects/Account/fields/NumberOfLocations__c.field-meta.xml b/unpackaged/config/test/objects/Account/fields/NumberOfLocations__c.field-meta.xml index c38ec72e..8688efa6 100644 --- a/unpackaged/config/test/objects/Account/fields/NumberOfLocations__c.field-meta.xml +++ b/unpackaged/config/test/objects/Account/fields/NumberOfLocations__c.field-meta.xml @@ -1,4 +1,4 @@ - + NumberOfLocations__c false diff --git a/unpackaged/config/test/objects/Account/fields/SLAExpirationDate__c.field-meta.xml b/unpackaged/config/test/objects/Account/fields/SLAExpirationDate__c.field-meta.xml index 7efb7ab2..0ec26a74 100644 --- a/unpackaged/config/test/objects/Account/fields/SLAExpirationDate__c.field-meta.xml +++ b/unpackaged/config/test/objects/Account/fields/SLAExpirationDate__c.field-meta.xml @@ -1,7 +1,6 @@ - + SLAExpirationDate__c - false false false diff --git a/unpackaged/config/test/permissionsets/DisableDLRS.permissionset-meta.xml b/unpackaged/config/test/permissionsets/DisableDLRS.permissionset-meta.xml new file mode 100644 index 00000000..d1a905cb --- /dev/null +++ b/unpackaged/config/test/permissionsets/DisableDLRS.permissionset-meta.xml @@ -0,0 +1,10 @@ + + + + true + DisableDLRS + + Used in Apex Testing to disable individual DLRS rollups + false + + diff --git a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest2Trigger.trigger-meta.xml b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest2Trigger.trigger-meta.xml index 78d3f042..9eb00646 100644 --- a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest2Trigger.trigger-meta.xml +++ b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest2Trigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest3Trigger.trigger-meta.xml b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest3Trigger.trigger-meta.xml index 78d3f042..9eb00646 100644 --- a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest3Trigger.trigger-meta.xml +++ b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest3Trigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest4Trigger.trigger-meta.xml b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest4Trigger.trigger-meta.xml index 78d3f042..9eb00646 100644 --- a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest4Trigger.trigger-meta.xml +++ b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest4Trigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest5Trigger.trigger-meta.xml b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest5Trigger.trigger-meta.xml index 78d3f042..9eb00646 100644 --- a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest5Trigger.trigger-meta.xml +++ b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTest5Trigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active diff --git a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTestTrigger.trigger-meta.xml b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTestTrigger.trigger-meta.xml index 78d3f042..9eb00646 100644 --- a/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTestTrigger.trigger-meta.xml +++ b/unpackaged/config/test_triggers/triggers/UnpackagedRollupServiceTestTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 60.0 + 62.0 Active