diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 551f1b7d5..000000000 --- a/.eslintignore +++ /dev/null @@ -1,7 +0,0 @@ -.github/ -.husky/ -.sf/ -.sfdx/ -.vscode/ -temp/ -test-coverage/ diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36fc2d6b5..aaaba715c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -70,12 +70,11 @@ jobs: if: ${{ (github.event_name == 'pull_request') && (github.event.pull_request.draft == false) && (steps.changes.outputs.core == 'true') }} run: npm run package:version:number:verify - - name: 'Verify LWC with ESLint' + - name: 'Verify LWC with Code Analyzer' run: npm run scan:lwc - - name: 'Verify Apex with SFDX Scanner' + - name: 'Verify Apex with Code Analyzer' run: | - npm run sf:plugins:link:scanner npm run scan:apex # TODO - uncomment - temporarily commented-out due to an issue with apexdocs in the pipeline diff --git a/.gitignore b/.gitignore index 0968665f2..26efa8d77 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ yarn.lock *.log **/lwc/jsconfig.json .config +code-analyzer*.json \ No newline at end of file diff --git a/README.md b/README.md index 2bd7f0a87..f690effd1 100644 --- a/README.md +++ b/README.md @@ -5,33 +5,29 @@ The most robust observability solution for Salesforce experts. Built 100% natively on the platform, and designed to work seamlessly with Apex, Lightning Components, Flow, OmniStudio, and integrations. -## Unlocked Package - v4.17.3 +## Unlocked Package - v4.18.0 -[![Install Unlocked Package in a Sandbox](./images/btn-install-unlocked-package-sandbox.png)](https://test.salesforce.com/packaging/installPackage.apexp?p0=04tg70000001IMHAA2) -[![Install Unlocked Package in Production](./images/btn-install-unlocked-package-production.png)](https://login.salesforce.com/packaging/installPackage.apexp?p0=04tg70000001IMHAA2) +[![Install Unlocked Package in a Sandbox](./images/btn-install-unlocked-package-sandbox.png)](https://test.salesforce.com/packaging/installPackage.apexp?p0=04tg70000001jUXAAY) +[![Install Unlocked Package in Production](./images/btn-install-unlocked-package-production.png)](https://login.salesforce.com/packaging/installPackage.apexp?p0=04tg70000001jUXAAY) [![View Documentation](./images/btn-view-documentation.png)](https://github.com/jongpie/NebulaLogger/wiki) -`sf package install --wait 20 --security-type AdminsOnly --package 04tg70000001IMHAA2` +`sf package install --wait 20 --security-type AdminsOnly --package 04tg70000001jUXAAY` --- -## Managed Package - v4.17.0 +## Managed Package - v4.18.0 -[![Install Managed Package in a Sandbox](./images/btn-install-managed-package-sandbox.png)](https://test.salesforce.com/packaging/installPackage.apexp?mgd=true&p0=04tg70000000r5xAAA) -[![Install Managed Package in Production](./images/btn-install-managed-package-production.png)](https://login.salesforce.com/packaging/installPackage.apexp?mgd=true&p0=04tg70000000r5xAAA) +[![Install Managed Package in a Sandbox](./images/btn-install-managed-package-sandbox.png)](https://test.salesforce.com/packaging/installPackage.apexp?mgd=true&p0=04tg70000001jSvAAI) +[![Install Managed Package in Production](./images/btn-install-managed-package-production.png)](https://login.salesforce.com/packaging/installPackage.apexp?mgd=true&p0=04tg70000001jSvAAI) [![View Milestone](./images/btn-view-managed-package-milestone.png)](https://github.com/jongpie/NebulaLogger/milestone/16?closed=1) -`sf package install --wait 30 --security-type AdminsOnly --package 04tg70000000r5xAAA` +`sf package install --wait 30 --security-type AdminsOnly --package 04tg70000001jSvAAI` --- -> [!NOTE] -> Starting in September 2024, Nebula Logger's documentation is being rewritten & consolidated into [the wiki](https://github.com/jongpie/NebulaLogger/wiki). Most of the content show below will eventually be migrated to the wiki instead. - ## Features 1. A unified logging tool that supports easily adding log entries across the Salesforce platform, using: - - [Apex](https://github.com/jongpie/NebulaLogger/wiki/Logging-in-Apex): classes, triggers, and anonymous Apex scripts - [Lightning Components](https://github.com/jongpie/NebulaLogger/wiki/Logging-in-Components): lightning web components (LWCs) & aura components - [Flow & Process Builder](https://github.com/jongpie/NebulaLogger/wiki/Logging-in-Flow): any Flow type that supports invocable actions @@ -40,7 +36,6 @@ The most robust observability solution for Salesforce experts. Built 100% native 2. Built with an event-driven pub/sub messaging architecture, using `LogEntryEvent__e` [platform events](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_intro.htm). For more details on leveraging platform events, see [the Platform Events Developer Guide site](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_subscribe_cometd.htm) 3. Actionable observability data about your Salesforce org, available directly in your Salesforce org via the 5 included custom objects - - `Log__c` - `LogEntry__c` - `LogEntryTag__c` @@ -54,7 +49,6 @@ The most robust observability solution for Salesforce experts. Built 100% native 8. Dynamically assign tags to `Log__c` and `LogEntry__c` records for tagging/labeling your logs 9. Extendable with a built-in plugin framework: easily build or install plugins that enhance Nebula Logger, using Apex or Flow (not currently available in the managed package) 10. ISVs & package developers have several options for leveraging Nebula Logger in your own packages - - **Optional Dependency**: dynamically leverage Nebula Logger in your own packages - when it's available in a subscriber's org - using [Apex's `Callable` interface](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_interface_System_Callable.htm) and Nebula Logger's included implementation `CallableLogger` (requires `v4.14.10` of Nebula Logger or newer) - **Hard Dependency**: add either Nebula Logger's unlocked (no namespace) package or its managed package (`Nebula` namespace) as a dependency for your package to ensure customers always have a version of Nebula Logger installed - **No Dependency**: Bundle Nebula Logger's metadata into your own project - all of Nebula Logger's metadata is fully open source & freely available. This approach provides with full control of what's included in your own app/project. @@ -653,18 +647,14 @@ This feature requires that you populate your custom fields yourself, and is only The first step is to add a field to the platform event `LogEntryEvent__e` - Create a custom field on `LogEntryEvent__e`. Any data type supported by platform events can be used. - - In this example, a custom text field called `SomeCustomField__c` has been added: ![Custom Field on LogEntryEvent__e](./images/custom-field-log-entry-event.png) - In Apex, you have 2 ways to populate your custom fields - 1. Set the field once per transaction - every `LogEntryEvent__e` logged in the transaction will then automatically have the specified field populated with the same value. - This is typically used for fields that are mapped to an equivalent `Log__c` or `LoggerScenario__c` field. - - How: call the static method overloads `Logger.setField(Schema.SObjectField field, Object fieldValue)` or `Logger.setField(Map fieldToValue)` - 2. Set the field on a specific `LogEntryEvent__e` record - other records will not have the field automatically set. - This is typically used for fields that are mapped to an equivalent `LogEntry__c` field. - How: call the instance method overloads `LogEntryEventBuilder.setField(Schema.SObjectField field, Object fieldValue)` or `LogEntryEventBuilder.setField(Map fieldToValue)` @@ -682,12 +672,9 @@ The first step is to add a field to the platform event `LogEntryEvent__e` ``` - In JavaScript, you have 2 ways to populate your custom fields. These are very similar to the 2 ways available in Apex (above). - 1. Set the field once per component - every `LogEntryEvent__e` logged in your component will then automatically have the specified field populated with the same value. - This is typically used for fields that are mapped to an equivalent `Log__c` or `LoggerScenario__c` field. - - How: call the `logger` LWC function `logger.setField(Object fieldToValue)` - 2. Set the field on a specific `LogEntryEvent__e` record - other records will not have the field automatically set. - This is typically used for fields that are mapped to an equivalent `LogEntry__c` field. - How: call the instance function `LogEntryEventBuilder.setField(Object fieldToValue)` @@ -717,13 +704,11 @@ The first step is to add a field to the platform event `LogEntryEvent__e` If you want to store the data in one of Nebula Logger's custom objects, you can follow the above steps, and also... - Create an equivalent custom field on one of Nebula Logger's custom objects - right now, only `Log__c`, `LogEntry__c`, and `LoggerScenario__c` are supported. - - In this example, a custom text field _also_ called `SomeCustomField__c` has been added to `Log__c` object - this will be used to store the value of the field `LogEntryEvent__e.SomeCustomField__c`: ![Custom Field on LogEntryEvent__e](./images/custom-field-log.png) - Create a record in the new CMDT `LoggerFieldMapping__mdt` to map the `LogEntryEvent__e` custom field to the custom object's custom field, shown below. Nebula Logger will automatically populate the custom object's target field with the value of the source `LogEntryEvent__e` field. - - In this example, a custom text field called `SomeCustomField__c` has been added to both `LogEntryEvent__e` and `Log__c`. ![Custom Field on LogEntryEvent__e](./images/custom-field-mapping.png) @@ -820,7 +805,6 @@ Two Apex classes are provided out-of-the-box to handle automatically deleting ol If you want to add your own automation to the `Log__c` or `LogEntry__c` objects, you can leverage Apex or Flow to define "plugins" - the logger system will then automatically run the plugins after each trigger event (BEFORE_INSERT, BEFORE_UPDATE, AFTER_INSERT, AFTER_UPDATE, and so on). This framework makes it easy to build your own plugins, or deploy/install others' prebuilt packages, without having to modify the logging system directly. - Flow plugins: your Flow should be built as auto-launched Flows with these parameters: - 1. `Input` parameter `triggerOperationType` - The name of the current trigger operation (such as BEFORE_INSERT, BEFORE_UPDATE, etc.) 2. `Input` parameter `triggerNew` - The list of logger records being processed (`Log__c` or `LogEntry__c` records) 3. `Output` parameter `updatedTriggerNew` - If your Flow makes any updates to the collection of records, you should return a record collection containing the updated records diff --git a/code-analyzer.yml b/code-analyzer.yml new file mode 100644 index 000000000..c505060b5 --- /dev/null +++ b/code-analyzer.yml @@ -0,0 +1,1342 @@ +# ====================================================================== +# CODE ANALYZER CONFIGURATION +# To learn more about this configuration, visit: +# https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/config-custom.html +# ====================================================================== + +config_root: null +log_folder: null + +# Rule override settings of the format rules.{engine_name}.{rule_name}.{property_name} = {override_value} where: +# {engine_name} is the name of the engine containing the rule that you want to override. +# {rule_name} is the name of the rule that you want to override. +# {property_name} can either be: +# 'severity' - [Optional] The severity level value that you want to use to override the default severity level for the rule +# Possible values: 1 or 'Critical', 2 or 'High', 3 or 'Moderate', 4 or 'Low', 5 or 'Info' +# 'tags' - [Optional] The string array of tag values that you want to use to override the default tags for the rule +# ---- [Example usage]: --------------------- +# rules: +# eslint: +# sort-vars: +# severity: "Info" +# tags: ["Recommended", "Suggestion"] +# ------------------------------------------- +rules: + # ====================================================================== + # ESLINT ENGINE RULE OVERRIDES + # ====================================================================== + eslint: + '@lwc/lwc/no-inline-disable': + severity: 4 + tags: + - Recommended + - Javascript + '@lwc/lwc/no-deprecated': + severity: 3 + tags: + - Recommended + - Javascript + '@lwc/lwc/no-disallowed-lwc-imports': + severity: 3 + tags: + - Recommended + - Javascript + '@lwc/lwc/no-unexpected-wire-adapter-usages': + severity: 3 + tags: + - Recommended + - Javascript + '@lwc/lwc/no-unknown-wire-adapters': + severity: 3 + tags: + - Recommended + - Javascript + '@lwc/lwc/valid-api': + severity: 3 + tags: + - Recommended + - Javascript + '@lwc/lwc/valid-track': + severity: 3 + tags: + - Recommended + - Javascript + '@lwc/lwc/valid-wire': + severity: 3 + tags: + - Recommended + - Javascript + '@typescript-eslint/ban-ts-comment': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-array-constructor': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-duplicate-enum-values': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-empty-object-type': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-explicit-any': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-extra-non-null-assertion': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-misused-new': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-namespace': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-non-null-asserted-optional-chain': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-require-imports': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-this-alias': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-unnecessary-type-constraint': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-unsafe-declaration-merging': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-unsafe-function-type': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-unused-expressions': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/no-unused-vars': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/no-wrapper-object-types': + severity: 2 + tags: + - Recommended + - ErrorProne + - Typescript + '@typescript-eslint/prefer-as-const': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/prefer-namespace-keyword': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + '@typescript-eslint/triple-slash-reference': + severity: 3 + tags: + - Recommended + - BestPractices + - Typescript + 'constructor-super': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'for-direction': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'getter-return': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-async-promise-executor': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-case-declarations': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-class-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-compare-neg-zero': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-cond-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-const-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-constant-condition': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-control-regex': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-debugger': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-delete-var': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-dupe-args': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-dupe-class-members': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-dupe-else-if': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-dupe-keys': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-duplicate-case': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-empty': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-empty-character-class': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-empty-pattern': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-ex-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-extra-boolean-cast': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-fallthrough': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-func-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-global-assign': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-import-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-inner-declarations': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-invalid-regexp': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-irregular-whitespace': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-loss-of-precision': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-misleading-character-class': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-new-symbol': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-nonoctal-decimal-escape': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-obj-calls': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-octal': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-prototype-builtins': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-redeclare': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + 'no-regex-spaces': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-self-assign': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-setter-return': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-shadow-restricted-names': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-sparse-arrays': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-this-before-super': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-undef': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-unexpected-multiline': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-unreachable': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-unsafe-finally': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-unsafe-negation': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-unsafe-optional-chaining': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-unused-labels': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-unused-vars': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + 'no-useless-backreference': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'no-useless-catch': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-useless-escape': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-var': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'no-with': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'prefer-const': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'prefer-rest-params': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'prefer-spread': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'require-yield': + severity: 3 + tags: + - Recommended + - BestPractices + - Javascript + - Typescript + 'use-isnan': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + 'valid-typeof': + severity: 2 + tags: + - Recommended + - ErrorProne + - Javascript + - Typescript + + # ====================================================================== + # RETIRE-JS ENGINE RULE OVERRIDES + # ====================================================================== + retire-js: + 'LibraryWithKnownCriticalSeverityVulnerability': + severity: 1 + tags: + - Recommended + - Security + - Javascript + 'LibraryWithKnownHighSeverityVulnerability': + severity: 2 + tags: + - Recommended + - Security + - Javascript + 'LibraryWithKnownMediumSeverityVulnerability': + severity: 3 + tags: + - Recommended + - Security + - Javascript + 'LibraryWithKnownLowSeverityVulnerability': + severity: 4 + tags: + - Recommended + - Security + - Javascript + + # ====================================================================== + # REGEX ENGINE RULE OVERRIDES + # ====================================================================== + regex: + 'NoTrailingWhitespace': + severity: 5 + tags: + - Recommended + - CodeStyle + - Apex + 'AvoidTermsWithImplicitBias': + severity: 5 + tags: + - Recommended + - BestPractices + 'AvoidOldSalesforceApiVersions': + severity: 2 + tags: + - Recommended + - Security + - Xml + 'AvoidGetHeapSizeInLoop': + severity: 2 + tags: + - Recommended + - Performance + - Apex + 'MinVersionForAbstractVirtualClassesWithPrivateMethod': + severity: 2 + tags: + - Recommended + - BestPractices + - Apex + + # ====================================================================== + # CPD ENGINE RULE OVERRIDES + # ====================================================================== + cpd: + 'DetectCopyPasteForApex': + severity: 5 + tags: + - Recommended + - Design + - Apex + 'DetectCopyPasteForJavascript': + severity: 5 + tags: + - Recommended + - Design + - Javascript + 'DetectCopyPasteForTypescript': + severity: 5 + tags: + - Recommended + - Design + - Typescript + 'DetectCopyPasteForVisualforce': + severity: 5 + tags: + - Recommended + - Design + - Visualforce + + # ====================================================================== + # PMD ENGINE RULE OVERRIDES + # ====================================================================== + pmd: + 'ApexBadCrypto': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexCRUDViolation': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexCSRF': + severity: 1 + tags: + - Recommended + - Security + - Apex + 'ApexDangerousMethods': + severity: 3 + tags: + - Recommended + - Security + - Apex + 'ApexDoc': + severity: 4 + tags: + - Recommended + - Documentation + - Apex + 'ApexInsecureEndpoint': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexOpenRedirect': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexSharingViolations': + severity: 3 + tags: + - Recommended + - Security + - Apex + 'ApexSOQLInjection': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexSuggestUsingNamedCred': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexUnitTestClassShouldHaveAsserts': + severity: 3 + tags: + - Recommended + - BestPractices + - Apex + 'ApexUnitTestClassShouldHaveRunAs': + severity: 4 + tags: + - Recommended + - BestPractices + - Apex + 'ApexUnitTestMethodShouldHaveIsTestAnnotation': + severity: 2 + tags: + - Recommended + - BestPractices + - Apex + 'ApexUnitTestShouldNotUseSeeAllDataTrue': + severity: 2 + tags: + - Recommended + - BestPractices + - Apex + 'ApexAssertionsShouldIncludeMessage': + severity: 4 + tags: + - NotRecommended + - Apex + 'ApexXSSFromEscapeFalse': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'ApexXSSFromURLParam': + severity: 2 + tags: + - Recommended + - Security + - Apex + 'AvoidDebugStatements': + severity: 4 + tags: + - Recommended + - Performance + - Apex + 'AvoidDeeplyNestedIfStmts': + severity: 3 + tags: + - Recommended + - Design + - Apex + 'AvoidDirectAccessTriggerMap': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'AvoidGlobalModifier': + severity: 3 + tags: + - Recommended + - BestPractices + - Apex + 'AvoidHardcodingId': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'AvoidLogicInTrigger': + severity: 3 + tags: + - Recommended + - BestPractices + - Apex + 'AvoidNonExistentAnnotations': + severity: 4 + tags: + - Recommended + - ErrorProne + - Apex + 'AvoidNonRestrictiveQueries': + severity: 4 + tags: + - Recommended + - Performance + - Apex + 'ClassNamingConventions': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'CognitiveComplexity': + severity: 4 + tags: + - Recommended + - Design + - Apex + 'CyclomaticComplexity': + severity: 4 + tags: + - Recommended + - Design + - Apex + 'DebugsShouldUseLoggingLevel': + severity: 4 + tags: + - Recommended + - BestPractices + - Apex + 'EagerlyLoadedDescribeSObjectResult': + # TODO revisit this rule --> change the severity back to the original value of 2 + severity: 4 + tags: + - Recommended + - Performance + - Apex + 'EmptyCatchBlock': + severity: 2 + tags: + - Recommended + - ErrorProne + - Apex + 'EmptyIfStmt': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'EmptyStatementBlock': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'EmptyTryOrFinallyBlock': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'EmptyWhileStmt': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'ExcessiveClassLength': + severity: 3 + tags: + - Recommended + - Design + - Apex + 'ExcessiveParameterList': + severity: 3 + tags: + - Recommended + - Design + - Apex + 'ExcessivePublicCount': + severity: 3 + tags: + - Recommended + - Design + - Apex + 'FieldDeclarationsShouldBeAtStart': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'FieldNamingConventions': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'ForLoopsMustUseBraces': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'FormalParameterNamingConventions': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'IfElseStmtsMustUseBraces': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'IfStmtsMustUseBraces': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'InaccessibleAuraEnabledGetter': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'LocalVariableNamingConventions': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'MethodNamingConventions': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'MethodWithSameNameAsEnclosingClass': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'NcssConstructorCount': + severity: 4 + tags: + - Recommended + - Design + - Apex + 'NcssMethodCount': + severity: 4 + tags: + - Recommended + - Design + - Apex + 'OneDeclarationPerLine': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'OperationWithHighCostInLoop': + severity: 3 + tags: + - Recommended + - Performance + - Apex + 'OperationWithLimitsInLoop': + severity: 3 + tags: + - Recommended + - Performance + - Apex + 'OverrideBothEqualsAndHashcode': + severity: 2 + tags: + - Recommended + - ErrorProne + - Apex + 'PropertyNamingConventions': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + 'QueueableWithoutFinalizer': + severity: 4 + tags: + - Recommended + - BestPractices + - Apex + 'StdCyclomaticComplexity': + severity: 4 + tags: + - Recommended + - BestPractices + - Apex + 'TestMethodsMustBeInTestClasses': + severity: 3 + tags: + - Recommended + - ErrorProne + - Apex + 'TooManyFields': + severity: 3 + tags: + - Recommended + - Design + - Apex + 'UnusedLocalVariable': + severity: 3 + tags: + - Recommended + - BestPractices + - Apex + 'UnusedMethod': + severity: 3 + tags: + - Recommended + - Design + - Apex + 'VfCsrf': + severity: 2 + tags: + - Recommended + - Security + - Visualforce + 'VfHtmlStyleTagXss': + severity: 2 + tags: + - Recommended + - Security + - Visualforce + 'VfUnescapeEl': + severity: 2 + tags: + - Recommended + - Security + - Visualforce + 'WhileLoopsMustUseBraces': + severity: 3 + tags: + - Recommended + - CodeStyle + - Apex + + # ====================================================================== + # FLOWTEST ENGINE RULE OVERRIDES + # ====================================================================== + flowtest: + 'PreventPassingUserDataIntoElementWithoutSharing': + severity: 2 + tags: + - Recommended + - Security + - Xml + 'PreventPassingUserDataIntoElementWithSharing': + severity: 4 + tags: + - Recommended + - Security + - Xml + +# Engine specific custom configuration settings of the format engines.{engine_name}.{property_name} = {value} where: +# {engine_name} is the name of the engine containing the setting that you want to override. +# {property_name} is the name of a property that you would like to override. +# Each engine may have its own set of properties available to help customize that particular engine's behavior. +engines: + # ====================================================================== + # ESLINT ENGINE CONFIGURATION + # To learn more about this configuration, visit: + # https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-eslint.html#eslint-configuration-reference + # ====================================================================== + eslint: + # Whether to turn off the 'eslint' engine so that it is not included when running Code Analyzer commands. + disable_engine: false + + # Your project's main ESLint configuration file. May be an absolute path or a path relative to the config_root. + # If null and auto_discover_eslint_config is true, then Code Analyzer will attempt to discover/apply it automatically. + # Currently only legacy ESLInt config files are supported. + # See https://eslint.org/docs/v8.x/use/configure/configuration-files to learn more. + eslint_config_file: 'eslint.config.mjs' + + # Your project's ".eslintignore" file. May be an absolute path or a path relative to the config_root. + # If null and auto_discover_eslint_config is true, then Code Analyzer will attempt to discover/apply it automatically. + # See https://eslint.org/docs/v8.x/use/configure/ignore#the-eslintignore-file to learn more. + eslint_ignore_file: null + + # Whether to have Code Analyzer automatically discover/apply any ESLint configuration and ignore files from your workspace. + auto_discover_eslint_config: false + + # Whether to turn off the default base configuration that supplies the standard ESLint rules for JavaScript files. + disable_javascript_base_config: true + + # Whether to turn off the default base configuration that supplies the LWC rules for JavaScript files. + disable_lwc_base_config: false + + # Whether to turn off the default base configuration that supplies the standard rules for TypeScript files. + disable_typescript_base_config: true + + # Extensions of the files in your workspace that will be used to discover rules. + # To associate file extensions to the standard ESLint JavaScript rules, LWC rules, or custom JavaScript-based + # rules, add them under the 'javascript' language. To associate file extensions to the standard TypeScript + # rules or custom TypeScript-based rules, add them under the 'typescript' language. To allow for the + # discovery of custom rules that are associated with any other language, then add the associated file + # extensions under the 'other' language. + file_extensions: + javascript: + - .js + - .cjs + - .mjs + typescript: + - .ts + other: [] + + # ====================================================================== + # RETIRE-JS ENGINE CONFIGURATION + # To learn more about this configuration, visit: + # https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-retire-js.html#retirejs-configuration-reference + # ====================================================================== + retire-js: + # Whether to turn off the 'retire-js' engine so that it is not included when running Code Analyzer commands. + disable_engine: false + + # ====================================================================== + # REGEX ENGINE CONFIGURATION + # To learn more about this configuration, visit: + # https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-regex.html#regex-configuration-reference + # ====================================================================== + regex: + # Whether to turn off the 'regex' engine so that it is not included when running Code Analyzer commands. + disable_engine: false + + # Custom rules to be added to the 'regex' engine of the format custom_rules.{rule_name}.{rule_property_name} = {value} where: + # {rule_name} is the name you would like to give to your custom rule + # {rule_property_name} is the name of one of the rule properties. You may specify the following rule properties: + # 'regex' - The regular expression that triggers a violation when matched against the contents of a file. + # 'file_extensions' - The extensions of the files that you would like to test the regular expression against. + # 'description' - A description of the rule's purpose + # 'violation_message' - [Optional] The message emitted when a rule violation occurs. + # This message is intended to help the user understand the violation. + # Default: 'A match of the regular expression {regex} was found for rule {rule_name}: {description}' + # 'severity' - [Optional] The severity level to apply to this rule by default. + # Possible values: 1 or 'Critical', 2 or 'High', 3 or 'Moderate', 4 or 'Low', 5 or 'Info' + # Default: 3 + # 'tags' - [Optional] The string array of tag values to apply to this rule by default. + # Default: ['Recommended'] + # ---- [Example usage]: --------------------- + # engines: + # regex: + # custom_rules: + # "NoTodoComments": + # regex: /\/\/[ \t]*TODO/gi + # file_extensions: [".apex", ".cls", ".trigger"] + # description: "Prevents TODO comments from being in apex code." + # violation_message: "A comment with a TODO statement was found. Please remove TODO statements from your apex code." + # severity: "Info" + # tags: ["TechDebt"] + # ------------------------------------------- + custom_rules: {} + + # ====================================================================== + # CPD ENGINE CONFIGURATION + # To learn more about this configuration, visit: + # https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-cpd.html#cpd-configuration-reference + # ====================================================================== + cpd: + # Whether to turn off the 'cpd' engine so that it is not included when running Code Analyzer commands. + disable_engine: false + + # Indicates the specific 'java' command associated with the JRE or JDK to use for the 'cpd' engine. + # May be provided as the name of a command that exists on the path, or an absolute file path location. + # If unspecified, or specified as null, then an attempt will be made to automatically discover a 'java' command from your environment. + java_command: null # Last calculated by the config command as: + + # Specifies the list of file extensions to associate to each rule language. + # The rule(s) associated with a given language will run against all the files in your workspace containing one of + # the specified file extensions. Each file extension can only be associated to one language. If a specific language + # is not specified, then a set of default file extensions for that language will be used. + file_extensions: + apex: + - .cls + - .trigger + html: + - .html + - .htm + - .xhtml + - .xht + - .shtml + javascript: + - .js + - .cjs + - .mjs + typescript: + - .ts + visualforce: + - .page + - .component + xml: + - .xml + + # Specifies the minimum tokens threshold for each rule language. + # The minimum tokens threshold is the number of tokens required to be in a duplicate block of code in order to be + # reported as a violation. The concept of a token may be defined differently per language, but in general it is a + # distinct basic element of source code. For example, this could be language specific keywords, identifiers, + # operators, literals, and more. See https://docs.pmd-code.org/latest/pmd_userdocs_cpd.html to learn more. + # If a value for a language is unspecified, then the default value of 100 will be used for that language. + minimum_tokens: + apex: 100 + html: 100 + javascript: 100 + typescript: 100 + visualforce: 100 + xml: 100 + + # Indicates whether to ignore multiple copies of files of the same name and length. + skip_duplicate_files: false + + # ====================================================================== + # PMD ENGINE CONFIGURATION + # To learn more about this configuration, visit: + # https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-pmd.html#pmd-configuration-reference + # ====================================================================== + pmd: + # Whether to turn off the 'pmd' engine so that it is not included when running Code Analyzer commands. + disable_engine: false + + # Indicates the specific 'java' command associated with the JRE or JDK to use for the 'pmd' engine. + # May be provided as the name of a command that exists on the path, or an absolute file path location. + # If unspecified, or specified as null, then an attempt will be made to automatically discover a 'java' command from your environment. + java_command: null # Last calculated by the config command as: + + # Specifies the list of file extensions to associate to each rule language. + # The rule(s) associated with a given language will run against all the files in your workspace containing one of + # the specified file extensions. Each file extension can only be associated to one language. If a specific language + # is not specified, then a set of default file extensions for that language will be used. + file_extensions: + apex: + - .cls + - .trigger + html: + - .html + - .htm + - .xhtml + - .xht + - .shtml + javascript: + - .js + - .cjs + - .mjs + typescript: + - .ts + visualforce: + - .page + - .component + xml: + - .xml + + # List of jar files and/or folders to add the Java classpath when running PMD. + # Each entry may be given as an absolute path or a relative path to 'config_root'. + # This field is primarily used to supply custom Java based rule definitions to PMD. + # See https://pmd.github.io/pmd/pmd_userdocs_extending_writing_java_rules.html + java_classpath_entries: [] + + # List of xml ruleset files containing custom PMD rules to be made available for rule selection. + # Each ruleset must be an xml file that is either: + # - on disk (provided as an absolute path or a relative path to 'config_root') + # - or a relative resource found on the Java classpath. + # Not all custom rules can be fully defined within an xml ruleset file. For example, Java based rules may be defined in jar files. + # In these cases, you will need to also add your additional files to the Java classpath using the 'java_classpath_entries' field. + # See https://pmd.github.io/pmd/pmd_userdocs_making_rulesets.html to learn more about PMD rulesets. + custom_rulesets: [] + + # ====================================================================== + # FLOWTEST ENGINE CONFIGURATION + # To learn more about this configuration, visit: + # https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-flowtest.html#flowtest-configuration-reference + # ====================================================================== + flow: + # Whether to turn off the 'flowtest' engine so that it is not included when running Code Analyzer commands. + disable_engine: true + + # Indicates the specific Python command to use for the 'flowtest' engine. + # May be provided as the name of a command that exists on the path, or an absolute file path location. + # If unspecified, or specified as null, then an attempt will be made to automatically discover a Python command from your environment. + python_command: null +# ====================================================================== +# END OF CODE ANALYZER CONFIGURATION +# ====================================================================== diff --git a/config/linters/.eslintrc.json b/config/linters/.eslintrc.json deleted file mode 100644 index dab6404c3..000000000 --- a/config/linters/.eslintrc.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "parser": "@babel/eslint-parser", - "parserOptions": { - "requireConfigFile": false, - "babelOptions": { - "parserOpts": { - "plugins": ["classProperties", ["decorators", { "decoratorsBeforeExport": false }]] - } - } - }, - "ignorePatterns": ["**/*.html", "**/*.cmp", "**/*.cmp-meta.xml", "**/*.css", "**/*.test.js", "**/*js-meta.xml", "**/*.json"], - "plugins": ["@lwc/eslint-plugin-lwc"], - "extends": ["@salesforce/eslint-config-lwc/recommended"], - "rules": { - "@lwc/lwc/consistent-component-name": "error", - "@lwc/lwc/no-api-reassignments": "error", - "@lwc/lwc/no-async-operation": "error", - "@lwc/lwc/no-attributes-during-construction": "error", - "@lwc/lwc/no-deprecated": "error", - "@lwc/lwc/no-document-query": "error", - "@lwc/lwc/no-dupe-class-members": "warn", - "@lwc/lwc/no-inner-html": "error", - "@lwc/lwc/no-leading-uppercase-api-name": "error", - "@lwc/lwc/prefer-custom-event": "error", - "@lwc/lwc/valid-api": "error", - "array-callback-return": "error", - "consistent-return": "error", - "default-case": "error", - "eqeqeq": "error", - "guard-for-in": "error", - "handle-callback-err": "error", - "no-alert": "error", - "no-caller": "error", - "no-confusing-arrow": "error", - "no-console": "error", - "no-else-return": "error", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-floating-decimal": "error", - "no-implied-eval": "error", - "no-iterator": "error", - "no-label-var": "error", - "no-labels": "error", - "no-loop-func": "error", - "no-multi-str": "error", - "no-new-func": "error", - "no-new-object": "error", - "no-new-wrappers": "error", - "no-new": "error", - "no-octal-escape": "error", - "no-proto": "error", - "no-return-assign": "error", - "no-return-await": "error", - "no-script-url": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-shadow-restricted-names": "error", - "no-shadow": "error", - "no-throw-literal": "error", - "no-undef-init": "error", - "no-unused-expressions": "error", - "no-unused-vars": "error", - "no-use-before-define": "error", - "no-useless-computed-key": "error", - "no-useless-concat": "error", - "no-useless-constructor": "error", - "no-useless-escape": "error", - "no-useless-rename": "error", - "no-useless-return": "error", - "no-void": "error", - "no-with": "error", - "radix": "error", - "semi": "error", - "vars-on-top": "error", - "wrap-iife": "error" - } -} diff --git a/config/linters/pmd-ruleset.xml b/config/linters/pmd-ruleset.xml deleted file mode 100644 index 6cda10fa5..000000000 --- a/config/linters/pmd-ruleset.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - Nebula Logger custom PMD ruleset - - - - - - - - - - - - - - - - - - - diff --git a/config/scratch-orgs/experience-cloud/classes/ChangePasswordController.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/ChangePasswordController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/ChangePasswordController.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/ChangePasswordController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/ChangePasswordControllerTest.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/ChangePasswordControllerTest.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/ChangePasswordControllerTest.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/ChangePasswordControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/ForgotPasswordController.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/ForgotPasswordController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/ForgotPasswordController.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/ForgotPasswordController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/ForgotPasswordControllerTest.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/ForgotPasswordControllerTest.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/ForgotPasswordControllerTest.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/ForgotPasswordControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegController.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegController.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegControllerTest.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegControllerTest.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegControllerTest.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/MicrobatchSelfRegControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/MyProfilePageController.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/MyProfilePageController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/MyProfilePageController.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/MyProfilePageController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/MyProfilePageControllerTest.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/MyProfilePageControllerTest.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/MyProfilePageControllerTest.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/MyProfilePageControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/SiteLoginController.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/SiteLoginController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/SiteLoginController.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/SiteLoginController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/SiteLoginControllerTest.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/SiteLoginControllerTest.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/SiteLoginControllerTest.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/SiteLoginControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/SiteRegisterController.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/SiteRegisterController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/SiteRegisterController.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/SiteRegisterController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/classes/SiteRegisterControllerTest.cls-meta.xml b/config/scratch-orgs/experience-cloud/classes/SiteRegisterControllerTest.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/config/scratch-orgs/experience-cloud/classes/SiteRegisterControllerTest.cls-meta.xml +++ b/config/scratch-orgs/experience-cloud/classes/SiteRegisterControllerTest.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/config/scratch-orgs/experience-cloud/pages/BandwidthExceeded.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/BandwidthExceeded.page-meta.xml index b955a4621..4a2fa4057 100644 --- a/config/scratch-orgs/experience-cloud/pages/BandwidthExceeded.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/BandwidthExceeded.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página predeterminada de límite superado de Plataforma Lightning diff --git a/config/scratch-orgs/experience-cloud/pages/ChangePassword.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/ChangePassword.page-meta.xml index f757b6bb0..947a13ccd 100644 --- a/config/scratch-orgs/experience-cloud/pages/ChangePassword.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/ChangePassword.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página de cambio de contraseña predeterminada de Sitios de Salesforce diff --git a/config/scratch-orgs/experience-cloud/pages/CommunitiesLanding.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/CommunitiesLanding.page-meta.xml index d6536101b..2abc8041d 100644 --- a/config/scratch-orgs/experience-cloud/pages/CommunitiesLanding.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/CommunitiesLanding.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página de inicio de experiencias predeterminadas diff --git a/config/scratch-orgs/experience-cloud/pages/CommunitiesLogin.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/CommunitiesLogin.page-meta.xml index fe917deb7..0e07a003b 100644 --- a/config/scratch-orgs/experience-cloud/pages/CommunitiesLogin.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/CommunitiesLogin.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página de inicio de sesión para experiencias predeterminadas diff --git a/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfReg.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfReg.page-meta.xml index 9729d1427..02169a2da 100644 --- a/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfReg.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfReg.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página de inscripción automática de experiencias predeterminadas diff --git a/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfRegConfirm.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfRegConfirm.page-meta.xml index d482cff86..9d92450cd 100644 --- a/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfRegConfirm.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/CommunitiesSelfRegConfirm.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página de confirmación de registro de experiencias predeterminadas diff --git a/config/scratch-orgs/experience-cloud/pages/Exception.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/Exception.page-meta.xml index 2ba995838..ab7ac4eba 100644 --- a/config/scratch-orgs/experience-cloud/pages/Exception.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/Exception.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página predeterminada de Plataforma Lightning para errores post-autenticación diff --git a/config/scratch-orgs/experience-cloud/pages/FileNotFound.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/FileNotFound.page-meta.xml index 2ce923879..ec726128f 100644 --- a/config/scratch-orgs/experience-cloud/pages/FileNotFound.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/FileNotFound.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página predeterminada de página/datos no encontrados de Plataforma Lightning diff --git a/config/scratch-orgs/experience-cloud/pages/ForgotPasswordConfirm.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/ForgotPasswordConfirm.page-meta.xml index a8feb8c40..408fb9930 100644 --- a/config/scratch-orgs/experience-cloud/pages/ForgotPasswordConfirm.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/ForgotPasswordConfirm.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página Contraseña olvidada predeterminada de Sitios de Salesforce diff --git a/config/scratch-orgs/experience-cloud/pages/InMaintenance.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/InMaintenance.page-meta.xml index fb35eaec3..923982e95 100644 --- a/config/scratch-orgs/experience-cloud/pages/InMaintenance.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/InMaintenance.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página predeterminada de Plataforma Lightning en mantenimiento diff --git a/config/scratch-orgs/experience-cloud/pages/SiteRegisterConfirm.page-meta.xml b/config/scratch-orgs/experience-cloud/pages/SiteRegisterConfirm.page-meta.xml index afcc49304..90a584815 100644 --- a/config/scratch-orgs/experience-cloud/pages/SiteRegisterConfirm.page-meta.xml +++ b/config/scratch-orgs/experience-cloud/pages/SiteRegisterConfirm.page-meta.xml @@ -1,6 +1,6 @@ - 64.0 + 65.0 false false Página Confirmación de registro de usuario predeterminada de Sitios de Salesforce diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..3bad497dd --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,4 @@ +export default [ + { files: ['**/__tests__/*.js'], rules: { 'no-conditional-expect': 'off', '@lwc/lwc/no-unexpected-wire-adapter-usages': 'off' } }, + { ignores: ['.github/', '.husky/', '.sf/', '.sfdx/', '.vscode/', 'temp/', 'test-coverage/', '**/*.html', '**/*.css', '**/*js-meta.xml', '**/*.json'] } +]; diff --git a/jest.config.js b/jest.config.js index 1bcc6b282..9944c4465 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,6 +6,7 @@ module.exports = { '^lightning/empApi$': '/config/jest/mocks/lightning/empApi', '^lightning/navigation$': '/config/jest/mocks/lightning/navigation' }, + // coveragePathIgnorePatterns: ['/nebula-logger/recipes/'], // modulePathIgnorePatterns: ['recipes'], testPathIgnorePatterns: ['/temp/'] }; diff --git a/config/linters/lint-staged.config.js b/lint-staged.config.js similarity index 63% rename from config/linters/lint-staged.config.js rename to lint-staged.config.js index d6b01938a..922aeac4f 100644 --- a/config/linters/lint-staged.config.js +++ b/lint-staged.config.js @@ -4,12 +4,14 @@ module.exports = { }, '*.{apex,cls,cmp,component,css,html,js,json,md,page,trigger,yaml,yml}': filenames => filenames.map(filename => `prettier --write '${filename}'`), '**/lwc/**': filenames => { - return [`eslint --config ./config/linters/.eslintrc.json ${filenames.join(' ')} --fix`]; + return 'npm run scan:lwc'; + // return [`eslint --config ./config/linters/.eslintrc.json ${filenames.join(' ')} --fix`]; // FIXME this command should only run tests for the changed LWCs (instead of running tests for all LWCs) // return [`eslint --config ./config/linters/.eslintrc.json ${filenames.join(' ')} --fix`, `npm run test:lwc`]; }, - '*.{cls,trigger}': filenames => { - return filenames.map(filename => `sf scanner run --pmdconfig ./config/linters/pmd-ruleset.xml --engine pmd --severity-threshold 3 --target '${filename}'`); + '*.{cls,trigger}': _filenames => { + return 'npm run scan:apex'; + // return filenames.map(filename => `sf scanner run --pmdconfig ./config/linters/pmd-ruleset.xml --engine pmd --severity-threshold 3 --target '${filename}'`); // return [`npm run scan:apex`, `npm run docs:fix && git add ./docs/ && git commit --amend --no-edit`]; } }; diff --git a/nebula-logger/core.package.xml b/nebula-logger/core.package.xml index 9118c4950..4c1f03e69 100644 --- a/nebula-logger/core.package.xml +++ b/nebula-logger/core.package.xml @@ -963,5 +963,5 @@ Log__c.MassDelete WebLink - 64.0 + 65.0 diff --git a/nebula-logger/core/main/configuration/classes/LoggerBatchableContext.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerBatchableContext.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerBatchableContext.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerBatchableContext.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerCache.cls b/nebula-logger/core/main/configuration/classes/LoggerCache.cls index d0b133ea1..a0385478d 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerCache.cls +++ b/nebula-logger/core/main/configuration/classes/LoggerCache.cls @@ -169,7 +169,7 @@ public without sharing class LoggerCache { return this.platformCachePartition != null && this.platformCachePartition.isAvailable(); } - @SuppressWarnings('PMD.ExcessiveParameterList') + @SuppressWarnings('PMD.AvoidBooleanMethodParameters, PMD.ExcessiveParameterList') public virtual void put(String key, Object value, Integer cacheTtlSeconds, Cache.Visibility cacheVisiblity, Boolean isCacheImmutable) { this.platformCachePartition?.put(key, value, cacheTtlSeconds, cacheVisiblity, isCacheImmutable); } diff --git a/nebula-logger/core/main/configuration/classes/LoggerCache.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerCache.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerCache.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerCache.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerConfigurationSelector.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerConfigurationSelector.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerConfigurationSelector.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerConfigurationSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerFieldMapper.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerFieldMapper.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerFieldMapper.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerFieldMapper.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerParameter.cls b/nebula-logger/core/main/configuration/classes/LoggerParameter.cls index 4d53ec202..7cb2b3e50 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerParameter.cls +++ b/nebula-logger/core/main/configuration/classes/LoggerParameter.cls @@ -574,6 +574,7 @@ public class LoggerParameter { * @return The `Boolean` value configured in the matching instance of `LoggerParameter__mdt` * Returns the supplied `defaultValue` when no matching parameter is found, or the parameter value is null */ + @SuppressWarnings('PMD.AvoidBooleanMethodParameters') public static Boolean getBoolean(String parameterDeveloperName, Boolean defaultValue) { Boolean parameterValue = (Boolean) castParameterValue(parameterDeveloperName, Boolean.class); return parameterValue ?? defaultValue; diff --git a/nebula-logger/core/main/configuration/classes/LoggerParameter.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerParameter.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerParameter.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerParameter.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerPlugin.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerPlugin.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerPlugin.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerPlugin.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerScenarioRule.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerScenarioRule.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerScenarioRule.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerScenarioRule.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/configuration/classes/LoggerTriggerableContext.cls-meta.xml b/nebula-logger/core/main/configuration/classes/LoggerTriggerableContext.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/configuration/classes/LoggerTriggerableContext.cls-meta.xml +++ b/nebula-logger/core/main/configuration/classes/LoggerTriggerableContext.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogBatchPurgeController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogBatchPurgeController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogBatchPurgeController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogBatchPurgeController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls b/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls index 525bc8d49..d5b9b889c 100644 --- a/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls +++ b/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls @@ -11,7 +11,7 @@ @SuppressWarnings('PMD.AvoidGlobalModifier') global with sharing class LogBatchPurgeScheduler implements System.Schedulable { @TestVisible - private static final String SCHEDULER_SYSTEM_MESSAGE_TEMPLATE = 'Logger - Scheduling LogBatchPurgeScheduler job, schedulableContext=={0}'; + private static final String SCHEDULER_SYSTEM_MESSAGE_TEMPLATE = 'Nebula Logger - Scheduling LogBatchPurgeScheduler job, schedulableContext=={0}'; @TestVisible private Integer batchSize; diff --git a/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogBatchPurgeScheduler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls b/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls index 969b8554c..2a197e264 100644 --- a/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls +++ b/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls @@ -85,7 +85,7 @@ global with sharing class LogBatchPurger implements Database.Batchable, this.currentSObjectType = input.sobjectType; if (LoggerParameter.ENABLE_SYSTEM_MESSAGES) { - Logger.info('Logger - Starting LogBatchPurger job for SObject type: ' + this.currentSObjectType); + Logger.info('Nebula Logger - Starting LogBatchPurger job for SObject type: ' + this.currentSObjectType); } Logger.saveLog(); @@ -123,7 +123,7 @@ global with sharing class LogBatchPurger implements Database.Batchable, Logger.saveLog(); } catch (System.Exception apexException) { if (LoggerParameter.ENABLE_SYSTEM_MESSAGES) { - Logger.error('Logger - Error deleting logs', apexException); + Logger.error('Nebula Logger - Error deleting logs', apexException); } Logger.saveLog(); throw apexException; @@ -148,10 +148,14 @@ global with sharing class LogBatchPurger implements Database.Batchable, if (LoggerParameter.ENABLE_SYSTEM_MESSAGES) { Logger.info( - new LogMessage('Logger - Finished LogBatchPurger job for {0}, {1} total log records processed', this.currentSObjectType, this.totalProcessedRecords) + new LogMessage( + 'Nebula Logger - Finished LogBatchPurger job for {0}, {1} total log records processed', + this.currentSObjectType, + this.totalProcessedRecords + ) ); if (nextBatchJobId != null) { - Logger.info(new LogMessage('Logger - Starting a new instance of LogBatchPurger job, job ID is: {0}', nextBatchJobId)); + Logger.info(new LogMessage('Nebula Logger - Starting a new instance of LogBatchPurger job, job ID is: {0}', nextBatchJobId)); } Logger.saveLog(); } diff --git a/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogBatchPurger.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogEntryEventHandler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogEntryEventHandler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryEventHandler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogEntryEventHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogEntryEventStreamController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogEntryEventStreamController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryEventStreamController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogEntryEventStreamController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogEntryFieldSetPicklist.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogEntryFieldSetPicklist.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryFieldSetPicklist.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogEntryFieldSetPicklist.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls b/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls index 17c184c9a..026fb33a2 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls +++ b/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls @@ -263,7 +263,7 @@ public without sharing class LogEntryHandler extends LoggerSObjectHandler { } } - @SuppressWarnings('PMD.OperationWithLimitsInLoop') + @SuppressWarnings('PMD.NcssCount, PMD.OperationWithLimitsInLoop') private void setRecordNames() { if (LoggerParameter.QUERY_RELATED_RECORD_DATA == false) { return; diff --git a/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogEntryHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls b/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls index 7bd62d8f2..3bf202ca3 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls +++ b/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls @@ -85,10 +85,11 @@ public without sharing class LogEntryMetadataViewerController { } // TODO consider combining with LogEntryHandler.SourceMetadataSnippet (which could become a top-level class) - @SuppressWarnings('PMD.ApexDoc, PMD.PropertyNamingConventions') + @SuppressWarnings('PMD.ApexDoc, PMD.AvoidBooleanMethodParameters, PMD.PropertyNamingConventions') public class LogEntryMetadata { @AuraEnabled public String Code { get; set; } + @AuraEnabled public Boolean HasCodeBeenModified { get; set; } } diff --git a/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogEntryMetadataViewerController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogEntryTagHandler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogEntryTagHandler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogEntryTagHandler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogEntryTagHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogHandler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogHandler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogHandler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogManagementDataSelector.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogManagementDataSelector.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogManagementDataSelector.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogManagementDataSelector.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogMassDeleteExtension.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogMassDeleteExtension.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogMassDeleteExtension.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogMassDeleteExtension.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LogViewerController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LogViewerController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LogViewerController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LogViewerController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LoggerEmailSender.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LoggerEmailSender.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LoggerEmailSender.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LoggerEmailSender.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LoggerHomeHeaderController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LoggerHomeHeaderController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LoggerHomeHeaderController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LoggerHomeHeaderController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LoggerSObjectMetadata.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LoggerSObjectMetadata.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LoggerSObjectMetadata.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LoggerSObjectMetadata.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LoggerScenarioHandler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LoggerScenarioHandler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LoggerScenarioHandler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LoggerScenarioHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LoggerSettingsController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LoggerSettingsController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LoggerSettingsController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LoggerSettingsController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/LoggerTagHandler.cls-meta.xml b/nebula-logger/core/main/log-management/classes/LoggerTagHandler.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/LoggerTagHandler.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/LoggerTagHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls b/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls index 1120b1cfa..566f7c35d 100644 --- a/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls +++ b/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls @@ -150,6 +150,7 @@ public with sharing class RelatedLogEntriesController { /** * @description Inner, wrapper class that contains query result information after querying related log entries. */ + @SuppressWarnings('PMD.AvoidBooleanMethodParameters') public class LogEntryQueryResult { /** * @description Contains the fieldSet associated with this query. @@ -233,6 +234,7 @@ public with sharing class RelatedLogEntriesController { /** * @description An inner, wrapper class containing metadata information about an individual field. */ + @SuppressWarnings('PMD.AvoidBooleanMethodParameters') public class FieldMetadata { /** * @description A string containing the API name of the field, in particular the field path as it relates to the parent field set. diff --git a/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls-meta.xml b/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls-meta.xml index 1e7de9408..82775b98b 100644 --- a/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls-meta.xml +++ b/nebula-logger/core/main/log-management/classes/RelatedLogEntriesController.cls-meta.xml @@ -1,5 +1,5 @@ - 64.0 + 65.0 Active diff --git a/nebula-logger/core/main/log-management/dashboards/LogDashboards/LoggerAdmin.dashboard-meta.xml b/nebula-logger/core/main/log-management/dashboards/LogDashboards/LoggerAdmin.dashboard-meta.xml index 24fcb1fff..878626a51 100644 --- a/nebula-logger/core/main/log-management/dashboards/LogDashboards/LoggerAdmin.dashboard-meta.xml +++ b/nebula-logger/core/main/log-management/dashboards/LogDashboards/LoggerAdmin.dashboard-meta.xml @@ -108,6 +108,7 @@ false false RowLabelAscending + false true 0 @@ -155,6 +156,7 @@ true true RowLabelAscending + false false 0 @@ -200,6 +202,7 @@ false true RowLabelAscending + false false 9 @@ -244,6 +247,7 @@ 1 true + false @@ -289,6 +293,7 @@ false false RowLabelAscending + false true 21 @@ -321,6 +326,7 @@ false false RowLabelAscending + false true 21 @@ -331,8 +337,8 @@ SpecifiedUser true - test-klphaysttpzn@example.com - test-klphaysttpzn@example.com + test-fd77o9yu2dky@example.com + test-fd77o9yu2dky@example.com #000000 Logger Admin Dashboard #000000 diff --git a/nebula-logger/core/main/log-management/lwc/logBatchPurge/__tests__/logBatchPurge.test.js b/nebula-logger/core/main/log-management/lwc/logBatchPurge/__tests__/logBatchPurge.test.js index 29274d7f7..4f59b1864 100644 --- a/nebula-logger/core/main/log-management/lwc/logBatchPurge/__tests__/logBatchPurge.test.js +++ b/nebula-logger/core/main/log-management/lwc/logBatchPurge/__tests__/logBatchPurge.test.js @@ -170,20 +170,20 @@ describe('logBatchPurge lwc tests', () => { const metricsTable = logBatchPurgeElement.shadowRoot.querySelector('[data-id="metrics-table"]'); expect(metricsTable).toBeTruthy(); const logObjectTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log"]'); - expect(logObjectTextElement.innerHTML).toEqual('Log'); + expect(logObjectTextElement.textContent).toEqual('Log'); const logObjectEntryTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry"]'); - expect(logObjectEntryTextElement.innerHTML).toEqual('Log Entry'); + expect(logObjectEntryTextElement.textContent).toEqual('Log Entry'); const logObjectEntryTagTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry Tag"]'); - expect(logObjectEntryTagTextElement.innerHTML).toEqual('Log Entry Tag'); + expect(logObjectEntryTagTextElement.textContent).toEqual('Log Entry Tag'); for (var key in mockGetLogMetricsForToday) { const summary = mockGetLogMetricsForToday[key]; for (let i = 0; i < summary.length; i++) { const dataId = key + '-' + summary[i].LogPurgeAction__c; const labelElement = logBatchPurgeElement.shadowRoot.querySelector('[data-label="' + dataId + '"]'); - expect(labelElement.innerHTML).toEqual(summary[i].LogPurgeAction__c); + expect(labelElement.textContent).toEqual(summary[i].LogPurgeAction__c); const dataElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="' + dataId + '"]'); - expect(dataElement.innerHTML).toEqual(summary[i].expr0 + ''); + expect(dataElement.textContent).toEqual(summary[i].expr0 + ''); } } }); @@ -207,21 +207,21 @@ describe('logBatchPurge lwc tests', () => { expect(metricsTable).toBeTruthy(); const logObjectTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log"]'); - expect(logObjectTextElement.innerHTML).toEqual('Log'); + expect(logObjectTextElement.textContent).toEqual('Log'); const logObjectEntryTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry"]'); - expect(logObjectEntryTextElement.innerHTML).toEqual('Log Entry'); + expect(logObjectEntryTextElement.textContent).toEqual('Log Entry'); const logObjectEntryTagTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry Tag"]'); - expect(logObjectEntryTagTextElement.innerHTML).toEqual('Log Entry Tag'); + expect(logObjectEntryTagTextElement.textContent).toEqual('Log Entry Tag'); for (var key in mockGetLogMetricsForThisWeek) { const summary = mockGetLogMetricsForThisWeek[key]; for (let i = 0; i < summary.length; i++) { const dataId = key + '-' + summary[i].LogPurgeAction__c; const labelElement = logBatchPurgeElement.shadowRoot.querySelector('[data-label="' + dataId + '"]'); - expect(labelElement.innerHTML).toEqual(summary[i].LogPurgeAction__c); + expect(labelElement.textContent).toEqual(summary[i].LogPurgeAction__c); const dataElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="' + dataId + '"]'); - expect(dataElement.innerHTML).toEqual(summary[i].expr0 + ''); + expect(dataElement.textContent).toEqual(summary[i].expr0 + ''); } } }); @@ -246,21 +246,21 @@ describe('logBatchPurge lwc tests', () => { expect(metricsTable).toBeTruthy(); const logObjectTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log"]'); - expect(logObjectTextElement.innerHTML).toEqual('Log'); + expect(logObjectTextElement.textContent).toEqual('Log'); const logObjectEntryTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry"]'); - expect(logObjectEntryTextElement.innerHTML).toEqual('Log Entry'); + expect(logObjectEntryTextElement.textContent).toEqual('Log Entry'); const logObjectEntryTagTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry Tag"]'); - expect(logObjectEntryTagTextElement.innerHTML).toEqual('Log Entry Tag'); + expect(logObjectEntryTagTextElement.textContent).toEqual('Log Entry Tag'); for (var key in mockGetLogMetricsForThisMonth) { const summary = mockGetLogMetricsForThisMonth[key]; for (let i = 0; i < summary.length; i++) { const dataId = key + '-' + summary[i].LogPurgeAction__c; const labelElement = logBatchPurgeElement.shadowRoot.querySelector('[data-label="' + dataId + '"]'); - expect(labelElement.innerHTML).toEqual(summary[i].LogPurgeAction__c); + expect(labelElement.textContent).toEqual(summary[i].LogPurgeAction__c); const dataElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="' + dataId + '"]'); - expect(dataElement.innerHTML).toEqual(summary[i].expr0 + ''); + expect(dataElement.textContent).toEqual(summary[i].expr0 + ''); } } }); @@ -294,25 +294,25 @@ describe('logBatchPurge lwc tests', () => { expect(metricsTable).toBeTruthy(); const logObjectTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log"]'); - expect(logObjectTextElement.innerHTML).toEqual('Log'); + expect(logObjectTextElement.textContent).toEqual('Log'); const logObjectEntryTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry"]'); - expect(logObjectEntryTextElement.innerHTML).toEqual('Log Entry'); + expect(logObjectEntryTextElement.textContent).toEqual('Log Entry'); const logObjectEntryTagTextElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="Log Entry Tag"]'); - expect(logObjectEntryTagTextElement.innerHTML).toEqual('Log Entry Tag'); + expect(logObjectEntryTagTextElement.textContent).toEqual('Log Entry Tag'); const logObjects = ['Log__c', 'LogEntry__c', 'LogEntryTag__c']; for (const objectAPIName of logObjects) { for (const action of mockGetPurgeActionOptions) { const key = objectAPIName + '-' + action.value; const purgeActionLabelElement = logBatchPurgeElement.shadowRoot.querySelector('[data-label="' + key + '"]'); - expect(purgeActionLabelElement.innerHTML).toEqual(action.value); + expect(purgeActionLabelElement.textContent).toEqual(action.value); const purgeActionDataElement = logBatchPurgeElement.shadowRoot.querySelector('[data-id="' + key + '"]'); - expect(purgeActionDataElement.innerHTML).toEqual('0'); + expect(purgeActionDataElement.textContent).toEqual('0'); } } }); - it("disable the run purge button when user doesn't have delete permission on log object ", async () => { + it("disable the run purge button when user doesn't have delete permission on log object", async () => { const logBatchPurgeElement = await initializeElement(false); const metricsTable = logBatchPurgeElement.shadowRoot.querySelector('[data-id="metrics-table"]'); @@ -321,7 +321,7 @@ describe('logBatchPurge lwc tests', () => { expect(runBatchPurge.disabled).toEqual(true); }); - it('enable the run purge button when user has delete permission on log object ', async () => { + it('enable the run purge button when user has delete permission on log object', async () => { const logBatchPurgeElement = await initializeElement(true); const runBatchPurgeBtn = logBatchPurgeElement.shadowRoot.querySelector('lightning-button[data-id="run-purge-button"]'); @@ -337,7 +337,7 @@ describe('logBatchPurge lwc tests', () => { expect(purgeBatchJobsDatatable.data).toEqual(mockgetBatchPurgeJobRecords); }); - it('it show success toast when user confirms running the batch job', async () => { + it('shows success toast when user confirms running the batch job', async () => { LightningConfirm.open = jest.fn().mockResolvedValue(true); const logBatchPurgeElement = await initializeElement(true); logBatchPurgeElement.addEventListener(SHOW_TOAST_EVENT_NAME, SHOW_TOAST_EVENT_HANDLER); @@ -349,12 +349,12 @@ describe('logBatchPurge lwc tests', () => { await Promise.resolve('Call Apex controller method runBatchPurge()'); await Promise.resolve('Dispatch Toast event'); await Promise.resolve('Call Apex controller method loadPurgeBatchJobRecords()'); - expect(SHOW_TOAST_EVENT_HANDLER).toBeCalledTimes(1); + expect(SHOW_TOAST_EVENT_HANDLER).toHaveBeenCalledTimes(1); }); - it('it refresh the purge batch records when user clicks on the refresh button', async () => { + it('refreshes the purge batch records when user clicks on the refresh button', async () => { const logBatchPurgeElement = await initializeElement(true); - const refreshButton = document.querySelector('c-log-batch-purge').shadowRoot.querySelector('lightning-button-icon'); + const refreshButton = logBatchPurgeElement.shadowRoot.querySelector('lightning-button-icon'); refreshButton.click(); await Promise.resolve('resolves connectedCallback()'); await Promise.resolve('resolves getPurgeActionOptions()'); @@ -368,9 +368,8 @@ describe('logBatchPurge lwc tests', () => { expect(purgeBatchJobsDatatable.data).toEqual(mockgetBatchPurgeJobRecords); }); - it('it refresh the purge batch records for every 10 sec', async () => { + it('refreshes the purge batch records for every 10 seconds', async () => { const logBatchPurgeElement = await initializeElement(true); - const callBack = jest.fn(); expect(setTimeout).toHaveBeenCalledTimes(1); expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 10000); jest.runOnlyPendingTimers(); diff --git a/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.css b/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.css index 9e2a1909a..17bb758d0 100644 --- a/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.css +++ b/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.css @@ -5,7 +5,7 @@ } .datatable-header { - height: 32px; + height: var(--slds-g-sizing-9, 32px); } .datatable-container { diff --git a/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js b/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js index b7d2a6a82..493b0627b 100644 --- a/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js +++ b/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js @@ -201,7 +201,7 @@ export default class LogBatchPurge extends LightningElement { } pollPurgeBatchJobRecords() { - // eslint-disable-next-line @lwc/lwc/no-async-operation + // eslint-disable-next-line setTimeout(() => { this.loadPurgeBatchJobRecords(); this.loadMetricRecords(); @@ -211,7 +211,7 @@ export default class LogBatchPurge extends LightningElement { _handleError = error => { const errorMessage = error.body ? error.body.message : error.message; - /* eslint-disable-next-line no-console */ + // eslint-disable-next-line console.error(errorMessage, error); this.dispatchEvent( new ShowToastEvent({ diff --git a/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js-meta.xml b/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js-meta.xml index bb9b85a92..e78cfda82 100644 --- a/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js-meta.xml +++ b/nebula-logger/core/main/log-management/lwc/logBatchPurge/logBatchPurge.js-meta.xml @@ -1,10 +1,10 @@ - 64.0 + 65.0 true Nebula Logger: Log Batch Purge lightning__HomePage lightning__Tab - + \ No newline at end of file diff --git a/nebula-logger/core/main/log-management/lwc/logEntryEventStream/__tests__/logEntryEventStream.test.js b/nebula-logger/core/main/log-management/lwc/logEntryEventStream/__tests__/logEntryEventStream.test.js index b7dae0796..0b5f56a44 100644 --- a/nebula-logger/core/main/log-management/lwc/logEntryEventStream/__tests__/logEntryEventStream.test.js +++ b/nebula-logger/core/main/log-management/lwc/logEntryEventStream/__tests__/logEntryEventStream.test.js @@ -58,6 +58,7 @@ jest.mock( { virtual: true } ); +// eslint-disable-next-line const flushPromises = () => new Promise(process.nextTick); async function createStreamElement(namespace) { @@ -152,7 +153,7 @@ describe('LogEntryEventStream tests', () => { const warningElement = element.shadowRoot.querySelector('.disabled-warning-message'); expect(warningElement).toBeTruthy(); - expect(warningElement.querySelector('.slds-text-heading_medium').innerHTML).toEqual( + expect(warningElement.querySelector('.slds-text-heading_medium').textContent).toEqual( 'The log entry event stream has been disabled by an admin, using the record LoggerParameter__mdt.EnableLogEntryEventStream.' ); const buttonElements = element.shadowRoot.querySelectorAll('lightning-button, lightning-button-menu, lightning-button-stateful'); @@ -619,7 +620,7 @@ describe('LogEntryEventStream tests', () => { expect(consoleBlock.className).not.toContain('expanded'); }); - it('shows log entries in console when user selects console view ', async () => { + it('shows log entries in console when user selects console view', async () => { await Promise.all( namespaces.map(async namespace => { const element = await createStreamElement(namespace); @@ -639,7 +640,7 @@ describe('LogEntryEventStream tests', () => { ); }); - it('shows log entries in datatable when user select tabular view ', async () => { + it('shows log entries in datatable when user select tabular view', async () => { await Promise.all( namespaces.map(async namespace => { const element = await createStreamElement(namespace); diff --git a/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.css b/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.css index 13c7abace..3e0ac54d4 100644 --- a/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.css +++ b/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.css @@ -14,7 +14,7 @@ color: white; font-family: 'Lucida Console', 'Courier New', monospace; text-indent: -32px; - padding-left: 32px; + padding-left: var(--slds-g-spacing-6, 32px); height: 100%; overflow-x: hidden; overflow-y: scroll; @@ -25,30 +25,30 @@ .event-stream-entry { font-family: 'Lucida Console', 'Courier New', monospace; - margin: 4px 0; + margin: var(--slds-g-spacing-1, 4px) 0; } .timestamp { color: darkgrey; - margin-right: 8px; + margin-right: var(--slds-g-spacing-2, 8px); } .logged-by { color: #45c65a; - font-weight: bold; - margin-right: 8px; + font-weight: var(--slds-g-font-weight-bold, bold); + margin-right: var(--slds-g-spacing-2, 8px); } .origin { color: cornflowerblue; - margin-right: 8px; + margin-right: var(--slds-g-spacing-2, 8px); } .logging-level { background-color: dimgray; color: white; - margin-right: 8px; - padding: 4px; + margin-right: var(--slds-g-spacing-2, 8px); + padding: var(--slds-g-spacing-1, 4px); } .main-container { diff --git a/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.html b/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.html index 3cea2ce72..f7df88f6b 100644 --- a/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.html +++ b/nebula-logger/core/main/log-management/lwc/logEntryEventStream/logEntryEventStream.html @@ -204,7 +204,7 @@