From 9f73c9dd258c7aaea520561a2faba8d9f06cba9e Mon Sep 17 00:00:00 2001 From: ILIYANGERMANOV Date: Sat, 9 Sep 2023 17:33:57 +0300 Subject: [PATCH] Developer's experience (#2582) * Improve the "detektFormat" task * Fix the pre-push hook * Test the pre-push hook * Fix file formatting * Fix messed up files * Setup DangerJS * Attempt Danger to comment with the Detekt report * Try to comment APK file on the PR using Danger * Update apk.yml * Remove 5k node modules form .gitignore * WIP: Setup DangerJS + upgrade wrapper * Danger PR * Danger PR (fix Markdown #1) * Add danger comment for the "APK" workflow * Add Danger Detekt * Fix the Danger comment in Detekt * Update Danger * Fix Danger "Detekt" message * WIP Danger * DangerJS devexp v0.0.1? * Rerun CI * Improve Danger * Improve Danger comments * Improve Danger comments 2 * Improve Detekt messages * Danger messages * Update Detekt baseline * Add "What's changed?" tip * PR template improvement --- .danger/apk.md | 9 + .danger/danger_apk.ts | 43 + .danger/danger_detekt.ts | 32 + .danger/danger_pr.ts | 18 + .danger/detekt.md | 9 + .danger/pr.md | 14 + .github/PULL_REQUEST_TEMPLATE.md | 10 + .github/workflows/apk.yml | 8 + .github/workflows/danger_pr.yml | 20 + .github/workflows/detekt.yml | 9 + .gitignore | 5 +- .idea/appInsightsSettings.xml | 45 + .idea/kotlinc.xml | 6 + .../domain/action/transaction/TrnByIdAct.kt | 2 +- buildSrc/src/main/kotlin/ivy.lint.gradle.kts | 11 +- config/detekt/baseline.yml | 69 +- git/hooks/pre-push | 2 +- gradle/libs.versions.toml | 3 +- gradle/wrapper/gradle-wrapper.properties | 2 +- package-lock.json | 25 + package.json | 8 + scripts/init.sh | 6 +- yarn.lock | 973 ++++++++++++++++++ 23 files changed, 1280 insertions(+), 49 deletions(-) create mode 100644 .danger/apk.md create mode 100644 .danger/danger_apk.ts create mode 100644 .danger/danger_detekt.ts create mode 100644 .danger/danger_pr.ts create mode 100644 .danger/detekt.md create mode 100644 .danger/pr.md create mode 100644 .github/workflows/danger_pr.yml create mode 100644 .idea/appInsightsSettings.xml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 yarn.lock diff --git a/.danger/apk.md b/.danger/apk.md new file mode 100644 index 0000000000..cb46743f5a --- /dev/null +++ b/.danger/apk.md @@ -0,0 +1,9 @@ +**Great news! Your PR builds ✅** + +We've managed to generate a R8-optimized +_(minify, obfuscate and shrink resources)_ APK with your changes. 👌 + +It's way faster than the `debug` build type but sometimes it may crash. So please, **test** and enjoy your ligthning-fast **[Ivy-Wallet-Demo.apk]()**. ⚡ + +_⚠️ It's important to download and test this APK artifact from the **["APK" workflow]()** or the link above because it may introduce runtime crashes in production._ + diff --git a/.danger/danger_apk.ts b/.danger/danger_apk.ts new file mode 100644 index 0000000000..32e292c2d9 --- /dev/null +++ b/.danger/danger_apk.ts @@ -0,0 +1,43 @@ +import { danger, markdown, message } from "danger"; + +const runID = process.env.GITHUB_RUN_ID; +const repoFullName = danger.github.pr.base.repo.full_name; +const artifactURL = `https://github.com/${repoFullName}/actions/runs/${runID}`; + + +message(` +## APK ready ✅ + +We've managed to generate a R8-optimized _(minify, obfuscate, and shrink resources)_ APK with your changes. 👌 + +It's way faster than the \`debug\` build type but sometimes it may crash. So please, **test** and enjoy your lightning-fast **[Ivy-Wallet-Demo.apk](${artifactURL})**. ⚡ + +_**Note:** It's important to download and test this APK artifact from the **["APK" workflow](${artifactURL})** or the link above because it may introduce runtime crashes in production._` +); + +message(` +## Detekt check finished 🕵️‍♂️ + +Our code quality check completed. ✅ + +If it fails, open the **"Detekt" workflow** run on your PR, scroll down and download the attached \`detekt-report.html\`. Please, inspect it and try to fix the errors. 🔎 + +_**Pstt,** don't worry - sometimes Detekt gives false-positives. Your reviewer will guide you towards the best next steps. 👍_` +); + +markdown(` +## Congratulations! 🎉 You're almost there... + +Your PR is a fact and it'll be reviewed as soon as possible. The last step is to receive an approving review and merge it. ✅ + +**The final thing left to do is:** +- Upload a screen recording to prove that your code works. _(without it we can't merge your PR)_ + +**Code quality tips:** +- The keyword is **simplicity**. +- Can I do it in a more simple and straightforward way? +- Can I do it with less code? If so, delete what's unnecessary. +- Did I over-engineer it? + +_Thank you for your contribution! 👏_` +); diff --git a/.danger/danger_detekt.ts b/.danger/danger_detekt.ts new file mode 100644 index 0000000000..419fed4697 --- /dev/null +++ b/.danger/danger_detekt.ts @@ -0,0 +1,32 @@ +import { danger, markdown, message } from "danger"; + +const runID = process.env.GITHUB_RUN_ID; +const repoFullName = danger.github.pr.base.repo.full_name; +const actionRunUrl = `https://github.com/${repoFullName}/actions/runs/${runID}`; + +message(` +## Detekt check finished 🕵️‍♂️ + +Our code quality check completed. ✅ + +If it fails, open **[the "Detekt" workflow run](${actionRunUrl})** on your PR, scroll down and download the attached \`detekt-report.html\`. Please, inspect it and try to fix the errors. 🔎 + +_**Pstt,** don't worry - sometimes Detekt gives false-positives. Your reviewer will guide you towards the best next steps. 👍_` +); + +markdown(` +## Congratulations! 🎉 You're almost there... + +Your PR is a fact and it'll be reviewed as soon as possible. The last step is to receive an approving review and merge it. ✅ + +**The final thing left to do is:** +- Upload a screen recording to prove that your code works. _(without it we can't merge your PR)_ + +**Code quality tips:** +- The keyword is **simplicity**. +- Can I do it in a more simple and straightforward way? +- Can I do it with less code? If so, delete what's unnecessary. +- Did I over-engineer it? + +_Thank you for your contribution! 👏_` +) \ No newline at end of file diff --git a/.danger/danger_pr.ts b/.danger/danger_pr.ts new file mode 100644 index 0000000000..6ed0643b9d --- /dev/null +++ b/.danger/danger_pr.ts @@ -0,0 +1,18 @@ +import { markdown } from "danger" + +markdown(` +## Congratulations! 🎉 You're almost there... + +Your PR is a fact and it'll be reviewed as soon as possible. The last step is to receive an approving review and merge it. ✅ + +**The final thing left to do is:** +- Upload a screen recording to prove that your code works. _(without it we can't merge your PR)_ + +**Code quality tips:** +- The keyword is **simplicity**. +- Can I do it in a more simple and straightforward way? +- Can I do it with less code? If so, delete what's unnecessary. +- Did I over-engineer it? + +_Thank you for your contribution! 👏_` +) \ No newline at end of file diff --git a/.danger/detekt.md b/.danger/detekt.md new file mode 100644 index 0000000000..e5e374ddfe --- /dev/null +++ b/.danger/detekt.md @@ -0,0 +1,9 @@ +# Detekt check finished 🕵️‍♂️ + +Our code quality check completed. ✅ + +If it fails, [click here](), scroll down +and download the attached **detekt-report.html**. Please, inspect it and try to fix the errors. 🔎 + +_**Pstt,** don't worry - sometimes Detekt gives false-positives. +Your reviewer will guide towards the best next steps. 👍_ \ No newline at end of file diff --git a/.danger/pr.md b/.danger/pr.md new file mode 100644 index 0000000000..4baa1307c7 --- /dev/null +++ b/.danger/pr.md @@ -0,0 +1,14 @@ +**Congratualstions! 🎉 You're almost there...** + +Your PR is a fact and it'll be reviewed as soon as possible. The last step is to receive an approving review and merge it. ✅ + +**The final thing left to is:** +- Upload a screen recoding to prove that your code works. _(without it we can't merge your PR)_ + +**Code quality tips:** +- The keyword is **simplicity**. +- Can I do it in a more simple and straightforward way? +- Can I do it with less code? If so, delete what's unnecessary. +- Did I over-engineer it? + +_Thank you for your contributuon! 👏_ \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 95864850cc..508d959816 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,6 +6,16 @@ Please check if your pull request fulfills the following requirements: - [ ] I confirm that I've run the code locally and everything works as expected. ## What's changed? + + Describe with a few bullets **what's new:** - a - b diff --git a/.github/workflows/apk.yml b/.github/workflows/apk.yml index 535938bb39..1242feaa66 100644 --- a/.github/workflows/apk.yml +++ b/.github/workflows/apk.yml @@ -54,3 +54,11 @@ jobs: -F "reply_to_message_id=16118" \ -F "caption=$CAPTION" \ https://api.telegram.org/bot${{ secrets.BOTFATHER_TELEGRAM_BOT_TOKEN }}/sendDocument + + - name: Comment APK on the PR with Danger + if: github.event_name == 'pull_request' + uses: danger/danger-js@10.6.4 + with: + args: "--dangerfile .danger/danger_apk.ts" + env: + DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} diff --git a/.github/workflows/danger_pr.yml b/.github/workflows/danger_pr.yml new file mode 100644 index 0000000000..44523f29a4 --- /dev/null +++ b/.github/workflows/danger_pr.yml @@ -0,0 +1,20 @@ +name: "Danger (PR)" + +on: + pull_request: + +jobs: + danger_pr: + runs-on: ubuntu-latest + + steps: + - name: Checkout GIT + uses: actions/checkout@v4 + + - name: Comment on the PR + if: github.event_name == 'pull_request' + uses: danger/danger-js@10.6.4 + with: + args: "--dangerfile .danger/danger_pr.ts" + env: + DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} diff --git a/.github/workflows/detekt.yml b/.github/workflows/detekt.yml index 117ec26d56..c562fa407b 100644 --- a/.github/workflows/detekt.yml +++ b/.github/workflows/detekt.yml @@ -51,3 +51,12 @@ jobs: name: detekt-report.html path: build/reports/detekt/detekt.html #------------------------------------------------------------------ + + - name: Comment Detekt results on the PR with Danger + if: always() + uses: danger/danger-js@10.6.4 + with: + args: "--dangerfile .danger/danger_detekt.ts" + env: + GITHUB_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} + diff --git a/.gitignore b/.gitignore index 37c8ab3ef2..a376dce02a 100644 --- a/.gitignore +++ b/.gitignore @@ -84,4 +84,7 @@ lint/intermediates/ lint/generated/ lint/outputs/ lint/tmp/ -# lint/reports/ +lint/reports/ + +# JS +node_modules/* \ No newline at end of file diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml new file mode 100644 index 0000000000..daeac3df95 --- /dev/null +++ b/.idea/appInsightsSettings.xml @@ -0,0 +1,45 @@ + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index fdf8d994a6..ea476d9a65 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,5 +1,11 @@ + + + + diff --git a/app/src/main/java/com/ivy/wallet/domain/action/transaction/TrnByIdAct.kt b/app/src/main/java/com/ivy/wallet/domain/action/transaction/TrnByIdAct.kt index 4ab896a066..54d35a695f 100644 --- a/app/src/main/java/com/ivy/wallet/domain/action/transaction/TrnByIdAct.kt +++ b/app/src/main/java/com/ivy/wallet/domain/action/transaction/TrnByIdAct.kt @@ -4,7 +4,7 @@ import com.ivy.frp.action.FPAction import com.ivy.frp.then import com.ivy.wallet.domain.data.core.Transaction import com.ivy.wallet.io.persistence.dao.TransactionDao -import java.util.* +import java.util.UUID import javax.inject.Inject class TrnByIdAct @Inject constructor( diff --git a/buildSrc/src/main/kotlin/ivy.lint.gradle.kts b/buildSrc/src/main/kotlin/ivy.lint.gradle.kts index 17c6e152b1..f50d17cc8a 100644 --- a/buildSrc/src/main/kotlin/ivy.lint.gradle.kts +++ b/buildSrc/src/main/kotlin/ivy.lint.gradle.kts @@ -19,8 +19,15 @@ tasks.withType { // Disable task caching outputs.upToDateWhen { false } - val filesToCheck: String? = System.getProperty("detekt.filesToCheck") - setSource(filesToCheck?.split(",") ?: projectDir) + val filesToCheck: List? = System.getProperty("detekt.filesToCheck") + ?.split(",") + ?.filter { it.isNotBlank() } + if (filesToCheck != null) { + println("Formatting: $filesToCheck") + } else { + println("Formatting all files...") + } + setSource(filesToCheck ?: projectDir) reports { html.required.set(true) diff --git a/config/detekt/baseline.yml b/config/detekt/baseline.yml index 700ad42174..e19ec546c3 100644 --- a/config/detekt/baseline.yml +++ b/config/detekt/baseline.yml @@ -166,10 +166,10 @@ CompositionLocalAllowlist:IvyUI.kt$LocalIvyContext ConstructorParameterNaming:LoanTransactionsLogic.kt$LoanTransactionsLogic$val Loan: LTLoanMapper ConstructorParameterNaming:LoanTransactionsLogic.kt$LoanTransactionsLogic$val LoanRecord: LTLoanRecordMapper - ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _accountSuggestions: MutableLiveData<List<CreateAccountData>> - ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _accounts: MutableLiveData<List<AccountBalance>> - ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _categories: MutableLiveData<List<Category>> - ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _categorySuggestions: MutableLiveData<List<CreateCategoryData>> + ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _accountSuggestions: MutableLiveData<ImmutableList<CreateAccountData>> + ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _accounts: MutableLiveData<ImmutableList<AccountBalance>> + ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _categories: MutableLiveData<ImmutableList<Category>> + ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _categorySuggestions: MutableLiveData<ImmutableList<CreateCategoryData>> ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _opGoogleSignIn: MutableLiveData<OpResult<Unit>?> ConstructorParameterNaming:OnboardingRouter.kt$OnboardingRouter$private val _state: MutableLiveData<OnboardingState> ConstructorParameterNaming:ReorderModal.kt$Adapter$private val ItemContent: @Composable RowScope.(Int, Any) -> Unit @@ -187,7 +187,7 @@ CyclomaticComplexMethod:MainBottomBar.kt$@Composable fun BoxWithConstraintsScope.BottomBar( tab: MainTab, selectTab: (MainTab) -> Unit, onAddIncome: () -> Unit, onAddExpense: () -> Unit, onAddTransfer: () -> Unit, onAddPlannedPayment: () -> Unit, showAddAccountModal: () -> Unit, ) CyclomaticComplexMethod:ParseFields.kt$fun parseTransactionType( value: String, metadata: TrnTypeMetadata ): TransactionType? CyclomaticComplexMethod:PlansSheet.kt$@Composable private fun ColumnScope.PlanCard( plan: Plan, purchased: Boolean, selectedPlan: Plan?, monthlyPlan: Plan?, onClick: () -> Unit ) - CyclomaticComplexMethod:ReportViewModel.kt$ReportViewModel$private suspend fun filterTransactions( baseCurrency: String, accounts: List<Account>, filter: ReportFilter, ): List<Transaction> + CyclomaticComplexMethod:ReportViewModel.kt$ReportViewModel$private suspend fun filterTransactions( baseCurrency: String, accounts: List<Account>, filter: ReportFilter, ): ImmutableList<Transaction> CyclomaticComplexMethod:RootActivity.kt$RootActivity$@ExperimentalFoundationApi @ExperimentalAnimationApi @Composable private fun BoxWithConstraintsScope.Screens(screen: Screen?) CyclomaticComplexMethod:TransactionCard.kt$@Composable fun TransactionCard( baseData: AppBaseData, transaction: Transaction, onPayOrGet: (Transaction) -> Unit, onSkipTransaction: (Transaction) -> Unit = {}, onClick: (Transaction) -> Unit, ) CyclomaticComplexMethod:TransactionViewModel.kt$TransactionViewModel$override suspend fun handleEvent(event: TrnEvent): suspend () -> TrnState @@ -201,6 +201,8 @@ EmptyTryBlock:SettingsViewModel.kt$SettingsViewModel${ } ExplicitItLambdaParameter:TimeValue.kt${ index, it -> Value( x = index.toDouble(), y = it.value ) } ExplicitItLambdaParameter:TimeValue.kt${ index, it -> Value( x = index.toDouble(), y = it.value.toDouble() ) } + FinalNewline:DisableGitHubAutoBackupMigration.kt$com.ivy.wallet.migrations.impl.DisableGitHubAutoBackupMigration.kt + FinalNewline:UtilExt.kt$com.ivy.wallet.utils.UtilExt.kt FinalNewline:ivy.lint.gradle.kts$.ivy.lint.gradle.kts ForbiddenComment:AmountFormatting.kt$// TODO: Review, might cause trouble when integrating crypto ForbiddenComment:BudgetViewModel.kt$BudgetViewModel$// TODO: Re-work this by creating an FPAction for it @@ -231,8 +233,8 @@ FunctionNaming:DetektConfigurationAccessors.kt$internal fun <T : ModuleDependency> DependencyHandler.`detekt`( dependency: T, dependencyConfiguration: T.() -> Unit ): T FunctionNaming:DetektConfigurationAccessors.kt$internal fun ArtifactHandler.`detekt`( artifactNotation: Any, configureAction: ConfigurablePublishArtifact.() -> Unit ): PublishArtifact FunctionNaming:DetektConfigurationAccessors.kt$internal fun ArtifactHandler.`detekt`(artifactNotation: Any): PublishArtifact - FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detekt`(constraintNotation: Any): DependencyConstraint? - FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detekt`(constraintNotation: Any, block: DependencyConstraint.() -> Unit): DependencyConstraint? + FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detekt`(constraintNotation: Any): DependencyConstraint + FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detekt`(constraintNotation: Any, block: DependencyConstraint.() -> Unit): DependencyConstraint FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyHandler.`detekt`( dependencyNotation: Provider<*>, dependencyConfiguration: Action<ExternalModuleDependency> ): Unit FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyHandler.`detekt`( dependencyNotation: ProviderConvertible<*>, dependencyConfiguration: Action<ExternalModuleDependency> ): Unit FunctionNaming:DetektConfigurationAccessors.kt$internal fun DependencyHandler.`detekt`( dependencyNotation: String, dependencyConfiguration: Action<ExternalModuleDependency> ): ExternalModuleDependency @@ -241,8 +243,8 @@ FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun <T : ModuleDependency> DependencyHandler.`detektPlugins`( dependency: T, dependencyConfiguration: T.() -> Unit ): T FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun ArtifactHandler.`detektPlugins`( artifactNotation: Any, configureAction: ConfigurablePublishArtifact.() -> Unit ): PublishArtifact FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun ArtifactHandler.`detektPlugins`(artifactNotation: Any): PublishArtifact - FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detektPlugins`(constraintNotation: Any): DependencyConstraint? - FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detektPlugins`(constraintNotation: Any, block: DependencyConstraint.() -> Unit): DependencyConstraint? + FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detektPlugins`(constraintNotation: Any): DependencyConstraint + FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyConstraintHandler.`detektPlugins`(constraintNotation: Any, block: DependencyConstraint.() -> Unit): DependencyConstraint FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyHandler.`detektPlugins`( dependencyNotation: Provider<*>, dependencyConfiguration: Action<ExternalModuleDependency> ): Unit FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyHandler.`detektPlugins`( dependencyNotation: ProviderConvertible<*>, dependencyConfiguration: Action<ExternalModuleDependency> ): Unit FunctionNaming:DetektPluginsConfigurationAccessors.kt$internal fun DependencyHandler.`detektPlugins`( dependencyNotation: String, dependencyConfiguration: Action<ExternalModuleDependency> ): ExternalModuleDependency @@ -297,8 +299,14 @@ ImportOrdering:Accessorseessl0al0otcsbyqqruvoncpd.kt$import org.gradle.api.Action import org.gradle.api.Incubating import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurablePublishArtifact import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.Dependency import org.gradle.api.artifacts.DependencyConstraint import org.gradle.api.artifacts.ExternalModuleDependency import org.gradle.api.artifacts.ModuleDependency import org.gradle.api.artifacts.PublishArtifact import org.gradle.api.artifacts.dsl.ArtifactHandler import org.gradle.api.artifacts.dsl.DependencyConstraintHandler import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderConvertible import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.accessors.runtime.* ImportOrdering:DetektConfigurationAccessors.kt$import org.gradle.api.Action import org.gradle.api.Incubating import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurablePublishArtifact import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.Dependency import org.gradle.api.artifacts.DependencyConstraint import org.gradle.api.artifacts.ExternalModuleDependency import org.gradle.api.artifacts.ModuleDependency import org.gradle.api.artifacts.PublishArtifact import org.gradle.api.artifacts.dsl.ArtifactHandler import org.gradle.api.artifacts.dsl.DependencyConstraintHandler import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderConvertible import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.accessors.runtime.* ImportOrdering:DetektPluginsConfigurationAccessors.kt$import org.gradle.api.Action import org.gradle.api.Incubating import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurablePublishArtifact import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.Dependency import org.gradle.api.artifacts.DependencyConstraint import org.gradle.api.artifacts.ExternalModuleDependency import org.gradle.api.artifacts.ModuleDependency import org.gradle.api.artifacts.PublishArtifact import org.gradle.api.artifacts.dsl.ArtifactHandler import org.gradle.api.artifacts.dsl.DependencyConstraintHandler import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderConvertible import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.accessors.runtime.* + Indentation:CSVViewModel.kt$CSVViewModel$ + Indentation:CategoriesViewModel.kt$CategoriesViewModel$ + Indentation:CustomerJourneyLogic.kt$CustomerJourneyLogic.Companion$ + Indentation:HomeViewModel.kt$HomeViewModel$ Indentation:PlannedPaymentsLogic.kt$PlannedPaymentsLogic$ Indentation:ReportViewModel.kt$ReportViewModel$ + Indentation:SettingsScreen.kt$ + Indentation:UtilExt.kt$ LongMethod:AccountModal.kt$@Composable fun BoxWithConstraintsScope.AccountModal( modal: AccountModalData?, onCreateAccount: (CreateAccountData) -> Unit, onEditAccount: (Account, balance: Double) -> Unit, dismiss: () -> Unit, ) LongMethod:AccountsTab.kt$@Composable private fun AccountHeader( accountData: AccountData, currency: String, baseCurrency: String, contrastColor: Color, onBalanceClick: () -> Unit ) LongMethod:AccountsTab.kt$@Composable private fun BoxWithConstraintsScope.UI( state: AccountState = AccountState(), onEventHandler: (AccountsEvent) -> Unit = {} ) @@ -343,8 +351,6 @@ LongMethod:ExportCSVLogic.kt$ExportCSVLogic$private fun Transaction.toCSV( baseCurrency: String, accountMap: Map<UUID, Account>, categoryMap: Map<UUID, Category> ): String LongMethod:FilterOverlay.kt$@Composable fun BoxWithConstraintsScope.FilterOverlay( visible: Boolean, baseCurrency: String, accounts: List<Account>, categories: List<Category>, filter: ReportFilter?, onClose: () -> Unit, onSetFilter: (ReportFilter?) -> Unit ) LongMethod:FilterOverlay.kt$@Composable private fun KeywordsFilter( filter: ReportFilter?, nonNullFilter: (ReportFilter?) -> ReportFilter, onSetFilter: (ReportFilter) -> Unit, onShowIncludeKeywordModal: () -> Unit, onShowExcludeKeywordModal: () -> Unit, ) - LongMethod:GitHubBackupCard.kt$@OptIn(ExperimentalMaterial3Api::class) @Composable private fun BackupEnabled( viewModel: GitHubBackupViewModel, modifier: Modifier = Modifier, ) - LongMethod:GitHubBackupScreen.kt$@Composable private fun Content( modifier: Modifier = Modifier, ) LongMethod:HomeHeader.kt$@Composable private fun HeaderStickyRow( percentExpanded: Float, name: String, period: TimePeriod, currency: String, balance: Double, hideCurrentBalance: Boolean = false, onShowMonthModal: () -> Unit, onBalanceClick: () -> Unit, onHiddenBalanceClick: () -> Unit = {}, onSelectNextMonth: () -> Unit, onSelectPreviousMonth: () -> Unit, ) LongMethod:HomeMoreMenu.kt$@Composable fun BoxWithConstraintsScope.MoreMenu( expanded: Boolean, balance: Double, buffer: Double, currency: String, theme: Theme, setExpanded: (Boolean) -> Unit, onSwitchTheme: () -> Unit, onBufferClick: () -> Unit, onCurrencyClick: () -> Unit ) LongMethod:HomeMoreMenu.kt$@Composable private fun QuickAccess( theme: Theme, onSwitchTheme: () -> Unit ) @@ -399,16 +405,16 @@ LongMethod:PlannedPaymentsLazyColumn.kt$private fun LazyListScope.plannedPaymentItems( nav: Navigation, currency: String, categories: List<Category>, accounts: List<Account>, listState: LazyListState, oneTime: List<PlannedPaymentRule>, oneTimeIncome: Double, oneTimeExpenses: Double, oneTimeExpanded: Boolean, setOneTimeExpanded: (Boolean) -> Unit, recurring: List<PlannedPaymentRule>, recurringIncome: Double, recurringExpenses: Double, recurringExpanded: Boolean, setRecurringExpanded: (Boolean) -> Unit ) LongMethod:PlansSheet.kt$@Composable fun BoxWithConstraintsScope.PlansSheet( plans: List<Plan>, purchasedSkus: List<String>, onPlansSheetHeightChanged: (Int) -> Unit = {}, onPlanSelected: (Plan?) -> Unit, onBuy: (Plan) -> Unit ) LongMethod:PlansSheet.kt$@Composable private fun ColumnScope.PlanCard( plan: Plan, purchased: Boolean, selectedPlan: Plan?, monthlyPlan: Plan?, onClick: () -> Unit ) - LongMethod:PreloadDataLogic.kt$PreloadDataLogic$fun categorySuggestions(): List<CreateCategoryData> + LongMethod:PreloadDataLogic.kt$PreloadDataLogic$fun categorySuggestions(): ImmutableList<CreateCategoryData> LongMethod:RecurringRuleModal.kt$@Composable fun BoxWithConstraintsScope.RecurringRuleModal( modal: RecurringRuleModalData?, dismiss: () -> Unit, onRuleChanged: (LocalDateTime, oneTime: Boolean, Int?, IntervalType?) -> Unit, ) LongMethod:ReorderModal.kt$@Composable fun <T : Reorderable> BoxScope.ReorderModal( visible: Boolean, id: UUID = UUID.randomUUID(), TitleContent: @Composable ColumnScope.() -> Unit = { Text( modifier = Modifier.padding(start = 32.dp), text = stringResource(R.string.reorder), style = UI.typo.b1.style( UI.colors.pureInverse, FontWeight.ExtraBold ) ) }, initialItems: List<Any>, dismiss: () -> Unit, onUpdateItemOrderNum: ( itemsInNewOrder: List<Any>, item: T, newOrderNum: Double ) -> Unit = { _, _, _ -> }, onReordered: ((List<Any>) -> Unit)? = null, ItemContent: @Composable RowScope.(Int, Any) -> Unit ) LongMethod:ReportScreen.kt$@ExperimentalFoundationApi @Composable private fun BoxWithConstraintsScope.UI( state: ReportScreenState = ReportScreenState(), onEventHandler: (ReportScreenEvent) -> Unit = {} ) - LongMethod:ReportViewModel.kt$ReportViewModel$private suspend fun filterTransactions( baseCurrency: String, accounts: List<Account>, filter: ReportFilter, ): List<Transaction> + LongMethod:ReportViewModel.kt$ReportViewModel$private suspend fun filterTransactions( baseCurrency: String, accounts: List<Account>, filter: ReportFilter, ): ImmutableList<Transaction> LongMethod:ReportViewModel.kt$ReportViewModel$private suspend fun setFilter(filter: ReportFilter?) LongMethod:SearchScreen.kt$@Composable private fun UI( transactions: List<TransactionHistoryItem>, baseCurrency: String, categories: List<Category>, accounts: List<Account>, onSearch: (String) -> Unit = {} ) LongMethod:ServerStopScreen.kt$@Composable private fun Content( onBackup: () -> Unit ) LongMethod:SettingsScreen.kt$@Composable private fun AccountCardUser( localName: String?, user: User, opSync: OpResult<Boolean>?, onSync: () -> Unit, ) - LongMethod:SettingsScreen.kt$@ExperimentalFoundationApi @Composable private fun BoxWithConstraintsScope.UI( user: User?, currencyCode: String, opSync: OpResult<Boolean>?, lockApp: Boolean, showNotifications: Boolean = true, hideCurrentBalance: Boolean = false, progressState: Boolean = false, treatTransfersAsIncomeExpense: Boolean = false, nameLocalAccount: String?, startDateOfMonth: Int = 1, onSetCurrency: (String) -> Unit, onSetName: (String) -> Unit = {}, onSync: () -> Unit, onLogout: () -> Unit, onLogin: () -> Unit, onBackupData: () -> Unit = {}, onExportToCSV: () -> Unit = {}, onSetLockApp: (Boolean) -> Unit = {}, onSetShowNotifications: (Boolean) -> Unit = {}, onSetTreatTransfersAsIncExp: (Boolean) -> Unit = {}, onSetHideCurrentBalance: (Boolean) -> Unit = {}, onSetStartDateOfMonth: (Int) -> Unit = {}, onDeleteAllUserData: () -> Unit = {}, onDeleteCloudUserData: () -> Unit = {}, ) + LongMethod:SettingsScreen.kt$@ExperimentalFoundationApi @Composable private fun BoxWithConstraintsScope.UI( user: User?, currencyCode: String, opSync: OpResult<Boolean>?, theme: Theme, onSwitchTheme: () -> Unit, lockApp: Boolean, showNotifications: Boolean = true, hideCurrentBalance: Boolean = false, progressState: Boolean = false, treatTransfersAsIncomeExpense: Boolean = false, nameLocalAccount: String?, startDateOfMonth: Int = 1, onSetCurrency: (String) -> Unit, onSetName: (String) -> Unit = {}, onSync: () -> Unit, onLogout: () -> Unit, onLogin: () -> Unit, onBackupData: () -> Unit = {}, onExportToCSV: () -> Unit = {}, onSetLockApp: (Boolean) -> Unit = {}, onSetShowNotifications: (Boolean) -> Unit = {}, onSetTreatTransfersAsIncExp: (Boolean) -> Unit = {}, onSetHideCurrentBalance: (Boolean) -> Unit = {}, onSetStartDateOfMonth: (Int) -> Unit = {}, onDeleteAllUserData: () -> Unit = {}, onDeleteCloudUserData: () -> Unit = {}, ) LongMethod:TransactionCard.kt$@Composable fun TransactionCard( baseData: AppBaseData, transaction: Transaction, onPayOrGet: (Transaction) -> Unit, onSkipTransaction: (Transaction) -> Unit = {}, onClick: (Transaction) -> Unit, ) LongMethod:TransactionCard.kt$@Composable fun TypeAmountCurrency( transactionType: TransactionType, dueDate: LocalDateTime?, currency: String, amount: Double ) LongMethod:ViewPager.kt$@Composable fun Pager( state: PagerState, modifier: Modifier = Modifier, pageContent: @Composable PagerScope.() -> Unit ) @@ -468,7 +474,7 @@ LongParameterList:MainBottomBar.kt$( buttonsShownPercent: Float, fabStartX: Float, fabStartY: Float, buttonRightX: Float, sideButtonsY: Float, clickAreaWidth: Int, onAddTransfer: () -> Unit ) LongParameterList:MainBottomBar.kt$( buttonsShownPercent: Float, fabStartX: Float, fabStartY: Float, onAddIncome: () -> Unit, onAddExpense: () -> Unit, onAddTransfer: () -> Unit, onAddPlannedPayment: () -> Unit, ) LongParameterList:MainBottomBar.kt$( tab: MainTab, selectTab: (MainTab) -> Unit, onAddIncome: () -> Unit, onAddExpense: () -> Unit, onAddTransfer: () -> Unit, onAddPlannedPayment: () -> Unit, showAddAccountModal: () -> Unit, ) - LongParameterList:OnboardingRouter.kt$OnboardingRouter$( private val _opGoogleSignIn: MutableLiveData<OpResult<Unit>?>, private val _state: MutableLiveData<OnboardingState>, private val _accounts: MutableLiveData<List<AccountBalance>>, private val _accountSuggestions: MutableLiveData<List<CreateAccountData>>, private val _categories: MutableLiveData<List<Category>>, private val _categorySuggestions: MutableLiveData<List<CreateCategoryData>>, private val nav: Navigation, private val accountDao: AccountDao, private val sharedPrefs: SharedPrefs, private val transactionReminderLogic: TransactionReminderLogic, private val preloadDataLogic: PreloadDataLogic, private val categoryDao: CategoryDao, private val logoutLogic: LogoutLogic, private val syncExchangeRatesAct: SyncExchangeRatesAct, ) + LongParameterList:OnboardingRouter.kt$OnboardingRouter$( private val _opGoogleSignIn: MutableLiveData<OpResult<Unit>?>, private val _state: MutableLiveData<OnboardingState>, private val _accounts: MutableLiveData<ImmutableList<AccountBalance>>, private val _accountSuggestions: MutableLiveData<ImmutableList<CreateAccountData>>, private val _categories: MutableLiveData<ImmutableList<Category>>, private val _categorySuggestions: MutableLiveData<ImmutableList<CreateCategoryData>>, private val nav: Navigation, private val accountDao: AccountDao, private val sharedPrefs: SharedPrefs, private val transactionReminderLogic: TransactionReminderLogic, private val preloadDataLogic: PreloadDataLogic, private val categoryDao: CategoryDao, private val logoutLogic: LogoutLogic, private val syncExchangeRatesAct: SyncExchangeRatesAct, ) LongParameterList:OnboardingScreen.kt$( onboardingState: OnboardingState, currency: IvyCurrency, opGoogleSignIn: OpResult<Unit>?, accountSuggestions: List<CreateAccountData>, accounts: List<AccountBalance>, categorySuggestions: List<CreateCategoryData>, categories: List<Category>, onLoginWithGoogle: () -> Unit = {}, onSkip: () -> Unit = {}, onStartImport: () -> Unit = {}, onStartFresh: () -> Unit = {}, onSetCurrency: (IvyCurrency) -> Unit = {}, onCreateAccount: (CreateAccountData) -> Unit = { }, onEditAccount: (Account, Double) -> Unit = { _, _ -> }, onAddAccountsDone: () -> Unit = {}, onAddAccountsSkip: () -> Unit = {}, onCreateCategory: (CreateCategoryData) -> Unit = {}, onEditCategory: (Category) -> Unit = {}, onAddCategoryDone: () -> Unit = {}, onAddCategorySkip: () -> Unit = {}, ) LongParameterList:OnboardingSplashLogin.kt$( @DrawableRes icon: Int, text: String, textColor: Color, backgroundGradient: Gradient, hasShadow: Boolean, onClick: () -> Unit ) LongParameterList:OnboardingViewModel.kt$OnboardingViewModel$( private val ivyContext: IvyWalletCtx, private val nav: Navigation, private val accountDao: AccountDao, private val settingsDao: SettingsDao, private val accountLogic: WalletAccountLogic, private val categoryCreator: CategoryCreator, private val categoryDao: CategoryDao, private val accountCreator: AccountCreator, private val accountsAct: AccountsAct, private val categoriesAct: CategoriesAct, private val syncExchangeRatesAct: SyncExchangeRatesAct, // Only OnboardingRouter stuff sharedPrefs: SharedPrefs, transactionReminderLogic: TransactionReminderLogic, preloadDataLogic: PreloadDataLogic, exchangeRatesLogic: ExchangeRatesLogic, logoutLogic: LogoutLogic, ) @@ -476,16 +482,16 @@ LongParameterList:PaywallScreen.kt$( plans: List<Plan>, purchasedSkus: List<String>, paywallReason: PaywallReason?, accounts: List<Account>, categories: List<Category>, budgets: List<Budget>, loans: List<Loan>, onPlanSelected: (Plan?) -> Unit = {}, onBuy: (Plan) -> Unit, ) LongParameterList:PieChartAct.kt$PieChartAct$( showAccountTransfersCategory: Boolean, type: TransactionType, accountTransfersCategory: Category, accountIdFilterSet: Set<UUID>, @SideEffect transactions: suspend () -> List<Transaction>, @SideEffect incomeExpenseTransfer: suspend () -> IncomeExpenseTransferPair, @SideEffect categoryAmounts: suspend () -> List<CategoryAmount> ) LongParameterList:PieChartStatisticScreen.kt$( transactionType: TransactionType, period: TimePeriod, percentExpanded: Float, currency: String, amount: Double, showCloseButtonOnly: Boolean = false, onShowMonthModal: () -> Unit, onSelectNextMonth: () -> Unit, onSelectPreviousMonth: () -> Unit, onClose: () -> Unit, onAdd: (TransactionType) -> Unit, ) - LongParameterList:PieChartStatisticViewModel.kt$PieChartStatisticViewModel$( period: TimePeriod, type: TransactionType, accountIdFilterList: List<UUID>, filterExclude: Boolean, transactions: List<Transaction>, treatTransfersAsIncomeExpense: Boolean ) + LongParameterList:PieChartStatisticViewModel.kt$PieChartStatisticViewModel$( period: TimePeriod, type: TransactionType, accountIdFilterList: ImmutableList<UUID>, filterExclude: Boolean, transactions: ImmutableList<Transaction>, treatTransfersAsIncomeExpense: Boolean ) LongParameterList:PlannedPaymentsLazyColumn.kt$( Header: @Composable () -> Unit, currency: String, categories: List<Category>, accounts: List<Account>, listState: LazyListState = rememberLazyListState(), oneTime: List<PlannedPaymentRule>, oneTimeIncome: Double, oneTimeExpenses: Double, recurring: List<PlannedPaymentRule>, recurringIncome: Double, recurringExpenses: Double, ) LongParameterList:PlannedPaymentsLazyColumn.kt$( nav: Navigation, currency: String, categories: List<Category>, accounts: List<Account>, listState: LazyListState, oneTime: List<PlannedPaymentRule>, oneTimeIncome: Double, oneTimeExpenses: Double, oneTimeExpanded: Boolean, setOneTimeExpanded: (Boolean) -> Unit, recurring: List<PlannedPaymentRule>, recurringIncome: Double, recurringExpenses: Double, recurringExpanded: Boolean, setRecurringExpanded: (Boolean) -> Unit ) LongParameterList:PlannedPaymentsScreen.kt$( currency: String, categories: List<Category>, accounts: List<Account>, oneTime: List<PlannedPaymentRule>, oneTimeIncome: Double, oneTimeExpenses: Double, recurring: List<PlannedPaymentRule>, recurringIncome: Double, recurringExpenses: Double ) LongParameterList:RecurringRuleModal.kt$( startDate: LocalDateTime, intervalN: Int, intervalType: IntervalType, modalScrollState: ScrollState, onSetStartDate: (LocalDateTime) -> Unit, onSetIntervalN: (Int) -> Unit, onSetIntervalType: (IntervalType) -> Unit ) LongParameterList:ReportViewModel.kt$ReportViewModel$( private val plannedPaymentsLogic: PlannedPaymentsLogic, private val settingsDao: SettingsDao, private val transactionDao: TransactionDao, private val ivyContext: IvyWalletCtx, private val nav: Navigation, private val exportCSVLogic: ExportCSVLogic, private val exchangeAct: ExchangeAct, private val accountsAct: AccountsAct, private val categoriesAct: CategoriesAct, private val trnsWithDateDivsAct: TrnsWithDateDivsAct, private val calcTrnsIncomeExpenseAct: CalcTrnsIncomeExpenseAct, private val baseCurrencyAct: BaseCurrencyAct ) LongParameterList:RootViewModel.kt$RootViewModel$( private val ivyContext: IvyWalletCtx, private val nav: Navigation, private val settingsDao: SettingsDao, private val sharedPrefs: SharedPrefs, private val ivyBilling: IvyBilling, private val paywallLogic: PaywallLogic, private val transactionReminderLogic: TransactionReminderLogic, private val migrationsManager: MigrationsManager, ) - LongParameterList:SettingsScreen.kt$( user: User?, currencyCode: String, opSync: OpResult<Boolean>?, lockApp: Boolean, showNotifications: Boolean = true, hideCurrentBalance: Boolean = false, progressState: Boolean = false, treatTransfersAsIncomeExpense: Boolean = false, nameLocalAccount: String?, startDateOfMonth: Int = 1, onSetCurrency: (String) -> Unit, onSetName: (String) -> Unit = {}, onSync: () -> Unit, onLogout: () -> Unit, onLogin: () -> Unit, onBackupData: () -> Unit = {}, onExportToCSV: () -> Unit = {}, onSetLockApp: (Boolean) -> Unit = {}, onSetShowNotifications: (Boolean) -> Unit = {}, onSetTreatTransfersAsIncExp: (Boolean) -> Unit = {}, onSetHideCurrentBalance: (Boolean) -> Unit = {}, onSetStartDateOfMonth: (Int) -> Unit = {}, onDeleteAllUserData: () -> Unit = {}, onDeleteCloudUserData: () -> Unit = {}, ) + LongParameterList:SettingsScreen.kt$( user: User?, currencyCode: String, opSync: OpResult<Boolean>?, theme: Theme, onSwitchTheme: () -> Unit, lockApp: Boolean, showNotifications: Boolean = true, hideCurrentBalance: Boolean = false, progressState: Boolean = false, treatTransfersAsIncomeExpense: Boolean = false, nameLocalAccount: String?, startDateOfMonth: Int = 1, onSetCurrency: (String) -> Unit, onSetName: (String) -> Unit = {}, onSync: () -> Unit, onLogout: () -> Unit, onLogin: () -> Unit, onBackupData: () -> Unit = {}, onExportToCSV: () -> Unit = {}, onSetLockApp: (Boolean) -> Unit = {}, onSetShowNotifications: (Boolean) -> Unit = {}, onSetTreatTransfersAsIncExp: (Boolean) -> Unit = {}, onSetHideCurrentBalance: (Boolean) -> Unit = {}, onSetStartDateOfMonth: (Int) -> Unit = {}, onDeleteAllUserData: () -> Unit = {}, onDeleteCloudUserData: () -> Unit = {}, ) LongParameterList:SettingsScreen.kt$( user: User?, opSync: OpResult<Boolean>?, nameLocalAccount: String?, onSync: () -> Unit, onLogout: () -> Unit, onLogin: () -> Unit, onCardClick: () -> Unit ) - LongParameterList:SettingsViewModel.kt$SettingsViewModel$( private val settingsDao: SettingsDao, private val userDao: UserDao, private val ivyContext: IvyWalletCtx, private val exportCSVLogic: ExportCSVLogic, private val logoutLogic: LogoutLogic, private val sharedPrefs: SharedPrefs, private val backupLogic: BackupLogic, private val startDayOfMonthAct: StartDayOfMonthAct, private val updateStartDayOfMonthAct: UpdateStartDayOfMonthAct, private val nav: Navigation, private val syncExchangeRatesAct: SyncExchangeRatesAct, ) + LongParameterList:SettingsViewModel.kt$SettingsViewModel$( private val settingsDao: SettingsDao, private val userDao: UserDao, private val ivyContext: IvyWalletCtx, private val exportCSVLogic: ExportCSVLogic, private val logoutLogic: LogoutLogic, private val sharedPrefs: SharedPrefs, private val backupLogic: BackupLogic, private val startDayOfMonthAct: StartDayOfMonthAct, private val updateStartDayOfMonthAct: UpdateStartDayOfMonthAct, private val nav: Navigation, private val syncExchangeRatesAct: SyncExchangeRatesAct, private val settingsAct: SettingsAct, private val updateSettingsAct: UpdateSettingsAct, ) LongParameterList:Title.kt$( type: TransactionType, titleFocus: FocusRequester, initialTransactionId: UUID?, titleTextFieldValue: TextFieldValue, setTitleTextFieldValue: (TextFieldValue) -> Unit, suggestions: Set<String>, scrollState: ScrollState? = null, onTitleChanged: (String?) -> Unit, onNext: () -> Unit, ) LongParameterList:TransactionSectionDivider.kt$( expanded: Boolean, title: String, titleColor: Color, baseCurrency: String, income: Double, expenses: Double, showIncomeExpenseRow: Boolean = true, setExpanded: (Boolean) -> Unit ) LongParameterList:Transactions.kt$( baseData: AppBaseData, overdue: DueSection?, onPayOrGet: (Transaction) -> Unit, onSkipTransaction: (Transaction) -> Unit, onSkipAllTransactions: (List<Transaction>) -> Unit, setExpanded: (Boolean) -> Unit ) @@ -555,12 +561,6 @@ MagicNumber:FilterOverlay.kt$100f MagicNumber:FilterOverlay.kt$200f MagicNumber:FromToTimeRange.kt$FromToTimeRange$30 - MagicNumber:GitHubAutoBackupManager.kt$GitHubAutoBackupManager$30 - MagicNumber:GitHubAutoBackupManager.kt$GitHubAutoBackupManager$6 - MagicNumber:GitHubAutoBackupManager.kt$GitHubAutoBackupManager$60 - MagicNumber:GitHubBackupViewModel.kt$GitHubBackupViewModel$2_000L - MagicNumber:GitHubClient.kt$GitHubClient$403 - MagicNumber:GitHubClient.kt$GitHubClient$404 MagicNumber:HomeHeader.kt$0.5f MagicNumber:HomeMoreMenu.kt$0.01f MagicNumber:HomeMoreMenu.kt$1.5f @@ -726,6 +726,7 @@ MaxLineLength:Accessorsbtc8iwv8u9b0f38ikfmodj8ns.kt$(this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("reporting") as org.gradle.api.reporting.ReportingExtension MaxLineLength:Accessorseessl0al0otcsbyqqruvoncpd.kt$(this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("ext") as org.gradle.api.plugins.ExtraPropertiesExtension MaxLineLength:Accessorseessl0al0otcsbyqqruvoncpd.kt$fun + MaxLineLength:CustomerJourneyLogic.kt$CustomerJourneyLogic.Companion$"If you haven't yet, feel free join our invite-only Ivy Telegram Community and make our app better :)" MaxLineLength:CustomerJourneyLogic.kt$CustomerJourneyLogic.Companion$description = "It looks like that you're enjoying Ivy Wallet! Feel free join our invite-only Ivy Telegram Community and make our app better :)" MaxLineLength:DetektConfigurationAccessors.kt$fun MaxLineLength:DetektPluginsConfigurationAccessors.kt$fun @@ -735,7 +736,6 @@ MaxLineLength:EditTransactionViewModel.kt$EditTransactionViewModel$"You are trying to change the account associated with the loan record to an account of different currency" MaxLineLength:EditTransactionViewModel.kt$EditTransactionViewModel$?: MaxLineLength:FortuneCitySteps.kt$articleUrl = "https://fourdesire.helpshift.com/hc/en/5-fortune-city/faq/242-can-i-export-my-fortune-city-records/" - MaxLineLength:GitHubBackupScreen.kt$"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token" MaxLineLength:ItemStatisticViewModel.kt$ItemStatisticViewModel$// unspecifiedCategory==false is explicitly checked to accommodate for a temp AccountTransfers Category during Reports Screen MaxLineLength:IvyBilling.kt$IvyBilling$"Acknowledge purchase result, code=${acknowledgeResult.responseCode}: ${acknowledgeResult.debugMessage}" MaxLineLength:IvyChecklistTextField.kt$"Cur habitio favere? Sunt navises promissio grandis, primus accolaes. Yes, there is chaos, it contacts with light." @@ -841,7 +841,6 @@ MaximumLineLength:DonateScreen.kt$ MaximumLineLength:EditTransactionViewModel.kt$EditTransactionViewModel$ MaximumLineLength:FortuneCitySteps.kt$ - MaximumLineLength:GitHubBackupScreen.kt$ MaximumLineLength:IvyBilling.kt$IvyBilling$ MaximumLineLength:IvyChecklistTextField.kt$ MaximumLineLength:IvyDescriptionTextField.kt$ @@ -953,8 +952,6 @@ ModifierMissing:FilterOverlay.kt$FilterOverlay ModifierMissing:FilterOverlay.kt$ListItem ModifierMissing:FinancistoSteps.kt$FinancistoSteps - ModifierMissing:GitHubBackupScreen.kt$GitHubBackupScreen - ModifierMissing:GitHubBackupStatus.kt$GitHubBackupStatus ModifierMissing:GradientCut.kt$GradientCutBottom ModifierMissing:HistoryDateDivider.kt$HistoryDateDivider ModifierMissing:HomeHeader.kt$CashFlowInfo @@ -1078,7 +1075,6 @@ MultipleEmitters:FilterOverlay.kt$PeriodFilter MultipleEmitters:FilterOverlay.kt$TypeFilter MultipleEmitters:FinancistoSteps.kt$FinancistoSteps - MultipleEmitters:GitHubBackupRequirementsCard.kt$WarningCardInfo MultipleEmitters:HistoryDateDivider.kt$HistoryDateDivider MultipleEmitters:HomeHeader.kt$HomeHeader MultipleEmitters:HomeMoreMenu.kt$QuickAccess @@ -1114,6 +1110,8 @@ MultipleEmitters:WalletCharts.kt$BalanceChart MutableParams:HomeTab.kt$hideBalanceRowState NestedBlockDepth:AccValueFunctions.kt$AccountValueFunctions$fun balance( transaction: Transaction, accountId: UUID ): BigDecimal + NewLineAtEndOfFile:DisableGitHubAutoBackupMigration.kt$com.ivy.wallet.migrations.impl.DisableGitHubAutoBackupMigration.kt + NewLineAtEndOfFile:UtilExt.kt$com.ivy.wallet.utils.UtilExt.kt NewLineAtEndOfFile:ivy.lint.gradle.kts$.ivy.lint.gradle.kts NoConsecutiveBlankLines:Accessors32ikgp1isdd8mwexzgbe6rirl.kt$ NoConsecutiveBlankLines:Accessors46nwrg1rs44ofdqpi7vyy3pfc.kt$ @@ -1149,6 +1147,7 @@ NoUnusedImports:Accessorseessl0al0otcsbyqqruvoncpd.kt$gradle.kotlin.dsl.accessors._6b1cdd1e881959619ea23cf7941079a9.Accessorseessl0al0otcsbyqqruvoncpd.kt NoUnusedImports:DetektConfigurationAccessors.kt$gradle.kotlin.dsl.accessors._6b1cdd1e881959619ea23cf7941079a9.DetektConfigurationAccessors.kt NoUnusedImports:DetektPluginsConfigurationAccessors.kt$gradle.kotlin.dsl.accessors._6b1cdd1e881959619ea23cf7941079a9.DetektPluginsConfigurationAccessors.kt + NoUnusedImports:ReportScreen.kt$com.ivy.wallet.ui.reports.ReportScreen.kt NoWildcardImports:Accessors32ikgp1isdd8mwexzgbe6rirl.kt$import org.gradle.kotlin.dsl.* NoWildcardImports:Accessors32ikgp1isdd8mwexzgbe6rirl.kt$import org.gradle.kotlin.dsl.accessors.runtime.* NoWildcardImports:Accessors46nwrg1rs44ofdqpi7vyy3pfc.kt$import org.gradle.kotlin.dsl.* @@ -1290,7 +1289,7 @@ PackageName:MoreMenu.kt$package com.ivy.design.l4_patterns PackageName:Onboarding.kt$package com.ivy.design.l5_concept PackageName:PieChart.kt$package com.ivy.design.l3_ivyComponents.chart - PackageName:PluginSpecBuilders.kt$package gradle.kotlin.dsl.plugins._1a80f9c1af920cc798666355ba8bb8e1 + PackageName:PluginSpecBuilders.kt$package gradle.kotlin.dsl.plugins._173816da98cad43c0b205554674cf537 PackageName:ProgressBar.kt$package com.ivy.design.l3_ivyComponents.percentage PackageName:ReorderModal.kt$package com.ivy.design.l4_patterns PackageName:ScreenTitle.kt$package com.ivy.design.l3_ivyComponents @@ -1357,7 +1356,7 @@ PackageNaming:MoreMenu.kt$package com.ivy.design.l4_patterns PackageNaming:Onboarding.kt$package com.ivy.design.l5_concept PackageNaming:PieChart.kt$package com.ivy.design.l3_ivyComponents.chart - PackageNaming:PluginSpecBuilders.kt$package gradle.kotlin.dsl.plugins._1a80f9c1af920cc798666355ba8bb8e1 + PackageNaming:PluginSpecBuilders.kt$package gradle.kotlin.dsl.plugins._173816da98cad43c0b205554674cf537 PackageNaming:ProgressBar.kt$package com.ivy.design.l3_ivyComponents.percentage PackageNaming:ReorderModal.kt$package com.ivy.design.l4_patterns PackageNaming:ScreenTitle.kt$package com.ivy.design.l3_ivyComponents @@ -1447,7 +1446,6 @@ TooGenericExceptionCaught:EditPlannedViewModel.kt$EditPlannedViewModel$e: Exception TooGenericExceptionCaught:EditTransactionViewModel.kt$EditTransactionViewModel$e: Exception TooGenericExceptionCaught:ExportCSVLogic.kt$ExportCSVLogic$e: Exception - TooGenericExceptionCaught:GitHubClient.kt$GitHubClient$e: Exception TooGenericExceptionCaught:ImportViewModel.kt$ImportViewModel$e: Exception TooGenericExceptionCaught:IntervalPickerRow.kt$e: Exception TooGenericExceptionCaught:ItemIcon.kt$e: Exception @@ -1525,9 +1523,6 @@ TopLevelPropertyNaming:Accessorseessl0al0otcsbyqqruvoncpd.kt$/** * Retrieves the [ext][org.gradle.api.plugins.ExtraPropertiesExtension] extension. */ internal val org.gradle.api.reporting.ReportingExtension.`ext`: org.gradle.api.plugins.ExtraPropertiesExtension get() = (this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("ext") as org.gradle.api.plugins.ExtraPropertiesExtension TopLevelPropertyNaming:AmountFormatting.kt$const val N_100K = 100000 TopLevelPropertyNaming:ChooseIconModal.kt$private const val ICON_PICKER_ICONS_PER_ROW = 5 - TopLevelPropertyNaming:GitHubBackupScreen.kt$private const val GITHUB_PAT_INFO_URL = "https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token" - TopLevelPropertyNaming:GitHubBackupScreen.kt$private const val GITHUB_REPO_INFO_URL = "https://docs.github.com/en/get-started/quickstart/create-a-repo" - TopLevelPropertyNaming:GitHubBackupScreen.kt$private const val VIDEO_TUTORIAL_URL = "https://www.youtube.com/watch?v=sDmZxXlXsCM" TopLevelPropertyNaming:HomeMoreMenu.kt$private const val SWIPE_UP_THRESHOLD_CLOSE_MORE_MENU = 300 TopLevelPropertyNaming:HomeTab.kt$private const val SWIPE_HORIZONTAL_THRESHOLD = 200 TopLevelPropertyNaming:IvyModal.kt$const val DURATION_MODAL_ANIM = 200 @@ -1882,8 +1877,6 @@ UseCheckOrError:SharedPrefs.kt$SharedPrefs$throw IllegalStateException("SharePrefs key '$key' cannot be null") UseCheckOrError:ZipUtils.kt$throw IllegalStateException("Location file must be directory or not exist") UtilityClassWithPublicConstructor:WidgetBase.kt$WidgetBase - ViewModelForwarding:GitHubBackupCard.kt$GitHubBackupStatus(viewModel) - ViewModelForwarding:GitHubBackupCard.kt$LastBackup(viewModel) ViewModelInjection:AccountsTab.kt$viewModel ViewModelInjection:BalanceScreen.kt$viewModel ViewModelInjection:BudgetScreen.kt$viewModel @@ -1895,8 +1888,6 @@ ViewModelInjection:EditPlannedScreen.kt$viewModel ViewModelInjection:EditTransactionScreen.kt$viewModel ViewModelInjection:ExchangeRatesScreen.kt$viewModel - ViewModelInjection:GitHubBackupCard.kt$viewModel - ViewModelInjection:GitHubBackupScreen.kt$viewModel ViewModelInjection:HomeTab.kt$viewModel ViewModelInjection:ImportScreen.kt$onboardingViewModel ViewModelInjection:ImportScreen.kt$viewModel diff --git a/git/hooks/pre-push b/git/hooks/pre-push index 36bc5164aa..35c45211c2 100755 --- a/git/hooks/pre-push +++ b/git/hooks/pre-push @@ -1,6 +1,6 @@ #!/bin/sh -./gradlew detektFormat +./scripts/detektFormat.sh if [ $? -ne 0 ]; then echo "Detekt found issues. Aborting push." diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3c6828586a..39f6198165 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,8 @@ kotlinx-collections = "0.3.5" detekt = "1.23.1" # https://detekt.dev/docs/gettingstarted/gradle/ [libraries] -android-gradle-plugin = { module = "com.android.tools.build:gradle" ,version = "8.2.0-beta01" } +android-gradle-plugin = { module = "com.android.tools.build:gradle", version = "8.3.0-alpha03" } + # Kotlin kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c698bf89f4..31552279ee 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon May 03 18:01:40 EEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-rc-2-all.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..a881fc0d92 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,25 @@ +{ + "name": "ivy-wallet", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "yarn": "^1.22.19" + } + }, + "node_modules/yarn": { + "version": "1.22.19", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", + "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", + "hasInstallScript": true, + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..bfb1edfad9 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "yarn": "^1.22.19" + }, + "devDependencies": { + "danger": "^11.2.8" + } +} diff --git a/scripts/init.sh b/scripts/init.sh index 40f79ba621..22b44da480 100755 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -14,14 +14,14 @@ if [ ! -d "$GIT_HOOKS_DIR" ]; then fi # Set up symbolic link for pre-push hook -ln -s -f $BASE_DIR/$HOOKS_DIR/pre-push $GIT_HOOKS_DIR/pre-push +ln -s -f $BASE_DIR/$HOOKS_DIR/pre-push $GIT_HOOKS_DIR/pre-push || exit -1 echo "pre-push hook has been set up." # Ensure the pre-push hook is executable -chmod +x $GIT_HOOKS_DIR/pre-push +chmod +x $GIT_HOOKS_DIR/pre-push || exit -1 echo "pre-push hook is now executable." -chmod +x /script/detektFormat.sh +chmod +x $BASE_DIR/scripts/detektFormat.sh || exit -1 echo "scripts in '/scripts' are now executable." echo "Repository setup complete!" \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..bb445115da --- /dev/null +++ b/yarn.lock @@ -0,0 +1,973 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@gitbeaker/core@^21.7.0": + version "21.7.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/core/-/core-21.7.0.tgz#fcf7a12915d39f416e3f316d0a447a814179b8e5" + integrity sha512-cw72rE7tA27wc6JJe1WqeAj9v/6w0S7XJcEji+bRNjTlUfE1zgfW0Gf1mbGUi7F37SOABGCosQLfg9Qe63aIqA== + dependencies: + "@gitbeaker/requester-utils" "^21.7.0" + form-data "^3.0.0" + li "^1.3.0" + xcase "^2.0.1" + +"@gitbeaker/node@^21.3.0": + version "21.7.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/node/-/node-21.7.0.tgz#2c19613f44ee497a8808c555abec614ebd2dfcad" + integrity sha512-OdM3VcTKYYqboOsnbiPcO0XimXXpYK4gTjARBZ6BWc+1LQXKmqo+OH6oUbyxOoaFu9hHECafIt3WZU3NM4sZTg== + dependencies: + "@gitbeaker/core" "^21.7.0" + "@gitbeaker/requester-utils" "^21.7.0" + form-data "^3.0.0" + got "^11.1.4" + xcase "^2.0.1" + +"@gitbeaker/requester-utils@^21.7.0": + version "21.7.0" + resolved "https://registry.yarnpkg.com/@gitbeaker/requester-utils/-/requester-utils-21.7.0.tgz#e9a9cfaf268d2a99eb7bbdc930943240a5f88878" + integrity sha512-eLTaVXlBnh8Qimj6QuMMA06mu/mLcJm3dy8nqhhn/Vm/D25sPrvpGwmbfFyvzj6QujPqtHvFfsCHtyZddL01qA== + dependencies: + form-data "^3.0.0" + query-string "^6.12.1" + xcase "^2.0.1" + +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.5.1": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" + integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.3" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== + +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.21.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" + integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== + dependencies: + "@octokit/types" "^6.40.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.16.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" + integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== + dependencies: + "@octokit/types" "^6.39.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.43.0 || ^17.11.0 || ^18.12.0", "@octokit/rest@^18.12.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": + version "6.41.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "20.5.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" + integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +async-retry@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" + integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q== + dependencies: + retry "0.12.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +chalk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +colors@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.18.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +core-js@^3.8.2: + version "3.32.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.1.tgz#a7d8736a3ed9dd05940c3c4ff32c591bb735be77" + integrity sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ== + +danger@^11.2.8: + version "11.2.8" + resolved "https://registry.yarnpkg.com/danger/-/danger-11.2.8.tgz#0e0375a5c311f93be8f53e9be1b44d8c5434b72f" + integrity sha512-d3iYhIJmo3V5WatWjsHbFpx/V5nz7fKsM7rQi91f/9CemLCH8wt3Jg1JKsEpiTHUtzNplOpudk0yFsWeHygd/w== + dependencies: + "@gitbeaker/node" "^21.3.0" + "@octokit/rest" "^18.12.0" + async-retry "1.2.3" + chalk "^2.3.0" + commander "^2.18.0" + core-js "^3.8.2" + debug "^4.1.1" + fast-json-patch "^3.0.0-1" + get-stdin "^6.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + hyperlinker "^1.0.0" + json5 "^2.1.0" + jsonpointer "^5.0.0" + jsonwebtoken "^9.0.0" + lodash.find "^4.6.0" + lodash.includes "^4.3.0" + lodash.isobject "^3.0.2" + lodash.keys "^4.0.8" + lodash.mapvalues "^4.6.0" + lodash.memoize "^4.1.2" + memfs-or-file-map-to-github-branch "^1.2.1" + micromatch "^4.0.4" + node-cleanup "^2.1.2" + node-fetch "^2.6.7" + override-require "^1.1.1" + p-limit "^2.1.0" + parse-diff "^0.7.0" + parse-git-config "^2.0.3" + parse-github-url "^1.0.2" + parse-link-header "^2.0.0" + pinpoint "^1.1.0" + prettyjson "^1.2.1" + readline-sync "^1.4.9" + regenerator-runtime "^0.13.9" + require-from-string "^2.0.2" + supports-hyperlinks "^1.0.1" + +debug@4, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +fast-json-patch@^3.0.0-1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" + integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg== + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +git-config-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664" + integrity sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg== + dependencies: + extend-shallow "^2.0.1" + fs-exists-sync "^0.1.0" + homedir-polyfill "^1.0.0" + +got@^11.1.4: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json5@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +jsonwebtoken@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@^4.0.0: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + +li@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b" + integrity sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw== + +lodash.find@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + integrity sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + integrity sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.keys@^4.0.8: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" + integrity sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ== + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +memfs-or-file-map-to-github-branch@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/memfs-or-file-map-to-github-branch/-/memfs-or-file-map-to-github-branch-1.2.1.tgz#fdb9a85408262316a9bd5567409bf89be7d72f96" + integrity sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ== + dependencies: + "@octokit/rest" "^16.43.0 || ^17.11.0 || ^18.12.0" + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimist@^1.2.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +node-cleanup@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + integrity sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +override-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df" + integrity sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-diff@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" + integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg== + +parse-git-config@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-2.0.3.tgz#6fb840d4a956e28b971c97b33a5deb73a6d5b6bb" + integrity sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A== + dependencies: + expand-tilde "^2.0.2" + git-config-path "^1.0.1" + ini "^1.3.5" + +parse-github-url@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" + integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== + +parse-link-header@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-2.0.0.tgz#949353e284f8aa01f2ac857a98f692b57733f6b7" + integrity sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw== + dependencies: + xtend "~4.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pinpoint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874" + integrity sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg== + +prettyjson@^1.2.1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.5.tgz#ef3cfffcc70505c032abc59785884b4027031835" + integrity sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw== + dependencies: + colors "1.4.0" + minimist "^1.2.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +query-string@^6.12.1: + version "6.14.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readline-sync@^1.4.9: + version "1.4.10" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" + integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== + +regenerator-runtime@^0.13.9: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +retry@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + +supports-color@^5.0.0, supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-hyperlinks@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== + dependencies: + has-flag "^2.0.0" + supports-color "^5.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xcase@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xcase/-/xcase-2.0.1.tgz#c7fa72caa0f440db78fd5673432038ac984450b9" + integrity sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yarn@^1.22.19: + version "1.22.19" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==