From 6e26f1c756439622664169916e7a4f92ce684f10 Mon Sep 17 00:00:00 2001 From: jonasbark Date: Wed, 20 Jul 2022 15:22:06 +0200 Subject: [PATCH] Sync (#835) * sync Android with React Native 0.15.0 * sync iOS with React Native 0.15.0 * try to fix integration test * try to fix integration test * adjust integration tests * integration tests on iOS, do adjustments * update tests, cleanup * update tests, cleanup * add new google pay and apple pay payment params to paymentsheet * add new apple pay payment method items needed for iOS 15 support * add support for affirm payment * chore(release): publish packages - stripe_platform_interface@4.0.0 * chore(release): publish packages - flutter_stripe_web@1.2.0 * chore(release): publish packages - stripe_ios@4.0.0 * chore(release): publish packages - stripe_android@4.0.0 * chore(release): publish packages - flutter_stripe@4.0.0 * chore provide correct readmes Co-authored-by: Remon Helmond --- .github/workflows/all_plugins.yaml | 14 +- .github/workflows/scripts/install-tools.sh | 2 +- example/integration_test/app_test.dart | 15 +- .../integration_test/payment_method_test.dart | 20 +- .../payment_sheet/payment_sheet_screen.dart | 11 +- .../payment_sheet_screen_custom_flow.dart | 8 +- .../lib/screens/wallets/apple_pay_screen.dart | 2 +- example/pubspec.yaml | 4 +- example/server/yarn.lock | 6060 +++++++++++++++++ packages/stripe/CHANGELOG.md | 29 + packages/stripe/pubspec.yaml | 8 +- packages/stripe_android/CHANGELOG.md | 8 + .../AuBECSDebitFormView.kt | 2 + .../com/reactnativestripesdk/CardFieldView.kt | 32 +- .../com/reactnativestripesdk/CardFormView.kt | 37 +- .../reactnativestripesdk/GooglePayFragment.kt | 4 + .../PaymentMethodCreateParamsFactory.kt | 580 +- .../PaymentSheetAppearance.kt | 1 + .../PaymentSheetFragment.kt | 69 +- .../reactnativestripesdk/StripeSdkModule.kt | 73 +- .../pushprovisioning/AddToWalletButtonView.kt | 2 +- .../pushprovisioning/PushProvisioningProxy.kt | 4 +- .../pushprovisioning/TapAndPayProxy.kt | 2 +- .../com/reactnativestripesdk/utils/Errors.kt | 113 + .../reactnativestripesdk/utils/Extensions.kt | 21 + .../com/reactnativestripesdk/utils/Mappers.kt | 856 +++ .../utils/PostalCodeUtilities.kt | 18 + packages/stripe_android/pubspec.yaml | 2 +- packages/stripe_ios/CHANGELOG.md | 29 + .../Classes/Stripe Sdk/ApplePayUtils.swift | 159 + .../ios/Classes/Stripe Sdk/Mappers.swift | 21 +- .../Stripe Sdk/PaymentMethodFactory.swift | 9 + .../ios/Classes/Stripe Sdk/StripeSdk.swift | 82 +- .../AddToWalletButtonManager.m | 21 - .../AddToWalletButtonManager.swift | 19 - packages/stripe_ios/pubspec.yaml | 2 +- .../stripe_platform_interface/CHANGELOG.md | 29 + .../lib/src/models/apple_pay.dart | 62 +- .../lib/src/models/apple_pay.freezed.dart | 784 ++- .../lib/src/models/apple_pay.g.dart | 68 +- .../lib/src/models/payment_methods.dart | 11 + .../src/models/payment_methods.freezed.dart | 436 ++ .../lib/src/models/payment_methods.g.dart | 15 + .../lib/src/models/payment_sheet.dart | 63 +- .../lib/src/models/payment_sheet.freezed.dart | 548 +- .../lib/src/models/payment_sheet.g.dart | 54 +- .../stripe_platform_interface/pubspec.yaml | 2 +- .../test/method_channel_stripe_test.dart | 8 +- packages/stripe_web/CHANGELOG.md | 3 + packages/stripe_web/pubspec.yaml | 4 +- 50 files changed, 9629 insertions(+), 797 deletions(-) create mode 100644 example/server/yarn.lock create mode 100644 packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Errors.kt create mode 100644 packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Extensions.kt create mode 100644 packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Mappers.kt create mode 100644 packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/PostalCodeUtilities.kt create mode 100644 packages/stripe_ios/ios/Classes/Stripe Sdk/ApplePayUtils.swift delete mode 100644 packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.m delete mode 100644 packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.swift diff --git a/.github/workflows/all_plugins.yaml b/.github/workflows/all_plugins.yaml index a6946d276..6de6e4d9d 100644 --- a/.github/workflows/all_plugins.yaml +++ b/.github/workflows/all_plugins.yaml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: subosito/flutter-action@v1 + - uses: subosito/flutter-action@v2 with: channel: 'stable' @@ -51,7 +51,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: subosito/flutter-action@v1 + - uses: subosito/flutter-action@v2 with: channel: 'stable' @@ -85,7 +85,7 @@ jobs: with: java-version: '11' - - uses: subosito/flutter-action@v1 + - uses: subosito/flutter-action@v2 with: channel: 'stable' @@ -124,3 +124,11 @@ jobs: sleep 15; flutter drive --driver test_driver/integration_test.dart --target=integration_test/run_all_tests.dart; cd android && ./gradlew :app:connectedDebugAndroidTest; + + - name: "Start iOS Simulator" + run: | + xcrun simctl boot "iPhone 13 mini" + + - name: "Run Flutter Driver tests on iOS" + working-directory: example + run: "flutter drive --driver test_driver/integration_test.dart --target=integration_test/run_all_tests.dart" diff --git a/.github/workflows/scripts/install-tools.sh b/.github/workflows/scripts/install-tools.sh index c2fe2162a..dc0cfa53e 100755 --- a/.github/workflows/scripts/install-tools.sh +++ b/.github/workflows/scripts/install-tools.sh @@ -1,3 +1,3 @@ #!/bin/bash -flutter pub global activate melos \ No newline at end of file +flutter pub global activate melos diff --git a/example/integration_test/app_test.dart b/example/integration_test/app_test.dart index e5c02d875..2765a7f81 100644 --- a/example/integration_test/app_test.dart +++ b/example/integration_test/app_test.dart @@ -24,11 +24,12 @@ void main() { // 2. initialize the payment sheet await Stripe.instance.initPaymentSheet( paymentSheetParameters: SetupPaymentSheetParameters( - applePay: true, - googlePay: true, + applePay: PaymentSheetApplePay(merchantCountryCode: 'DE'), + googlePay: PaymentSheetGooglePay( + merchantCountryCode: 'DE', + testEnv: true, + ), style: ThemeMode.dark, - testEnv: true, - merchantCountryCode: 'DE', merchantDisplayName: 'Flutter Stripe Store Demo', customerId: _paymentSheetData['customer'], paymentIntentClientSecret: _paymentSheetData['paymentIntent'], @@ -77,7 +78,8 @@ void main() { ); // 3. create intent on the server - final paymentIntentResult = await _createNoWebhookPayEndpointMethod(paymentMethod.id); + final paymentIntentResult = + await _createNoWebhookPayEndpointMethod(paymentMethod.id); expect(paymentIntentResult['status'], 'succeeded'); }); }); @@ -100,7 +102,8 @@ Future> _createTestPaymentSheet() async { return json.decode(response.body); } -Future> _createNoWebhookPayEndpointMethod(String paymentMethodId) async { +Future> _createNoWebhookPayEndpointMethod( + String paymentMethodId) async { final ipAddress = kApiUrl.split('\n').last.trim(); final url = Uri.parse('http://$ipAddress:4242/pay-without-webhooks'); final response = await http.post( diff --git a/example/integration_test/payment_method_test.dart b/example/integration_test/payment_method_test.dart index 8f4a4c300..ddf57229b 100644 --- a/example/integration_test/payment_method_test.dart +++ b/example/integration_test/payment_method_test.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter_stripe/flutter_stripe.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -123,7 +125,12 @@ void main() { expect(paymentMethod.id, startsWith('pm_')); expect(paymentMethod.ideal, isNotNull); expect(paymentMethod.ideal.bank, isNull); - expect(paymentMethod.ideal.bankIdentifierCode, isNull); + // TODO instead create tickets for react native + if (Platform.isIOS) { + expect(paymentMethod.ideal.bankIdentifierCode, ''); + } else { + expect(paymentMethod.ideal.bankIdentifierCode, isNull); + } // expect(paymentMethod.billingDetails.isEmpty, isTrue); }); @@ -134,7 +141,7 @@ void main() { expect(paymentMethod.id, startsWith('pm_')); expect(paymentMethod.ideal, isNotNull); expect(paymentMethod.ideal.bank, isNull); - expect(paymentMethod.ideal.bankIdentifierCode, isNull); + expect(paymentMethod.ideal.bankIdentifierCode, 'REVOLT21'); // expect(paymentMethod.billingDetails.isEmpty, isTrue); }); }); @@ -145,8 +152,13 @@ void main() { ); expect(paymentMethod.id, startsWith('pm_')); expect(paymentMethod.fpx, isNotNull); - expect(paymentMethod.fpx.bank, isNull); - expect(paymentMethod.fpx.accountHolderType, isNull); + expect(paymentMethod.fpx.bank, 'affin_bank'); + // TODO instead create tickets for react native + if (Platform.isIOS) { + expect(paymentMethod.fpx.accountHolderType, isNull); + } else { + expect(paymentMethod.fpx.accountHolderType, 'individual'); + } // expect(paymentMethod.billingDetails.isEmpty, isTrue); }); }); diff --git a/example/lib/screens/payment_sheet/payment_sheet_screen.dart b/example/lib/screens/payment_sheet/payment_sheet_screen.dart index 117459af3..4794e8e12 100644 --- a/example/lib/screens/payment_sheet/payment_sheet_screen.dart +++ b/example/lib/screens/payment_sheet/payment_sheet_screen.dart @@ -94,8 +94,13 @@ class _PaymentSheetScreenState extends State { customerId: data['customer'], customerEphemeralKeySecret: data['ephemeralKey'], // Extra params - applePay: true, - googlePay: true, + applePay: PaymentSheetApplePay( + merchantCountryCode: 'DE', + ), + googlePay: PaymentSheetGooglePay( + merchantCountryCode: 'DE', + testEnv: true, + ), style: ThemeMode.dark, appearance: PaymentSheetAppearance( colors: PaymentSheetAppearanceColors( @@ -119,8 +124,6 @@ class _PaymentSheetScreenState extends State { ), ), billingDetails: billingDetails, - testEnv: true, - merchantCountryCode: 'DE', ), ); setState(() { diff --git a/example/lib/screens/payment_sheet/payment_sheet_screen_custom_flow.dart b/example/lib/screens/payment_sheet/payment_sheet_screen_custom_flow.dart index 0d3fca6be..f4de7cf98 100644 --- a/example/lib/screens/payment_sheet/payment_sheet_screen_custom_flow.dart +++ b/example/lib/screens/payment_sheet/payment_sheet_screen_custom_flow.dart @@ -70,11 +70,11 @@ class _PaymentSheetScreenState extends State { customerEphemeralKeySecret: data['ephemeralKey'], customerId: data['customer'], // Extra options - testEnv: true, - applePay: true, - googlePay: true, + applePay: PaymentSheetApplePay( + merchantCountryCode: 'DE', + ), + googlePay: PaymentSheetGooglePay(merchantCountryCode: 'DE'), style: ThemeMode.dark, - merchantCountryCode: 'DE', ), ); setState(() { diff --git a/example/lib/screens/wallets/apple_pay_screen.dart b/example/lib/screens/wallets/apple_pay_screen.dart index c1be6d7ec..a174f45c5 100644 --- a/example/lib/screens/wallets/apple_pay_screen.dart +++ b/example/lib/screens/wallets/apple_pay_screen.dart @@ -52,7 +52,7 @@ class _ApplePayScreenState extends State { await Stripe.instance.presentApplePay( ApplePayPresentParams( cartItems: [ - ApplePayCartSummaryItem( + ApplePayCartSummaryItem.immediate( label: 'Product Test', amount: '0.01', ), diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 5a11f1f49..36466ff83 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -10,8 +10,8 @@ environment: dependencies: flutter: sdk: flutter - flutter_stripe: ^3.2.0 - flutter_stripe_web: ^1.1.0 + flutter_stripe: ^4.0.0 + flutter_stripe_web: ^1.2.0 stripe_checkout: ^1.0.0 pay: ^1.0.10 http: ^0.13.1 diff --git a/example/server/yarn.lock b/example/server/yarn.lock new file mode 100644 index 000000000..7d15d9a5e --- /dev/null +++ b/example/server/yarn.lock @@ -0,0 +1,6060 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/cli@^7.12.1": + "integrity" "sha512-zmEFV8WBRsW+mPQumO1/4b34QNALBVReaiHJOkxhUsdo/AvYM62c+SKSuLi2aZ42t3ocK6OI0uwUXRvrIbREZw==" + "resolved" "https://registry.npmjs.org/@babel/cli/-/cli-7.13.14.tgz" + "version" "7.13.14" + dependencies: + "commander" "^4.0.1" + "convert-source-map" "^1.1.0" + "fs-readdir-recursive" "^1.1.0" + "glob" "^7.0.0" + "lodash" "^4.17.19" + "make-dir" "^2.1.0" + "slash" "^2.0.0" + "source-map" "^0.5.0" + optionalDependencies: + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" + "chokidar" "^3.4.0" + +"@babel/code-frame@^7.0.0": + "integrity" "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/code-frame@^7.10.4": + "integrity" "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.9.6": + "integrity" "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz" + "version" "7.11.6" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.6" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.5" + "@babel/types" "^7.11.5" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.1" + "json5" "^2.1.2" + "lodash" "^4.17.19" + "resolve" "^1.3.2" + "semver" "^5.4.1" + "source-map" "^0.5.0" + +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": + "integrity" "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz" + "version" "7.11.6" + dependencies: + "@babel/types" "^7.11.5" + "jsesc" "^2.5.1" + "source-map" "^0.5.0" + +"@babel/helper-function-name@^7.10.4": + "integrity" "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + "integrity" "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==" + "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4": + "integrity" "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz" + "version" "7.11.0" + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + "integrity" "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.11.0": + "integrity" "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz" + "version" "7.11.0" + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + "lodash" "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + "integrity" "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": + "integrity" "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" + "version" "7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + "integrity" "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + "integrity" "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.11.0": + "integrity" "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz" + "version" "7.11.0" + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + "integrity" "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz" + "version" "7.10.4" + +"@babel/helpers@^7.10.4": + "integrity" "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + "integrity" "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" + +"@babel/highlight@^7.8.3": + "integrity" "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "chalk" "^2.0.0" + "esutils" "^2.0.2" + "js-tokens" "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": + "integrity" "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz" + "version" "7.11.5" + +"@babel/plugin-syntax-async-generators@^7.8.4": + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + "integrity" "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-import-meta@^7.8.3": + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/runtime@^7.8.7", "@babel/runtime@^7.9.6": + "integrity" "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz" + "version" "7.13.10" + dependencies: + "regenerator-runtime" "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.3.3": + "integrity" "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": + "integrity" "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz" + "version" "7.11.5" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + "debug" "^4.1.0" + "globals" "^11.1.0" + "lodash" "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + "integrity" "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz" + "version" "7.11.5" + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + "lodash" "^4.17.19" + "to-fast-properties" "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" + +"@blakeembrey/deque@^1.0.3": + "integrity" "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==" + "resolved" "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz" + "version" "1.0.5" + +"@cnakazawa/watch@^1.0.3": + "integrity" "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==" + "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "exec-sh" "^0.3.2" + "minimist" "^1.2.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + "integrity" "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz" + "version" "0.1.2" + +"@jest/console@^26.5.2": + "integrity" "sha512-lJELzKINpF1v74DXHbCRIkQ/+nUV1M+ntj+X1J8LxCgpmJZjfLmhFejiMSbjjD66fayxl5Z06tbs3HMyuik6rw==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + "chalk" "^4.0.0" + "jest-message-util" "^26.5.2" + "jest-util" "^26.5.2" + "slash" "^3.0.0" + +"@jest/core@^26.5.3": + "integrity" "sha512-CiU0UKFF1V7KzYTVEtFbFmGLdb2g4aTtY0WlyUfLgj/RtoTnJFhh50xKKr7OYkdmBUlGFSa2mD1TU3UZ6OLd4g==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/console" "^26.5.2" + "@jest/reporters" "^26.5.3" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "jest-changed-files" "^26.5.2" + "jest-config" "^26.5.3" + "jest-haste-map" "^26.5.2" + "jest-message-util" "^26.5.2" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.5.2" + "jest-resolve-dependencies" "^26.5.3" + "jest-runner" "^26.5.3" + "jest-runtime" "^26.5.3" + "jest-snapshot" "^26.5.3" + "jest-util" "^26.5.2" + "jest-validate" "^26.5.3" + "jest-watcher" "^26.5.2" + "micromatch" "^4.0.2" + "p-each-series" "^2.1.0" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" + +"@jest/environment@^26.5.2": + "integrity" "sha512-YjhCD/Zhkz0/1vdlS/QN6QmuUdDkpgBdK4SdiVg4Y19e29g4VQYN5Xg8+YuHjdoWGY7wJHMxc79uDTeTOy9Ngw==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "jest-mock" "^26.5.2" + +"@jest/fake-timers@^26.5.2": + "integrity" "sha512-09Hn5Oraqt36V1akxQeWMVL0fR9c6PnEhpgLaYvREXZJAh2H2Y+QLCsl0g7uMoJeoWJAuz4tozk1prbR1Fc1sw==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + "jest-message-util" "^26.5.2" + "jest-mock" "^26.5.2" + "jest-util" "^26.5.2" + +"@jest/globals@^26.5.3": + "integrity" "sha512-7QztI0JC2CuB+Wx1VdnOUNeIGm8+PIaqngYsZXQCkH2QV0GFqzAYc9BZfU0nuqA6cbYrWh5wkuMzyii3P7deug==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/environment" "^26.5.2" + "@jest/types" "^26.5.2" + "expect" "^26.5.3" + +"@jest/reporters@^26.5.3": + "integrity" "sha512-X+vR0CpfMQzYcYmMFKNY9n4jklcb14Kffffp7+H/MqitWnb0440bW2L76NGWKAa+bnXhNoZr+lCVtdtPmfJVOQ==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.2" + "graceful-fs" "^4.2.4" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^4.0.3" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.0.2" + "jest-haste-map" "^26.5.2" + "jest-resolve" "^26.5.2" + "jest-util" "^26.5.2" + "jest-worker" "^26.5.0" + "slash" "^3.0.0" + "source-map" "^0.6.0" + "string-length" "^4.0.1" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^6.0.1" + optionalDependencies: + "node-notifier" "^8.0.0" + +"@jest/source-map@^26.5.0": + "integrity" "sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-26.5.0.tgz" + "version" "26.5.0" + dependencies: + "callsites" "^3.0.0" + "graceful-fs" "^4.2.4" + "source-map" "^0.6.0" + +"@jest/test-result@^26.5.2": + "integrity" "sha512-E/Zp6LURJEGSCWpoMGmCFuuEI1OWuI3hmZwmULV0GsgJBh7u0rwqioxhRU95euUuviqBDN8ruX/vP/4bwYolXw==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/console" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/istanbul-lib-coverage" "^2.0.0" + "collect-v8-coverage" "^1.0.0" + +"@jest/test-sequencer@^26.5.3": + "integrity" "sha512-Wqzb7aQ13L3T47xHdpUqYMOpiqz6Dx2QDDghp5AV/eUDXR7JieY+E1s233TQlNyl+PqtqgjVokmyjzX/HA51BA==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/test-result" "^26.5.2" + "graceful-fs" "^4.2.4" + "jest-haste-map" "^26.5.2" + "jest-runner" "^26.5.3" + "jest-runtime" "^26.5.3" + +"@jest/transform@^26.5.2": + "integrity" "sha512-AUNjvexh+APhhmS8S+KboPz+D3pCxPvEAGduffaAJYxIFxGi/ytZQkrqcKDUU0ERBAo5R7087fyOYr2oms1seg==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.5.2" + "babel-plugin-istanbul" "^6.0.0" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.4" + "jest-haste-map" "^26.5.2" + "jest-regex-util" "^26.0.0" + "jest-util" "^26.5.2" + "micromatch" "^4.0.2" + "pirates" "^4.0.1" + "slash" "^3.0.0" + "source-map" "^0.6.1" + "write-file-atomic" "^3.0.0" + +"@jest/types@^25.5.0": + "integrity" "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + "chalk" "^3.0.0" + +"@jest/types@^26.5.2": + "integrity" "sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + "chalk" "^4.0.0" + +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": + "integrity" "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==" + "resolved" "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz" + "version" "2.1.8-no-fsevents" + dependencies: + "anymatch" "^2.0.0" + "async-each" "^1.0.1" + "braces" "^2.3.2" + "glob-parent" "^3.1.0" + "inherits" "^2.0.3" + "is-binary-path" "^1.0.0" + "is-glob" "^4.0.0" + "normalize-path" "^3.0.0" + "path-is-absolute" "^1.0.0" + "readdirp" "^2.2.1" + "upath" "^1.1.1" + +"@nodelib/fs.scandir@2.1.3": + "integrity" "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz" + "version" "2.1.3" + dependencies: + "@nodelib/fs.stat" "2.0.3" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.3": + "integrity" "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz" + "version" "2.0.3" + +"@nodelib/fs.walk@^1.2.3": + "integrity" "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "@nodelib/fs.scandir" "2.1.3" + "fastq" "^1.6.0" + +"@sinonjs/commons@^1.7.0": + "integrity" "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz" + "version" "1.8.1" + dependencies: + "type-detect" "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + "integrity" "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + "integrity" "sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.10.tgz" + "version" "7.1.10" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + "integrity" "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz" + "version" "7.6.2" + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + "integrity" "sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + "integrity" "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz" + "version" "7.0.15" + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + "integrity" "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz" + "version" "1.19.0" + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/color-name@^1.1.1": + "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + "version" "1.1.1" + +"@types/connect@*": + "integrity" "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz" + "version" "3.4.34" + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.12": + "integrity" "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + "resolved" "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz" + "version" "2.8.12" + +"@types/dotenv@^8.2.0": + "integrity" "sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw==" + "resolved" "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.0.tgz" + "version" "8.2.0" + dependencies: + "dotenv" "*" + +"@types/eslint-visitor-keys@^1.0.0": + "integrity" "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + "resolved" "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz" + "version" "1.0.0" + +"@types/express-serve-static-core@^4.17.18": + "integrity" "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz" + "version" "4.17.19" + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.2": + "integrity" "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz" + "version" "4.17.11" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + "integrity" "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz" + "version" "4.1.3" + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + "integrity" "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz" + "version" "2.0.3" + +"@types/istanbul-lib-report@*": + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + "integrity" "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/istanbul-reports@^3.0.0": + "integrity" "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.14", "@types/jest@26.x": + "integrity" "sha512-Hz5q8Vu0D288x3iWXePSn53W7hAjP0H7EQ6QvDO9c7t46mR0lNOLlfuwQ+JkVxuhygHzlzPX+0jKdA3ZgSh+Vg==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-26.0.14.tgz" + "version" "26.0.14" + dependencies: + "jest-diff" "^25.2.1" + "pretty-format" "^25.2.1" + +"@types/json-schema@^7.0.3": + "integrity" "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz" + "version" "7.0.4" + +"@types/mime@^1": + "integrity" "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" + "version" "1.3.2" + +"@types/node@*", "@types/node@^12.7.2", "@types/node@>=8.1.0": + "integrity" "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz" + "version" "12.7.2" + +"@types/normalize-package-data@^2.4.0": + "integrity" "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" + "version" "2.4.0" + +"@types/parse-json@^4.0.0": + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + +"@types/prettier@^2.0.0": + "integrity" "sha512-IiPhNnenzkqdSdQH3ifk9LoX7oQe61ZlDdDO4+MUv6FyWdPGDPr26gCPVs3oguZEMq//nFZZpwUZcVuNJsG+DQ==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.2.tgz" + "version" "2.1.2" + +"@types/qs@*": + "integrity" "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz" + "version" "6.9.6" + +"@types/range-parser@*": + "integrity" "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz" + "version" "1.2.3" + +"@types/serve-static@*": + "integrity" "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz" + "version" "1.13.9" + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + "integrity" "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz" + "version" "2.0.0" + +"@types/yargs-parser@*": + "integrity" "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz" + "version" "15.0.0" + +"@types/yargs@^15.0.0": + "integrity" "sha512-b0BYzFUzBpOhPjpl1wtAHU994jBeKF4TKVlT7ssFv44T617XNcPdRoG4AzHLVshLzlrF7i3lTelH7UbuNYV58Q==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.8.tgz" + "version" "15.0.8" + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^2.21.0": + "integrity" "sha512-b5jjjDMxzcjh/Sbjuo7WyhrQmVJg0WipTHQgXh5Xwx10uYm6nPWqN1WGOsaNq4HR3Zh4wUx4IRQdDkCHwyewyw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.21.0.tgz" + "version" "2.21.0" + dependencies: + "@typescript-eslint/experimental-utils" "2.21.0" + "eslint-utils" "^1.4.3" + "functional-red-black-tree" "^1.0.1" + "regexpp" "^3.0.0" + "tsutils" "^3.17.1" + +"@typescript-eslint/experimental-utils@^4.0.1": + "integrity" "sha512-Nt4EVlb1mqExW9cWhpV6pd1a3DkUbX9DeyYsdoeziKOpIJ04S2KMVDO+SEidsXRH/XHDpbzXykKcMTLdTXH6cQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.4.1" + "@typescript-eslint/types" "4.4.1" + "@typescript-eslint/typescript-estree" "4.4.1" + "eslint-scope" "^5.0.0" + "eslint-utils" "^2.0.0" + +"@typescript-eslint/experimental-utils@2.21.0": + "integrity" "sha512-olKw9JP/XUkav4lq0I7S1mhGgONJF9rHNhKFn9wJlpfRVjNo3PPjSvybxEldvCXnvD+WAshSzqH5cEjPp9CsBA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.21.0.tgz" + "version" "2.21.0" + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.21.0" + "eslint-scope" "^5.0.0" + +"@typescript-eslint/parser@^2.0.0", "@typescript-eslint/parser@^2.21.0": + "integrity" "sha512-VrmbdrrrvvI6cPPOG7uOgGUFXNYTiSbnRq8ZMyuGa4+qmXJXVLEEz78hKuqupvkpwJQNk1Ucz1TenrRP90gmBg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.21.0.tgz" + "version" "2.21.0" + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.21.0" + "@typescript-eslint/typescript-estree" "2.21.0" + "eslint-visitor-keys" "^1.1.0" + +"@typescript-eslint/scope-manager@4.4.1": + "integrity" "sha512-2oD/ZqD4Gj41UdFeWZxegH3cVEEH/Z6Bhr/XvwTtGv66737XkR4C9IqEkebCuqArqBJQSj4AgNHHiN1okzD/wQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "@typescript-eslint/types" "4.4.1" + "@typescript-eslint/visitor-keys" "4.4.1" + +"@typescript-eslint/types@4.4.1": + "integrity" "sha512-KNDfH2bCyax5db+KKIZT4rfA8rEk5N0EJ8P0T5AJjo5xrV26UAzaiqoJCxeaibqc0c/IvZxp7v2g3difn2Pn3w==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.4.1.tgz" + "version" "4.4.1" + +"@typescript-eslint/typescript-estree@2.21.0": + "integrity" "sha512-NC/nogZNb9IK2MEFQqyDBAciOT8Lp8O3KgAfvHx2Skx6WBo+KmDqlU3R9KxHONaijfTIKtojRe3SZQyMjr3wBw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.21.0.tgz" + "version" "2.21.0" + dependencies: + "debug" "^4.1.1" + "eslint-visitor-keys" "^1.1.0" + "glob" "^7.1.6" + "is-glob" "^4.0.1" + "lodash" "^4.17.15" + "semver" "^6.3.0" + "tsutils" "^3.17.1" + +"@typescript-eslint/typescript-estree@4.4.1": + "integrity" "sha512-wP/V7ScKzgSdtcY1a0pZYBoCxrCstLrgRQ2O9MmCUZDtmgxCO/TCqOTGRVwpP4/2hVfqMz/Vw1ZYrG8cVxvN3g==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "@typescript-eslint/types" "4.4.1" + "@typescript-eslint/visitor-keys" "4.4.1" + "debug" "^4.1.1" + "globby" "^11.0.1" + "is-glob" "^4.0.1" + "lodash" "^4.17.15" + "semver" "^7.3.2" + "tsutils" "^3.17.1" + +"@typescript-eslint/visitor-keys@4.4.1": + "integrity" "sha512-H2JMWhLaJNeaylSnMSQFEhT/S/FsJbebQALmoJxMPMxLtlVAMy2uJP/Z543n9IizhjRayLSqoInehCeNW9rWcw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "@typescript-eslint/types" "4.4.1" + "eslint-visitor-keys" "^2.0.0" + +"abab@^2.0.3": + "integrity" "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" + "version" "2.0.5" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"accepts@~1.3.7": + "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" + "version" "1.3.7" + dependencies: + "mime-types" "~2.1.24" + "negotiator" "0.6.2" + +"acorn-globals@^6.0.0": + "integrity" "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==" + "resolved" "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "acorn" "^7.1.1" + "acorn-walk" "^7.1.1" + +"acorn-jsx@^5.1.0": + "integrity" "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz" + "version" "5.1.0" + +"acorn-walk@^7.1.1": + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + "version" "7.2.0" + +"acorn@^6.0.0 || ^7.0.0", "acorn@^7.1.0", "acorn@^7.1.1": + "integrity" "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz" + "version" "7.1.1" + +"ajv@^6.10.0", "ajv@^6.10.2", "ajv@^6.12.3": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-align@^2.0.0": + "integrity" "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=" + "resolved" "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "string-width" "^2.0.0" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "type-fest" "^0.8.1" + +"ansi-regex@^2.0.0": + "version" "2.1.1" + +"ansi-regex@^3.0.0": + "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + "version" "3.0.0" + +"ansi-regex@^4.1.0": + "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + "version" "4.1.0" + +"ansi-regex@^5.0.0": + "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + "version" "5.0.0" + +"ansi-styles@^3.2.0", "ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"anymatch@^2.0.0": + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "micromatch" "^3.1.4" + "normalize-path" "^2.1.1" + +"anymatch@^3.0.3": + "integrity" "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"anymatch@~3.1.1": + "integrity" "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"aproba@^1.0.3": + "version" "1.2.0" + +"are-we-there-yet@~1.1.2": + "version" "1.1.5" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^2.0.6" + +"arg@^4.1.0": + "integrity" "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz" + "version" "4.1.1" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"arr-diff@^4.0.0": + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + "version" "4.0.0" + +"arr-flatten@^1.1.0": + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + "version" "1.1.0" + +"arr-union@^3.1.0": + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + "version" "3.1.0" + +"array-flatten@1.1.1": + "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-unique@^0.3.2": + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + "version" "0.3.2" + +"arrify@^2.0.0": + "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + "version" "2.0.1" + +"asn1@~0.2.3": + "integrity" "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"assign-symbols@^1.0.0": + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + "version" "1.0.0" + +"astral-regex@^1.0.0": + "integrity" "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" + "version" "1.0.0" + +"async-each@^1.0.1": + "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" + "version" "1.0.3" + +"asynckit@^0.4.0": + "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"atob@^2.1.1": + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + "version" "2.1.2" + +"aws-sign2@~0.7.0": + "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + "version" "0.7.0" + +"aws4@^1.8.0": + "integrity" "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz" + "version" "1.10.1" + +"babel-jest@^26.5.2": + "integrity" "sha512-U3KvymF3SczA3vOL/cgiUFOznfMET+XDIXiWnoJV45siAp2pLMG8i2+/MGZlAC3f/F6Q40LR4M4qDrWZ9wkK8A==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/babel__core" "^7.1.7" + "babel-plugin-istanbul" "^6.0.0" + "babel-preset-jest" "^26.5.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "slash" "^3.0.0" + +"babel-plugin-istanbul@^6.0.0": + "integrity" "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-instrument" "^4.0.0" + "test-exclude" "^6.0.0" + +"babel-plugin-jest-hoist@^26.5.0": + "integrity" "sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz" + "version" "26.5.0" + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +"babel-plugin-module-resolver@^4.0.0": + "integrity" "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==" + "resolved" "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "find-babel-config" "^1.2.0" + "glob" "^7.1.6" + "pkg-up" "^3.1.0" + "reselect" "^4.0.0" + "resolve" "^1.13.1" + +"babel-preset-current-node-syntax@^0.1.3": + "integrity" "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"babel-preset-jest@^26.5.0": + "integrity" "sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz" + "version" "26.5.0" + dependencies: + "babel-plugin-jest-hoist" "^26.5.0" + "babel-preset-current-node-syntax" "^0.1.3" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base@^0.11.1": + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" + "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + "version" "0.11.2" + dependencies: + "cache-base" "^1.0.1" + "class-utils" "^0.3.5" + "component-emitter" "^1.2.1" + "define-property" "^1.0.0" + "isobject" "^3.0.1" + "mixin-deep" "^1.2.0" + "pascalcase" "^0.1.1" + +"bcrypt-pbkdf@^1.0.0": + "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"binary-extensions@^1.0.0": + "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + "version" "1.13.1" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"body-parser@1.19.0": + "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" + "version" "1.19.0" + dependencies: + "bytes" "3.1.0" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "~1.1.2" + "http-errors" "1.7.2" + "iconv-lite" "0.4.24" + "on-finished" "~2.3.0" + "qs" "6.7.0" + "raw-body" "2.4.0" + "type-is" "~1.6.17" + +"boxen@^1.2.1": + "integrity" "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==" + "resolved" "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "ansi-align" "^2.0.0" + "camelcase" "^4.0.0" + "chalk" "^2.0.1" + "cli-boxes" "^1.0.0" + "string-width" "^2.0.0" + "term-size" "^1.2.0" + "widest-line" "^2.0.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^2.3.1", "braces@^2.3.2": + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" + "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "arr-flatten" "^1.1.0" + "array-unique" "^0.3.2" + "extend-shallow" "^2.0.1" + "fill-range" "^4.0.0" + "isobject" "^3.0.1" + "repeat-element" "^1.1.2" + "snapdragon" "^0.8.1" + "snapdragon-node" "^2.0.1" + "split-string" "^3.0.2" + "to-regex" "^3.0.1" + +"braces@^3.0.1": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"browser-process-hrtime@^1.0.0": + "integrity" "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "resolved" "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + "version" "1.0.0" + +"bs-logger@0.x": + "integrity" "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==" + "resolved" "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "fast-json-stable-stringify" "2.x" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"buffer-from@^1.0.0", "buffer-from@1.x": + "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + "version" "1.1.1" + +"bytes@3.1.0": + "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + "version" "3.1.0" + +"cache-base@^1.0.1": + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" + "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "collection-visit" "^1.0.0" + "component-emitter" "^1.2.1" + "get-value" "^2.0.6" + "has-value" "^1.0.0" + "isobject" "^3.0.1" + "set-value" "^2.0.0" + "to-object-path" "^0.3.0" + "union-value" "^1.0.0" + "unset-value" "^1.0.0" + +"call-bind@^1.0.0": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^4.0.0": + "integrity" "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz" + "version" "4.1.0" + +"camelcase@^5.0.0": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.0.0": + "integrity" "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz" + "version" "6.1.0" + +"capture-exit@^2.0.0": + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" + "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "rsvp" "^4.8.4" + +"capture-stack-trace@^1.0.0": + "integrity" "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + "resolved" "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz" + "version" "1.0.1" + +"caseless@~0.12.0": + "integrity" "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "version" "0.12.0" + +"chalk@^2.0.0", "chalk@^2.0.1", "chalk@^2.1.0", "chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^3.0.0": + "integrity" "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.0.0": + "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"chokidar@^2.1.5": + "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + "version" "2.1.8" + dependencies: + "anymatch" "^2.0.0" + "async-each" "^1.0.1" + "braces" "^2.3.2" + "glob-parent" "^3.1.0" + "inherits" "^2.0.3" + "is-binary-path" "^1.0.0" + "is-glob" "^4.0.0" + "normalize-path" "^3.0.0" + "path-is-absolute" "^1.0.0" + "readdirp" "^2.2.1" + "upath" "^1.1.1" + optionalDependencies: + "fsevents" "^1.2.7" + +"chokidar@^3.0.0": + "integrity" "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "anymatch" "~3.1.1" + "braces" "~3.0.2" + "glob-parent" "~5.1.0" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.3.0" + optionalDependencies: + "fsevents" "~2.1.2" + +"chokidar@^3.4.0": + "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" + "version" "3.5.1" + dependencies: + "anymatch" "~3.1.1" + "braces" "~3.0.2" + "glob-parent" "~5.1.0" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.5.0" + optionalDependencies: + "fsevents" "~2.3.1" + +"chownr@^1.1.1": + "version" "1.1.1" + +"ci-info@^1.5.0": + "integrity" "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz" + "version" "1.6.0" + +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" + +"class-utils@^0.3.5": + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" + "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "arr-union" "^3.1.0" + "define-property" "^0.2.5" + "isobject" "^3.0.0" + "static-extend" "^0.1.1" + +"cli-boxes@^1.0.0": + "integrity" "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz" + "version" "1.0.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-width@^2.0.0": + "integrity" "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz" + "version" "2.2.0" + +"cliui@^6.0.0": + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^6.2.0" + +"co@^4.6.0": + "integrity" "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"code-point-at@^1.0.0": + "version" "1.1.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" + +"collection-visit@^1.0.0": + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" + "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "map-visit" "^1.0.0" + "object-visit" "^1.0.0" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"combined-stream@^1.0.6", "combined-stream@~1.0.6": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"commander@^4.0.1": + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "resolved" "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + "version" "4.1.1" + +"compare-versions@^3.5.1": + "integrity" "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "resolved" "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz" + "version" "3.6.0" + +"component-emitter@^1.2.1": + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + "version" "1.3.0" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"configstore@^3.0.0": + "integrity" "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==" + "resolved" "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "dot-prop" "^4.1.0" + "graceful-fs" "^4.1.2" + "make-dir" "^1.0.0" + "unique-string" "^1.0.0" + "write-file-atomic" "^2.0.0" + "xdg-basedir" "^3.0.0" + +"console-control-strings@^1.0.0", "console-control-strings@~1.1.0": + "version" "1.1.0" + +"content-disposition@0.5.3": + "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "safe-buffer" "5.1.2" + +"content-type@~1.0.4": + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + "version" "1.0.4" + +"convert-source-map@^1.1.0", "convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "safe-buffer" "~5.1.1" + +"cookie-signature@1.0.6": + "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@0.4.0": + "integrity" "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" + "version" "0.4.0" + +"copy-descriptor@^0.1.0": + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + "version" "0.1.1" + +"core-util-is@~1.0.0", "core-util-is@1.0.2": + "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cors@^2.8.5": + "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==" + "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + "version" "2.8.5" + dependencies: + "object-assign" "^4" + "vary" "^1" + +"cosmiconfig@^6.0.0": + "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@types/parse-json" "^4.0.0" + "import-fresh" "^3.1.0" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.7.2" + +"create-error-class@^3.0.0": + "integrity" "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=" + "resolved" "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "capture-stack-trace" "^1.0.0" + +"cross-spawn@^5.0.1": + "integrity" "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "lru-cache" "^4.0.1" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^6.0.0": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^6.0.5": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^7.0.0": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"crypto-random-string@^1.0.0": + "integrity" "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz" + "version" "1.0.0" + +"cssom@^0.4.4": + "integrity" "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + "version" "0.4.4" + +"cssom@~0.3.6": + "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + "version" "0.3.8" + +"cssstyle@^2.2.0": + "integrity" "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==" + "resolved" "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "cssom" "~0.3.6" + +"dashdash@^1.12.0": + "integrity" "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"data-urls@^2.0.0": + "integrity" "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==" + "resolved" "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "abab" "^2.0.3" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.0.0" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^2.3.3": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^3.1.0": + "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + "version" "3.2.6" + dependencies: + "ms" "^2.1.1" + +"debug@^4.0.1": + "integrity" "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "ms" "^2.1.1" + +"debug@^4.1.0": + "integrity" "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "ms" "2.1.2" + +"debug@^4.1.1": + "integrity" "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "ms" "^2.1.1" + +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"decamelize@^1.2.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decimal.js@^10.2.0": + "integrity" "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" + "resolved" "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz" + "version" "10.2.1" + +"decode-uri-component@^0.2.0": + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@~0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" + +"define-property@^0.2.5": + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + "version" "0.2.5" + dependencies: + "is-descriptor" "^0.1.0" + +"define-property@^1.0.0": + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-descriptor" "^1.0.0" + +"define-property@^2.0.2": + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "is-descriptor" "^1.0.2" + "isobject" "^3.0.1" + +"delayed-stream@~1.0.0": + "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegates@^1.0.0": + "version" "1.0.0" + +"depd@~1.1.2": + "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"destroy@~1.0.4": + "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + "version" "1.0.4" + +"detect-libc@^1.0.2": + "version" "1.0.3" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"diff-sequences@^25.2.6": + "integrity" "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz" + "version" "25.2.6" + +"diff-sequences@^26.5.0": + "integrity" "sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.5.0.tgz" + "version" "26.5.0" + +"diff@^4.0.1": + "integrity" "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz" + "version" "4.0.1" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"domexception@^2.0.1": + "integrity" "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==" + "resolved" "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "webidl-conversions" "^5.0.0" + +"dot-prop@^4.1.0": + "integrity" "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "is-obj" "^1.0.0" + +"dotenv@*", "dotenv@^8.2.0": + "integrity" "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz" + "version" "8.2.0" + +"duplexer3@^0.1.4": + "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" + "version" "0.1.4" + +"ecc-jsbn@~0.1.1": + "integrity" "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"ee-first@1.1.1": + "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"emittery@^0.7.1": + "integrity" "sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.7.1.tgz" + "version" "0.7.1" + +"emoji-regex@^7.0.1": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"encodeurl@~1.0.2": + "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"end-of-stream@^1.1.0": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"escape-html@~1.0.3": + "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escodegen@^1.14.1": + "integrity" "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" + "version" "1.14.3" + dependencies: + "esprima" "^4.0.1" + "estraverse" "^4.2.0" + "esutils" "^2.0.2" + "optionator" "^0.8.1" + optionalDependencies: + "source-map" "~0.6.1" + +"eslint-config-prettier@^6.10.0": + "integrity" "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz" + "version" "6.10.0" + dependencies: + "get-stdin" "^6.0.0" + +"eslint-plugin-jest@^24.1.0": + "integrity" "sha512-827YJ+E8B9PvXu/0eiVSNFfxxndbKv+qE/3GSMhdorCaeaOehtqHGX2YDW9B85TEOre9n/zscledkFW/KbnyGg==" + "resolved" "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.1.0.tgz" + "version" "24.1.0" + dependencies: + "@typescript-eslint/experimental-utils" "^4.0.1" + +"eslint-plugin-prettier@^3.1.2": + "integrity" "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==" + "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "prettier-linter-helpers" "^1.0.0" + +"eslint-scope@^5.0.0": + "integrity" "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "esrecurse" "^4.1.0" + "estraverse" "^4.1.1" + +"eslint-utils@^1.4.3": + "integrity" "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "eslint-visitor-keys" "^1.1.0" + +"eslint-utils@^2.0.0": + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "eslint-visitor-keys" "^1.1.0" + +"eslint-visitor-keys@^1.1.0": + "integrity" "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz" + "version" "1.1.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + "version" "2.0.0" + +"eslint@*", "eslint@^5.0.0 || ^6.0.0", "eslint@^6.8.0", "eslint@>= 5.0.0", "eslint@>=3.14.1", "eslint@>=5": + "integrity" "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz" + "version" "6.8.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "ajv" "^6.10.0" + "chalk" "^2.1.0" + "cross-spawn" "^6.0.5" + "debug" "^4.0.1" + "doctrine" "^3.0.0" + "eslint-scope" "^5.0.0" + "eslint-utils" "^1.4.3" + "eslint-visitor-keys" "^1.1.0" + "espree" "^6.1.2" + "esquery" "^1.0.1" + "esutils" "^2.0.2" + "file-entry-cache" "^5.0.1" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^5.0.0" + "globals" "^12.1.0" + "ignore" "^4.0.6" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "inquirer" "^7.0.0" + "is-glob" "^4.0.0" + "js-yaml" "^3.13.1" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.3.0" + "lodash" "^4.17.14" + "minimatch" "^3.0.4" + "mkdirp" "^0.5.1" + "natural-compare" "^1.4.0" + "optionator" "^0.8.3" + "progress" "^2.0.0" + "regexpp" "^2.0.1" + "semver" "^6.1.2" + "strip-ansi" "^5.2.0" + "strip-json-comments" "^3.0.1" + "table" "^5.2.3" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^6.1.2": + "integrity" "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==" + "resolved" "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz" + "version" "6.1.2" + dependencies: + "acorn" "^7.1.0" + "acorn-jsx" "^5.1.0" + "eslint-visitor-keys" "^1.1.0" + +"esprima@^4.0.0", "esprima@^4.0.1": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.0.1": + "integrity" "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "estraverse" "^4.0.0" + +"esrecurse@^4.1.0": + "integrity" "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "estraverse" "^4.1.0" + +"estraverse@^4.0.0", "estraverse@^4.1.0", "estraverse@^4.1.1", "estraverse@^4.2.0": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"etag@~1.8.1": + "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"exec-sh@^0.3.2": + "integrity" "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" + "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz" + "version" "0.3.4" + +"execa@^0.7.0": + "integrity" "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=" + "resolved" "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "cross-spawn" "^5.0.1" + "get-stream" "^3.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^1.0.0": + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "cross-spawn" "^6.0.0" + "get-stream" "^4.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^4.0.0": + "integrity" "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==" + "resolved" "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "cross-spawn" "^7.0.0" + "get-stream" "^5.0.0" + "human-signals" "^1.1.1" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.0" + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "strip-final-newline" "^2.0.0" + +"exit@^0.1.2": + "integrity" "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expand-brackets@^2.1.4": + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" + "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "debug" "^2.3.3" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "posix-character-classes" "^0.1.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"expect@^26.5.3": + "integrity" "sha512-kkpOhGRWGOr+TEFUnYAjfGvv35bfP+OlPtqPIJpOCR9DVtv8QV+p8zG0Edqafh80fsjeE+7RBcVUq1xApnYglw==" + "resolved" "https://registry.npmjs.org/expect/-/expect-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/types" "^26.5.2" + "ansi-styles" "^4.0.0" + "jest-get-type" "^26.3.0" + "jest-matcher-utils" "^26.5.2" + "jest-message-util" "^26.5.2" + "jest-regex-util" "^26.0.0" + +"express@^4.17.1": + "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==" + "resolved" "https://registry.npmjs.org/express/-/express-4.17.1.tgz" + "version" "4.17.1" + dependencies: + "accepts" "~1.3.7" + "array-flatten" "1.1.1" + "body-parser" "1.19.0" + "content-disposition" "0.5.3" + "content-type" "~1.0.4" + "cookie" "0.4.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "~1.1.2" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "~1.1.2" + "fresh" "0.5.2" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "~2.3.0" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.5" + "qs" "6.7.0" + "range-parser" "~1.2.1" + "safe-buffer" "5.1.2" + "send" "0.17.1" + "serve-static" "1.14.1" + "setprototypeof" "1.1.1" + "statuses" "~1.5.0" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" + +"extend-shallow@^2.0.1": + "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extendable" "^0.1.0" + +"extend-shallow@^3.0.0", "extend-shallow@^3.0.2": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extend@~3.0.2": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extglob@^2.0.4": + "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" + "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "array-unique" "^0.3.2" + "define-property" "^1.0.0" + "expand-brackets" "^2.1.4" + "extend-shallow" "^2.0.1" + "fragment-cache" "^0.2.1" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fast-deep-equal@^3.1.1": + "integrity" "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz" + "version" "3.1.1" + +"fast-diff@^1.1.2": + "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + "version" "1.2.0" + +"fast-glob@^3.1.1": + "integrity" "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz" + "version" "3.2.4" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.0" + "merge2" "^1.3.0" + "micromatch" "^4.0.2" + "picomatch" "^2.2.1" + +"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@2.x": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@~2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.0": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"figures@^3.0.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^5.0.1": + "integrity" "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "flat-cache" "^2.0.1" + +"fill-range@^4.0.0": + "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "extend-shallow" "^2.0.1" + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + "to-regex-range" "^2.1.0" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"finalhandler@~1.1.2": + "integrity" "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "~2.3.0" + "parseurl" "~1.3.3" + "statuses" "~1.5.0" + "unpipe" "~1.0.0" + +"find-babel-config@^1.2.0": + "integrity" "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==" + "resolved" "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "json5" "^0.5.1" + "path-exists" "^3.0.0" + +"find-up@^3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "locate-path" "^3.0.0" + +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-versions@^3.2.0": + "integrity" "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==" + "resolved" "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "semver-regex" "^2.0.0" + +"flat-cache@^2.0.1": + "integrity" "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "flatted" "^2.0.0" + "rimraf" "2.6.3" + "write" "1.0.3" + +"flatted@^2.0.0": + "integrity" "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz" + "version" "2.0.1" + +"for-in@^1.0.2": + "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + "version" "1.0.2" + +"forever-agent@~0.6.1": + "integrity" "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "version" "0.6.1" + +"form-data@~2.3.2": + "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"forwarded@~0.1.2": + "integrity" "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" + "version" "0.1.2" + +"fragment-cache@^0.2.1": + "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" + "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "map-cache" "^0.2.2" + +"fresh@0.5.2": + "integrity" "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"fs-minipass@^1.2.5": + "version" "1.2.5" + dependencies: + "minipass" "^2.2.1" + +"fs-readdir-recursive@^1.1.0": + "integrity" "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + "resolved" "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" + "version" "1.1.0" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@^1.2.7": + "integrity" "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz" + "version" "1.2.9" + dependencies: + "nan" "^2.12.1" + "node-pre-gyp" "^0.12.0" + +"fsevents@^2.1.2": + "integrity" "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" + "version" "2.1.3" + +"fsevents@~2.1.2": + "integrity" "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz" + "version" "2.1.2" + +"fsevents@~2.3.1": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"gauge@~2.7.3": + "version" "2.7.4" + dependencies: + "aproba" "^1.0.3" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.0" + "object-assign" "^4.1.0" + "signal-exit" "^3.0.0" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + "wide-align" "^1.1.0" + +"gensync@^1.0.0-beta.1": + "integrity" "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz" + "version" "1.0.0-beta.1" + +"get-caller-file@^2.0.1": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-intrinsic@^1.0.2": + "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.1" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stdin@^6.0.0": + "integrity" "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" + "version" "6.0.0" + +"get-stream@^3.0.0": + "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + "version" "3.0.0" + +"get-stream@^4.0.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^5.0.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "pump" "^3.0.0" + +"get-value@^2.0.3", "get-value@^2.0.6": + "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + "version" "2.0.6" + +"getpass@^0.1.1": + "integrity" "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"glob-parent@^3.1.0": + "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-glob" "^3.1.0" + "path-dirname" "^1.0.0" + +"glob-parent@^5.0.0": + "integrity" "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^5.1.0": + "integrity" "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@~5.1.0": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + "version" "7.1.4" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.6": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"global-dirs@^0.1.0": + "integrity" "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=" + "resolved" "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "ini" "^1.3.4" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^12.1.0": + "integrity" "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==" + "resolved" "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz" + "version" "12.3.0" + dependencies: + "type-fest" "^0.8.1" + +"globby@^11.0.1": + "integrity" "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz" + "version" "11.0.1" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"got@^6.7.1": + "integrity" "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=" + "resolved" "https://registry.npmjs.org/got/-/got-6.7.1.tgz" + "version" "6.7.1" + dependencies: + "create-error-class" "^3.0.0" + "duplexer3" "^0.1.4" + "get-stream" "^3.0.0" + "is-redirect" "^1.0.0" + "is-retry-allowed" "^1.0.0" + "is-stream" "^1.0.0" + "lowercase-keys" "^1.0.0" + "safe-buffer" "^5.0.1" + "timed-out" "^4.0.0" + "unzip-response" "^2.0.1" + "url-parse-lax" "^1.0.0" + +"graceful-fs@^4.1.11", "graceful-fs@^4.1.2": + "integrity" "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz" + "version" "4.2.2" + +"graceful-fs@^4.2.4": + "integrity" "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" + "version" "4.2.4" + +"growly@^1.3.0": + "integrity" "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "resolved" "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" + "version" "1.3.0" + +"har-schema@^2.0.0": + "integrity" "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + "version" "2.0.0" + +"har-validator@~5.1.3": + "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" + "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + "version" "5.1.5" + dependencies: + "ajv" "^6.12.3" + "har-schema" "^2.0.0" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-symbols@^1.0.1": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has-unicode@^2.0.0": + "version" "2.0.1" + +"has-value@^0.3.1": + "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "get-value" "^2.0.3" + "has-values" "^0.1.4" + "isobject" "^2.0.0" + +"has-value@^1.0.0": + "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-value" "^2.0.6" + "has-values" "^1.0.0" + "isobject" "^3.0.0" + +"has-values@^0.1.4": + "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + "version" "0.1.4" + +"has-values@^1.0.0": + "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-number" "^3.0.0" + "kind-of" "^4.0.0" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"html-encoding-sniffer@^2.0.1": + "integrity" "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==" + "resolved" "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "whatwg-encoding" "^1.0.5" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"http-errors@~1.7.2", "http-errors@1.7.2": + "integrity" "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" + "version" "1.7.2" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.3" + "setprototypeof" "1.1.1" + "statuses" ">= 1.5.0 < 2" + "toidentifier" "1.0.0" + +"http-signature@~1.2.0": + "integrity" "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "assert-plus" "^1.0.0" + "jsprim" "^1.2.2" + "sshpk" "^1.7.0" + +"human-signals@^1.1.1": + "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + "version" "1.1.1" + +"husky@^4.2.3": + "integrity" "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==" + "resolved" "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "chalk" "^3.0.0" + "ci-info" "^2.0.0" + "compare-versions" "^3.5.1" + "cosmiconfig" "^6.0.0" + "find-versions" "^3.2.0" + "opencollective-postinstall" "^2.0.2" + "pkg-dir" "^4.2.0" + "please-upgrade-node" "^3.2.0" + "slash" "^3.0.0" + "which-pm-runs" "^1.0.0" + +"iconv-lite@^0.4.24", "iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.4.4": + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"ignore-by-default@^1.0.1": + "integrity" "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "resolved" "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + "version" "1.0.1" + +"ignore-walk@^3.0.1": + "version" "3.0.1" + dependencies: + "minimatch" "^3.0.4" + +"ignore@^4.0.6": + "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + "version" "4.0.6" + +"ignore@^5.1.4": + "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + "version" "5.1.8" + +"import-fresh@^3.0.0", "import-fresh@^3.1.0": + "integrity" "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-lazy@^2.1.0": + "integrity" "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "resolved" "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" + "version" "2.1.0" + +"import-local@^3.0.2": + "integrity" "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@~2.0.3", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"inherits@2.0.3": + "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + +"ini@^1.3.4", "ini@~1.3.0": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"inquirer@^7.0.0": + "integrity" "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^2.4.2" + "cli-cursor" "^3.1.0" + "cli-width" "^2.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.15" + "mute-stream" "0.0.8" + "run-async" "^2.2.0" + "rxjs" "^6.5.3" + "string-width" "^4.1.0" + "strip-ansi" "^5.1.0" + "through" "^2.3.6" + +"ip-regex@^2.1.0": + "integrity" "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + "resolved" "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" + "version" "2.1.0" + +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-accessor-descriptor@^0.1.6": + "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "kind-of" "^3.0.2" + +"is-accessor-descriptor@^1.0.0": + "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-binary-path@^1.0.0": + "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "binary-extensions" "^1.0.0" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-buffer@^1.1.5": + "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + "version" "1.1.6" + +"is-ci@^1.0.10": + "integrity" "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ci-info" "^1.5.0" + +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ci-info" "^2.0.0" + +"is-data-descriptor@^0.1.4": + "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "kind-of" "^3.0.2" + +"is-data-descriptor@^1.0.0": + "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-descriptor@^0.1.0": + "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "is-accessor-descriptor" "^0.1.6" + "is-data-descriptor" "^0.1.4" + "kind-of" "^5.0.0" + +"is-descriptor@^1.0.0": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" + +"is-descriptor@^1.0.2": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" + +"is-docker@^2.0.0": + "integrity" "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz" + "version" "2.1.1" + +"is-extendable@^0.1.0", "is-extendable@^0.1.1": + "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" + +"is-extendable@^1.0.1": + "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-plain-object" "^2.0.4" + +"is-extglob@^2.1.0", "is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^1.0.0": + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-glob@^3.1.0": + "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-extglob" "^2.1.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-extglob" "^2.1.1" + +"is-installed-globally@^0.1.0": + "integrity" "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=" + "resolved" "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "global-dirs" "^0.1.0" + "is-path-inside" "^1.0.0" + +"is-npm@^1.0.0": + "integrity" "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + "resolved" "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz" + "version" "1.0.0" + +"is-number@^3.0.0": + "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "kind-of" "^3.0.2" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-obj@^1.0.0": + "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + "version" "1.0.1" + +"is-path-inside@^1.0.0": + "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY=" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "path-is-inside" "^1.0.1" + +"is-plain-object@^2.0.3", "is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-potential-custom-element-name@^1.0.0": + "integrity" "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" + "resolved" "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz" + "version" "1.0.0" + +"is-promise@^2.1.0": + "integrity" "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "resolved" "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz" + "version" "2.1.0" + +"is-redirect@^1.0.0": + "integrity" "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "resolved" "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz" + "version" "1.0.0" + +"is-retry-allowed@^1.0.0": + "integrity" "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + "resolved" "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz" + "version" "1.1.0" + +"is-stream@^1.0.0", "is-stream@^1.1.0": + "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + "version" "1.1.0" + +"is-stream@^2.0.0": + "integrity" "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" + "version" "2.0.0" + +"is-typedarray@^1.0.0", "is-typedarray@~1.0.0": + "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"is-windows@^1.0.2": + "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + "version" "1.0.2" + +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"isarray@~1.0.0", "isarray@1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^2.0.0": + "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "isarray" "1.0.0" + +"isobject@^3.0.0", "isobject@^3.0.1": + "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"isstream@~0.1.2": + "integrity" "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "version" "0.1.2" + +"istanbul-lib-coverage@^3.0.0": + "integrity" "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz" + "version" "3.0.0" + +"istanbul-lib-instrument@^4.0.0", "istanbul-lib-instrument@^4.0.3": + "integrity" "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-coverage" "^3.0.0" + "semver" "^6.3.0" + +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" + +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" + +"istanbul-reports@^3.0.2": + "integrity" "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" + +"jest-changed-files@^26.5.2": + "integrity" "sha512-qSmssmiIdvM5BWVtyK/nqVpN3spR5YyvkvPqz1x3BR1bwIxsWmU/MGwLoCrPNLbkG2ASAKfvmJpOduEApBPh2w==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "execa" "^4.0.0" + "throat" "^5.0.0" + +"jest-cli@^26.5.3": + "integrity" "sha512-HkbSvtugpSXBf2660v9FrNVUgxvPkssN8CRGj9gPM8PLhnaa6zziFiCEKQAkQS4uRzseww45o0TR+l6KeRYV9A==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/core" "^26.5.3" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "import-local" "^3.0.2" + "is-ci" "^2.0.0" + "jest-config" "^26.5.3" + "jest-util" "^26.5.2" + "jest-validate" "^26.5.3" + "prompts" "^2.0.1" + "yargs" "^15.4.1" + +"jest-config@^26.5.3": + "integrity" "sha512-NVhZiIuN0GQM6b6as4CI5FSCyXKxdrx5ACMCcv/7Pf+TeCajJhJc+6dwgdAVPyerUFB9pRBIz3bE7clSrRge/w==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.5.3" + "@jest/types" "^26.5.2" + "babel-jest" "^26.5.2" + "chalk" "^4.0.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.1" + "graceful-fs" "^4.2.4" + "jest-environment-jsdom" "^26.5.2" + "jest-environment-node" "^26.5.2" + "jest-get-type" "^26.3.0" + "jest-jasmine2" "^26.5.3" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.5.2" + "jest-util" "^26.5.2" + "jest-validate" "^26.5.3" + "micromatch" "^4.0.2" + "pretty-format" "^26.5.2" + +"jest-diff@^25.2.1": + "integrity" "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "chalk" "^3.0.0" + "diff-sequences" "^25.2.6" + "jest-get-type" "^25.2.6" + "pretty-format" "^25.5.0" + +"jest-diff@^26.5.2": + "integrity" "sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^26.5.0" + "jest-get-type" "^26.3.0" + "pretty-format" "^26.5.2" + +"jest-docblock@^26.0.0": + "integrity" "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz" + "version" "26.0.0" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^26.5.2": + "integrity" "sha512-w7D9FNe0m2D3yZ0Drj9CLkyF/mGhmBSULMQTypzAKR746xXnjUrK8GUJdlLTWUF6dd0ks3MtvGP7/xNFr9Aphg==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "chalk" "^4.0.0" + "jest-get-type" "^26.3.0" + "jest-util" "^26.5.2" + "pretty-format" "^26.5.2" + +"jest-environment-jsdom@^26.5.2": + "integrity" "sha512-fWZPx0bluJaTQ36+PmRpvUtUlUFlGGBNyGX1SN3dLUHHMcQ4WseNEzcGGKOw4U5towXgxI4qDoI3vwR18H0RTw==" + "resolved" "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "jest-mock" "^26.5.2" + "jest-util" "^26.5.2" + "jsdom" "^16.4.0" + +"jest-environment-node@^26.5.2": + "integrity" "sha512-YHjnDsf/GKFCYMGF1V+6HF7jhY1fcLfLNBDjhAOvFGvt6d8vXvNdJGVM7uTZ2VO/TuIyEFhPGaXMX5j3h7fsrA==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "jest-mock" "^26.5.2" + "jest-util" "^26.5.2" + +"jest-get-type@^25.2.6": + "integrity" "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz" + "version" "25.2.6" + +"jest-get-type@^26.3.0": + "integrity" "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz" + "version" "26.3.0" + +"jest-haste-map@^26.5.2": + "integrity" "sha512-lJIAVJN3gtO3k4xy+7i2Xjtwh8CfPcH08WYjZpe9xzveDaqGw9fVNCpkYu6M525wKFVkLmyi7ku+DxCAP1lyMA==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.4" + "jest-regex-util" "^26.0.0" + "jest-serializer" "^26.5.0" + "jest-util" "^26.5.2" + "jest-worker" "^26.5.0" + "micromatch" "^4.0.2" + "sane" "^4.0.3" + "walker" "^1.0.7" + optionalDependencies: + "fsevents" "^2.1.2" + +"jest-jasmine2@^26.5.3": + "integrity" "sha512-nFlZOpnGlNc7y/+UkkeHnvbOM+rLz4wB1AimgI9QhtnqSZte0wYjbAm8hf7TCwXlXgDwZxAXo6z0a2Wzn9FoOg==" + "resolved" "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.5.2" + "@jest/source-map" "^26.5.0" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "chalk" "^4.0.0" + "co" "^4.6.0" + "expect" "^26.5.3" + "is-generator-fn" "^2.0.0" + "jest-each" "^26.5.2" + "jest-matcher-utils" "^26.5.2" + "jest-message-util" "^26.5.2" + "jest-runtime" "^26.5.3" + "jest-snapshot" "^26.5.3" + "jest-util" "^26.5.2" + "pretty-format" "^26.5.2" + "throat" "^5.0.0" + +"jest-leak-detector@^26.5.2": + "integrity" "sha512-h7ia3dLzBFItmYERaLPEtEKxy3YlcbcRSjj0XRNJgBEyODuu+3DM2o62kvIFvs3PsaYoIIv+e+nLRI61Dj1CNw==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "jest-get-type" "^26.3.0" + "pretty-format" "^26.5.2" + +"jest-matcher-utils@^26.5.2": + "integrity" "sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^26.5.2" + "jest-get-type" "^26.3.0" + "pretty-format" "^26.5.2" + +"jest-message-util@^26.5.2": + "integrity" "sha512-Ocp9UYZ5Jl15C5PNsoDiGEk14A4NG0zZKknpWdZGoMzJuGAkVt10e97tnEVMYpk7LnQHZOfuK2j/izLBMcuCZw==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.5.2" + "@types/stack-utils" "^2.0.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "micromatch" "^4.0.2" + "slash" "^3.0.0" + "stack-utils" "^2.0.2" + +"jest-mock@^26.5.2": + "integrity" "sha512-9SiU4b5PtO51v0MtJwVRqeGEroH66Bnwtq4ARdNP7jNXbpT7+ByeWNAk4NeT/uHfNSVDXEXgQo1XRuwEqS6Rdw==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + "version" "1.2.2" + +"jest-regex-util@^26.0.0": + "integrity" "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz" + "version" "26.0.0" + +"jest-resolve-dependencies@^26.5.3": + "integrity" "sha512-+KMDeke/BFK+mIQ2IYSyBz010h7zQaVt4Xie6cLqUGChorx66vVeQVv4ErNoMwInnyYHi1Ud73tDS01UbXbfLQ==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/types" "^26.5.2" + "jest-regex-util" "^26.0.0" + "jest-snapshot" "^26.5.3" + +"jest-resolve@*", "jest-resolve@^26.5.2": + "integrity" "sha512-XsPxojXGRA0CoDD7Vis59ucz2p3cQFU5C+19tz3tLEAlhYKkK77IL0cjYjikY9wXnOaBeEdm1rOgSJjbZWpcZg==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^26.5.2" + "read-pkg-up" "^7.0.1" + "resolve" "^1.17.0" + "slash" "^3.0.0" + +"jest-runner@^26.5.3": + "integrity" "sha512-qproP0Pq7IIule+263W57k2+8kWCszVJTC9TJWGUz0xJBr+gNiniGXlG8rotd0XxwonD5UiJloYoSO5vbUr5FQ==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/console" "^26.5.2" + "@jest/environment" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "chalk" "^4.0.0" + "emittery" "^0.7.1" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "jest-config" "^26.5.3" + "jest-docblock" "^26.0.0" + "jest-haste-map" "^26.5.2" + "jest-leak-detector" "^26.5.2" + "jest-message-util" "^26.5.2" + "jest-resolve" "^26.5.2" + "jest-runtime" "^26.5.3" + "jest-util" "^26.5.2" + "jest-worker" "^26.5.0" + "source-map-support" "^0.5.6" + "throat" "^5.0.0" + +"jest-runtime@^26.5.3": + "integrity" "sha512-IDjalmn2s/Tc4GvUwhPHZ0iaXCdMRq5p6taW9P8RpU+FpG01O3+H8z+p3rDCQ9mbyyyviDgxy/LHPLzrIOKBkQ==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/console" "^26.5.2" + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/globals" "^26.5.3" + "@jest/source-map" "^26.5.0" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/yargs" "^15.0.0" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.4" + "jest-config" "^26.5.3" + "jest-haste-map" "^26.5.2" + "jest-message-util" "^26.5.2" + "jest-mock" "^26.5.2" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.5.2" + "jest-snapshot" "^26.5.3" + "jest-util" "^26.5.2" + "jest-validate" "^26.5.3" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + "yargs" "^15.4.1" + +"jest-serializer@^26.5.0": + "integrity" "sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA==" + "resolved" "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.5.0.tgz" + "version" "26.5.0" + dependencies: + "@types/node" "*" + "graceful-fs" "^4.2.4" + +"jest-snapshot@^26.5.3": + "integrity" "sha512-ZgAk0Wm0JJ75WS4lGaeRfa0zIgpL0KD595+XmtwlIEMe8j4FaYHyZhP1LNOO+8fXq7HJ3hll54+sFV9X4+CGVw==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.5.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + "chalk" "^4.0.0" + "expect" "^26.5.3" + "graceful-fs" "^4.2.4" + "jest-diff" "^26.5.2" + "jest-get-type" "^26.3.0" + "jest-haste-map" "^26.5.2" + "jest-matcher-utils" "^26.5.2" + "jest-message-util" "^26.5.2" + "jest-resolve" "^26.5.2" + "natural-compare" "^1.4.0" + "pretty-format" "^26.5.2" + "semver" "^7.3.2" + +"jest-util@^26.1.0", "jest-util@^26.5.2": + "integrity" "sha512-WTL675bK+GSSAYgS8z9FWdCT2nccO1yTIplNLPlP0OD8tUk/H5IrWKMMRudIQQ0qp8bb4k+1Qa8CxGKq9qnYdg==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "is-ci" "^2.0.0" + "micromatch" "^4.0.2" + +"jest-validate@^26.5.3": + "integrity" "sha512-LX07qKeAtY+lsU0o3IvfDdN5KH9OulEGOMN1sFo6PnEf5/qjS1LZIwNk9blcBeW94pQUI9dLN9FlDYDWI5tyaA==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/types" "^26.5.2" + "camelcase" "^6.0.0" + "chalk" "^4.0.0" + "jest-get-type" "^26.3.0" + "leven" "^3.1.0" + "pretty-format" "^26.5.2" + +"jest-watcher@^26.5.2": + "integrity" "sha512-i3m1NtWzF+FXfJ3ljLBB/WQEp4uaNhX7QcQUWMokcifFTUQBDFyUMEwk0JkJ1kopHbx7Een3KX0Q7+9koGM/Pw==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "jest-util" "^26.5.2" + "string-length" "^4.0.1" + +"jest-worker@^26.5.0": + "integrity" "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz" + "version" "26.5.0" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^7.0.0" + +"jest@^26.5.3", "jest@>=26 <27": + "integrity" "sha512-uJi3FuVSLmkZrWvaDyaVTZGLL8WcfynbRnFXyAHuEtYiSZ+ijDDIMOw1ytmftK+y/+OdAtsG9QrtbF7WIBmOyA==" + "resolved" "https://registry.npmjs.org/jest/-/jest-26.5.3.tgz" + "version" "26.5.3" + dependencies: + "@jest/core" "^26.5.3" + "import-local" "^3.0.2" + "jest-cli" "^26.5.3" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + "version" "3.13.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"jsbn@~0.1.0": + "integrity" "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"jsdom@^16.4.0": + "integrity" "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==" + "resolved" "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz" + "version" "16.4.0" + dependencies: + "abab" "^2.0.3" + "acorn" "^7.1.1" + "acorn-globals" "^6.0.0" + "cssom" "^0.4.4" + "cssstyle" "^2.2.0" + "data-urls" "^2.0.0" + "decimal.js" "^10.2.0" + "domexception" "^2.0.1" + "escodegen" "^1.14.1" + "html-encoding-sniffer" "^2.0.1" + "is-potential-custom-element-name" "^1.0.0" + "nwsapi" "^2.2.0" + "parse5" "5.1.1" + "request" "^2.88.2" + "request-promise-native" "^1.0.8" + "saxes" "^5.0.0" + "symbol-tree" "^3.2.4" + "tough-cookie" "^3.0.1" + "w3c-hr-time" "^1.0.2" + "w3c-xmlserializer" "^2.0.0" + "webidl-conversions" "^6.1.0" + "whatwg-encoding" "^1.0.5" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.0.0" + "ws" "^7.2.3" + "xml-name-validator" "^3.0.0" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"json-parse-better-errors@^1.0.1": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.2.3": + "integrity" "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" + "version" "0.2.3" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json-stringify-safe@~5.0.1": + "integrity" "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "version" "5.0.1" + +"json5@^0.5.1": + "integrity" "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + "resolved" "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz" + "version" "0.5.1" + +"json5@^2.1.2", "json5@2.x": + "integrity" "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz" + "version" "2.1.3" + dependencies: + "minimist" "^1.2.5" + +"jsprim@^1.2.2": + "integrity" "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.2.3" + "verror" "1.10.0" + +"kind-of@^3.0.2": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^3.0.3": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^3.2.0": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^4.0.0": + "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^5.0.0": + "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + "version" "5.1.0" + +"kind-of@^6.0.0", "kind-of@^6.0.2": + "integrity" "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + "version" "6.0.2" + +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" + +"latest-version@^3.0.0": + "integrity" "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=" + "resolved" "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "package-json" "^4.0.0" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levn@^0.3.0", "levn@~0.3.0": + "integrity" "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + +"lines-and-columns@^1.1.6": + "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" + "version" "1.1.6" + +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"lodash.memoize@4.x": + "integrity" "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + "version" "4.1.2" + +"lodash.sortby@^4.7.0": + "integrity" "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "resolved" "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + "version" "4.7.0" + +"lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"lowercase-keys@^1.0.0": + "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + "version" "1.0.1" + +"lru-cache@^4.0.1": + "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"make-dir@^1.0.0": + "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "pify" "^3.0.0" + +"make-dir@^2.1.0": + "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +"make-dir@^3.0.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1", "make-error@1.x": + "integrity" "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz" + "version" "1.3.5" + +"makeerror@1.0.x": + "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "tmpl" "1.0.x" + +"map-cache@^0.2.2": + "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + "version" "0.2.2" + +"map-visit@^1.0.0": + "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" + "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "object-visit" "^1.0.0" + +"media-typer@0.3.0": + "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"merge-descriptors@1.0.1": + "integrity" "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"methods@~1.1.2": + "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^3.1.10", "micromatch@^3.1.4": + "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + "version" "3.1.10" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "braces" "^2.3.1" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "extglob" "^2.0.4" + "fragment-cache" "^0.2.1" + "kind-of" "^6.0.2" + "nanomatch" "^1.2.9" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.2" + +"micromatch@^4.0.2": + "integrity" "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.0.5" + +"mime-db@1.44.0": + "integrity" "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz" + "version" "1.44.0" + +"mime-types@^2.1.12", "mime-types@~2.1.19", "mime-types@~2.1.24": + "integrity" "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz" + "version" "2.1.27" + dependencies: + "mime-db" "1.44.0" + +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"minimatch@^3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist@^1.1.1", "minimist@^1.2.0": + "integrity" "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "version" "1.2.0" + +"minimist@^1.2.5": + "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + "version" "1.2.5" + +"minimist@0.0.8": + "integrity" "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "version" "0.0.8" + +"minipass@^2.2.1", "minipass@^2.3.4": + "version" "2.3.5" + dependencies: + "safe-buffer" "^5.1.2" + "yallist" "^3.0.0" + +"minizlib@^1.1.1": + "version" "1.2.1" + dependencies: + "minipass" "^2.2.1" + +"mixin-deep@^1.2.0": + "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" + "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "for-in" "^1.0.2" + "is-extendable" "^1.0.1" + +"mkdirp@^0.5.0", "mkdirp@^0.5.1": + "integrity" "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + "version" "0.5.1" + dependencies: + "minimist" "0.0.8" + +"mkdirp@1.x": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"ms@^2.1.1": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.0.0": + "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.1": + "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + "version" "2.1.1" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"nan@^2.12.1": + "integrity" "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz" + "version" "2.14.0" + +"nanomatch@^1.2.9": + "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" + "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "fragment-cache" "^0.2.1" + "is-windows" "^1.0.2" + "kind-of" "^6.0.2" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"needle@^2.2.1": + "version" "2.3.0" + dependencies: + "debug" "^4.1.0" + "iconv-lite" "^0.4.4" + "sax" "^1.2.4" + +"negotiator@0.6.2": + "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" + "version" "0.6.2" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"node-int64@^0.4.0": + "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-modules-regexp@^1.0.0": + "integrity" "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + "resolved" "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz" + "version" "1.0.0" + +"node-notifier@^8.0.0": + "integrity" "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==" + "resolved" "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "growly" "^1.3.0" + "is-wsl" "^2.2.0" + "semver" "^7.3.2" + "shellwords" "^0.1.1" + "uuid" "^8.3.0" + "which" "^2.0.2" + +"node-pre-gyp@^0.12.0": + "version" "0.12.0" + dependencies: + "detect-libc" "^1.0.2" + "mkdirp" "^0.5.1" + "needle" "^2.2.1" + "nopt" "^4.0.1" + "npm-packlist" "^1.1.6" + "npmlog" "^4.0.2" + "rc" "^1.2.7" + "rimraf" "^2.6.1" + "semver" "^5.3.0" + "tar" "^4" + +"nodemon@^1.19.1": + "integrity" "sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg==" + "resolved" "https://registry.npmjs.org/nodemon/-/nodemon-1.19.1.tgz" + "version" "1.19.1" + dependencies: + "chokidar" "^2.1.5" + "debug" "^3.1.0" + "ignore-by-default" "^1.0.1" + "minimatch" "^3.0.4" + "pstree.remy" "^1.1.6" + "semver" "^5.5.0" + "supports-color" "^5.2.0" + "touch" "^3.1.0" + "undefsafe" "^2.0.2" + "update-notifier" "^2.5.0" + +"nopt@^4.0.1": + "version" "4.0.1" + dependencies: + "abbrev" "1" + "osenv" "^0.1.4" + +"nopt@~1.0.10": + "integrity" "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "abbrev" "1" + +"normalize-package-data@^2.5.0": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-path@^2.1.1": + "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "remove-trailing-separator" "^1.0.1" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"npm-bundled@^1.0.1": + "version" "1.0.6" + +"npm-packlist@^1.1.6": + "version" "1.4.1" + dependencies: + "ignore-walk" "^3.0.1" + "npm-bundled" "^1.0.1" + +"npm-run-path@^2.0.0": + "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"npm-run-path@^4.0.0": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npmlog@^4.0.2": + "version" "4.1.2" + dependencies: + "are-we-there-yet" "~1.1.2" + "console-control-strings" "~1.1.0" + "gauge" "~2.7.3" + "set-blocking" "~2.0.0" + +"number-is-nan@^1.0.0": + "version" "1.0.1" + +"nwsapi@^2.2.0": + "integrity" "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "resolved" "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" + "version" "2.2.0" + +"oauth-sign@~0.9.0": + "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + "version" "0.9.0" + +"object-assign@^4.1.0": + "version" "4.1.1" + +"object-assign@^4": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-copy@^0.1.0": + "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" + "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "copy-descriptor" "^0.1.0" + "define-property" "^0.2.5" + "kind-of" "^3.0.3" + +"object-inspect@^1.9.0": + "integrity" "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz" + "version" "1.12.0" + +"object-visit@^1.0.0": + "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" + "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "isobject" "^3.0.0" + +"object.pick@^1.3.0": + "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" + "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "isobject" "^3.0.1" + +"on-finished@~2.3.0": + "integrity" "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "ee-first" "1.1.1" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onchange@^6.1.0": + "integrity" "sha512-T0wvi3yzNd+Lut2ymJp2e6fTiob0TLrXnjqGaiK9MAFB8MYo/k/ZClx6ps7YhTtQ88dDm+hDHmtJXP1nJT5WNA==" + "resolved" "https://registry.npmjs.org/onchange/-/onchange-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "@blakeembrey/deque" "^1.0.3" + "arrify" "^2.0.0" + "chokidar" "^3.0.0" + "cross-spawn" "^6.0.0" + "ignore" "^5.1.4" + "minimist" "^1.2.0" + "supports-color" "^7.0.0" + "tree-kill" "^1.2.0" + +"onetime@^5.1.0": + "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "mimic-fn" "^2.1.0" + +"opencollective-postinstall@^2.0.2": + "integrity" "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==" + "resolved" "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz" + "version" "2.0.2" + +"optionator@^0.8.1", "optionator@^0.8.3": + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" + dependencies: + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.6" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "word-wrap" "~1.2.3" + +"os-homedir@^1.0.0": + "version" "1.0.2" + +"os-tmpdir@^1.0.0": + "version" "1.0.2" + +"os-tmpdir@~1.0.2": + "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"osenv@^0.1.4": + "version" "0.1.5" + dependencies: + "os-homedir" "^1.0.0" + "os-tmpdir" "^1.0.0" + +"p-each-series@^2.1.0": + "integrity" "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==" + "resolved" "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz" + "version" "2.1.0" + +"p-finally@^1.0.0": + "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + "version" "1.0.0" + +"p-limit@^2.0.0", "p-limit@^2.2.0": + "integrity" "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "p-try" "^2.0.0" + +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-limit" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"package-json@^4.0.0": + "integrity" "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=" + "resolved" "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "got" "^6.7.1" + "registry-auth-token" "^3.0.1" + "registry-url" "^3.0.3" + "semver" "^5.1.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-json@^5.0.0": + "integrity" "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + "lines-and-columns" "^1.1.6" + +"parse5@5.1.1": + "integrity" "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" + "version" "5.1.1" + +"parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" + +"pascalcase@^0.1.1": + "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + "version" "0.1.1" + +"path-dirname@^1.0.0": + "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + "version" "1.0.2" + +"path-exists@^3.0.0": + "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.1": + "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-key@^2.0.0", "path-key@^2.0.1": + "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.6": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-to-regexp@0.1.7": + "integrity" "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"path@^0.12.7": + "integrity" "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=" + "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + "version" "0.12.7" + dependencies: + "process" "^0.11.1" + "util" "^0.10.3" + +"performance-now@^2.1.0": + "integrity" "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + "version" "2.1.0" + +"picomatch@^2.0.4", "picomatch@^2.0.5", "picomatch@^2.0.7", "picomatch@^2.2.1": + "integrity" "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz" + "version" "2.2.1" + +"pify@^3.0.0": + "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + +"pirates@^4.0.1": + "integrity" "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "node-modules-regexp" "^1.0.0" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"pkg-up@^3.1.0": + "integrity" "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==" + "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "find-up" "^3.0.0" + +"please-upgrade-node@^3.2.0": + "integrity" "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==" + "resolved" "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "semver-compare" "^1.0.0" + +"posix-character-classes@^0.1.0": + "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + "version" "0.1.1" + +"prelude-ls@~1.1.2": + "integrity" "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" + +"prepend-http@^1.0.1": + "integrity" "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + "version" "1.0.4" + +"prettier-linter-helpers@^1.0.0": + "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" + "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "fast-diff" "^1.1.2" + +"prettier@^1.19.1", "prettier@>= 1.13.0": + "integrity" "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz" + "version" "1.19.1" + +"pretty-format@^25.2.1", "pretty-format@^25.5.0": + "integrity" "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "@jest/types" "^25.5.0" + "ansi-regex" "^5.0.0" + "ansi-styles" "^4.0.0" + "react-is" "^16.12.0" + +"pretty-format@^26.5.2": + "integrity" "sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-26.5.2.tgz" + "version" "26.5.2" + dependencies: + "@jest/types" "^26.5.2" + "ansi-regex" "^5.0.0" + "ansi-styles" "^4.0.0" + "react-is" "^16.12.0" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"process@^0.11.1": + "integrity" "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +"progress@^2.0.0": + "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + "version" "2.0.3" + +"prompts@^2.0.1": + "integrity" "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.4" + +"proxy-addr@~2.0.5": + "integrity" "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "forwarded" "~0.1.2" + "ipaddr.js" "1.9.1" + +"pseudomap@^1.0.2": + "integrity" "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "version" "1.0.2" + +"psl@^1.1.28": + "integrity" "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" + "version" "1.8.0" + +"pstree.remy@^1.1.6": + "integrity" "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" + "resolved" "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz" + "version" "1.1.7" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"qs@^6.6.0": + "integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + "version" "6.10.3" + dependencies: + "side-channel" "^1.0.4" + +"qs@~6.5.2": + "integrity" "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz" + "version" "6.5.2" + +"qs@6.7.0": + "integrity" "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" + "version" "6.7.0" + +"range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"raw-body@2.4.0": + "integrity" "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "bytes" "3.1.0" + "http-errors" "1.7.2" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"rc@^1.0.1", "rc@^1.1.6": + "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" + "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" + +"rc@^1.2.7": + "version" "1.2.8" + dependencies: + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" + +"react-is@^16.12.0": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + +"read-pkg-up@^7.0.1": + "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "find-up" "^4.1.0" + "read-pkg" "^5.2.0" + "type-fest" "^0.8.1" + +"read-pkg@^5.2.0": + "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "@types/normalize-package-data" "^2.4.0" + "normalize-package-data" "^2.5.0" + "parse-json" "^5.0.0" + "type-fest" "^0.6.0" + +"readable-stream@^2.0.2": + "integrity" "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz" + "version" "2.3.6" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.0.6": + "version" "2.3.6" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readdirp@^2.2.1": + "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "graceful-fs" "^4.1.11" + "micromatch" "^3.1.10" + "readable-stream" "^2.0.2" + +"readdirp@~3.3.0": + "integrity" "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "picomatch" "^2.0.7" + +"readdirp@~3.5.0": + "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" + "version" "3.5.0" + dependencies: + "picomatch" "^2.2.1" + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz" + "version" "0.13.7" + +"regex-not@^1.0.0", "regex-not@^1.0.2": + "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" + "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "extend-shallow" "^3.0.2" + "safe-regex" "^1.1.0" + +"regexpp@^2.0.1": + "integrity" "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz" + "version" "2.0.1" + +"regexpp@^3.0.0": + "integrity" "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz" + "version" "3.0.0" + +"registry-auth-token@^3.0.1": + "integrity" "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==" + "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz" + "version" "3.4.0" + dependencies: + "rc" "^1.1.6" + "safe-buffer" "^5.0.1" + +"registry-url@^3.0.3": + "integrity" "sha1-PU74cPc93h138M+aOBQyRE4XSUI=" + "resolved" "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "rc" "^1.0.1" + +"remove-trailing-separator@^1.0.1": + "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + "version" "1.1.0" + +"repeat-element@^1.1.2": + "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" + "version" "1.1.3" + +"repeat-string@^1.6.1": + "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "version" "1.6.1" + +"request-promise-core@1.1.4": + "integrity" "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==" + "resolved" "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "lodash" "^4.17.19" + +"request-promise-native@^1.0.8": + "integrity" "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==" + "resolved" "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "request-promise-core" "1.1.4" + "stealthy-require" "^1.1.1" + "tough-cookie" "^2.3.3" + +"request@^2.34", "request@^2.88.2": + "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" + "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + "version" "2.88.2" + dependencies: + "aws-sign2" "~0.7.0" + "aws4" "^1.8.0" + "caseless" "~0.12.0" + "combined-stream" "~1.0.6" + "extend" "~3.0.2" + "forever-agent" "~0.6.1" + "form-data" "~2.3.2" + "har-validator" "~5.1.3" + "http-signature" "~1.2.0" + "is-typedarray" "~1.0.0" + "isstream" "~0.1.2" + "json-stringify-safe" "~5.0.1" + "mime-types" "~2.1.19" + "oauth-sign" "~0.9.0" + "performance-now" "^2.1.0" + "qs" "~6.5.2" + "safe-buffer" "^5.1.2" + "tough-cookie" "~2.5.0" + "tunnel-agent" "^0.6.0" + "uuid" "^3.3.2" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"reselect@^4.0.0": + "integrity" "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" + "resolved" "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz" + "version" "4.0.0" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve-url@^0.2.1": + "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + "version" "0.2.1" + +"resolve@^1.10.0", "resolve@^1.13.1", "resolve@^1.17.0", "resolve@^1.3.2": + "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "path-parse" "^1.0.6" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"ret@~0.1.10": + "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + "version" "0.1.15" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^2.6.1": + "version" "2.6.3" + dependencies: + "glob" "^7.1.3" + +"rimraf@^3.0.0": + "integrity" "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "glob" "^7.1.3" + +"rimraf@2.6.3": + "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "glob" "^7.1.3" + +"rsvp@^4.8.4": + "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + "version" "4.8.5" + +"run-async@^2.2.0": + "integrity" "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "is-promise" "^2.1.0" + +"run-parallel@^1.1.9": + "integrity" "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz" + "version" "1.1.9" + +"run-script-os@^1.1.1": + "integrity" "sha512-tM3mfchUIpo9WOFioO3eO/lTgRbtqcqBmSkkqfkjXmxn7vvhwykOXxOOKIXFP+ZConvLsS5KskM3yX+XBfDD4g==" + "resolved" "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.1.tgz" + "version" "1.1.1" + +"rxjs@^6.5.3": + "integrity" "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz" + "version" "6.5.4" + dependencies: + "tslib" "^1.9.0" + +"safe-buffer@^5.0.1", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-regex@^1.1.0": + "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" + "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "ret" "~0.1.10" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sane@^4.0.3": + "integrity" "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==" + "resolved" "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "@cnakazawa/watch" "^1.0.3" + "anymatch" "^2.0.0" + "capture-exit" "^2.0.0" + "exec-sh" "^0.3.2" + "execa" "^1.0.0" + "fb-watchman" "^2.0.0" + "micromatch" "^3.1.4" + "minimist" "^1.1.1" + "walker" "~1.0.5" + +"sax@^1.2.4": + "version" "1.2.4" + +"saxes@^5.0.0": + "integrity" "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==" + "resolved" "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "xmlchars" "^2.2.0" + +"semver-compare@^1.0.0": + "integrity" "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + "resolved" "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" + "version" "1.0.0" + +"semver-diff@^2.0.0": + "integrity" "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=" + "resolved" "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "semver" "^5.0.3" + +"semver-regex@^2.0.0": + "integrity" "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + "resolved" "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz" + "version" "2.0.0" + +"semver@^5.0.3", "semver@^5.1.0", "semver@^5.4.1", "semver@^5.5.0", "semver@^5.6.0", "semver@2 || 3 || 4 || 5": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.3.0": + "version" "5.7.0" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.2": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.2": + "integrity" "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" + "version" "7.3.2" + +"semver@7.x": + "integrity" "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" + "version" "7.3.2" + +"send@0.17.1": + "integrity" "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.17.1.tgz" + "version" "0.17.1" + dependencies: + "debug" "2.6.9" + "depd" "~1.1.2" + "destroy" "~1.0.4" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "~1.7.2" + "mime" "1.6.0" + "ms" "2.1.1" + "on-finished" "~2.3.0" + "range-parser" "~1.2.1" + "statuses" "~1.5.0" + +"serve-static@1.14.1": + "integrity" "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.17.1" + +"set-blocking@^2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-blocking@~2.0.0": + "version" "2.0.0" + +"set-value@^2.0.0", "set-value@^2.0.1": + "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" + "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "extend-shallow" "^2.0.1" + "is-extendable" "^0.1.1" + "is-plain-object" "^2.0.3" + "split-string" "^3.0.1" + +"setprototypeof@1.1.1": + "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + "version" "1.1.1" + +"shebang-command@^1.2.0": + "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shellwords@^0.1.1": + "integrity" "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "resolved" "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" + "version" "0.1.1" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.0", "signal-exit@^3.0.2": + "integrity" "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + "version" "3.0.2" + +"sisteransi@^1.0.4": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^2.0.0": + "integrity" "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "resolved" "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" + "version" "2.0.0" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^2.1.0": + "integrity" "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "astral-regex" "^1.0.0" + "is-fullwidth-code-point" "^2.0.0" + +"snapdragon-node@^2.0.1": + "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" + "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "define-property" "^1.0.0" + "isobject" "^3.0.0" + "snapdragon-util" "^3.0.1" + +"snapdragon-util@^3.0.1": + "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" + "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^3.2.0" + +"snapdragon@^0.8.1": + "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" + "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "base" "^0.11.1" + "debug" "^2.2.0" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "map-cache" "^0.2.2" + "source-map" "^0.5.6" + "source-map-resolve" "^0.5.0" + "use" "^3.1.0" + +"source-map-resolve@^0.5.0": + "integrity" "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==" + "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz" + "version" "0.5.2" + dependencies: + "atob" "^2.1.1" + "decode-uri-component" "^0.2.0" + "resolve-url" "^0.2.1" + "source-map-url" "^0.4.0" + "urix" "^0.1.0" + +"source-map-support@^0.5.6": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-url@^0.4.0": + "integrity" "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" + "version" "0.4.0" + +"source-map@^0.5.0", "source-map@^0.5.6": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.7.3": + "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + "version" "0.7.3" + +"source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz" + "version" "3.0.6" + +"split-string@^3.0.1", "split-string@^3.0.2": + "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" + "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "extend-shallow" "^3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sshpk@^1.7.0": + "integrity" "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" + "version" "1.16.1" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"stack-utils@^2.0.2": + "integrity" "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "escape-string-regexp" "^2.0.0" + +"static-extend@^0.1.1": + "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" + "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "define-property" "^0.2.5" + "object-copy" "^0.1.0" + +"statuses@>= 1.5.0 < 2", "statuses@~1.5.0": + "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" + +"stealthy-require@^1.1.1": + "integrity" "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" + "version" "1.1.1" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-length@^4.0.1": + "integrity" "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-width@^1.0.1", "string-width@^1.0.2 || 2": + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^2.0.0", "string-width@^2.1.1": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^3.0.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "emoji-regex" "^7.0.1" + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^5.1.0" + +"string-width@^4.1.0": + "integrity" "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"string-width@^4.2.0": + "integrity" "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^4.0.0": + "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" + +"strip-ansi@^5.1.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^5.2.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^6.0.0": + "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "ansi-regex" "^5.0.0" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" + +"strip-eof@^1.0.0": + "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-json-comments@^3.0.1": + "integrity" "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz" + "version" "3.0.1" + +"strip-json-comments@~2.0.1": + "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"stripe@^8.161.1": + "integrity" "sha512-ozfs8t0fxA/uvCK1DNvitSdEublOHK5CTRsrd2AWWk9LogjXcfkxmtz3KGSSQd+jyA2+rbee9TMzhJ6aabQ5WQ==" + "resolved" "https://registry.npmjs.org/stripe/-/stripe-8.209.0.tgz" + "version" "8.209.0" + dependencies: + "@types/node" ">=8.1.0" + "qs" "^6.6.0" + +"supports-color@^5.2.0", "supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"symbol-tree@^3.2.4": + "integrity" "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "resolved" "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + "version" "3.2.4" + +"table@^5.2.3": + "integrity" "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==" + "resolved" "https://registry.npmjs.org/table/-/table-5.4.6.tgz" + "version" "5.4.6" + dependencies: + "ajv" "^6.10.2" + "lodash" "^4.17.14" + "slice-ansi" "^2.1.0" + "string-width" "^3.0.0" + +"tar@^4": + "version" "4.4.8" + dependencies: + "chownr" "^1.1.1" + "fs-minipass" "^1.2.5" + "minipass" "^2.3.4" + "minizlib" "^1.1.1" + "mkdirp" "^0.5.0" + "safe-buffer" "^5.1.2" + "yallist" "^3.0.2" + +"term-size@^1.2.0": + "integrity" "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=" + "resolved" "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "execa" "^0.7.0" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@istanbuljs/schema" "^0.1.2" + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"throat@^5.0.0": + "integrity" "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + "resolved" "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz" + "version" "5.0.0" + +"through@^2.3.6": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"timed-out@^4.0.0": + "integrity" "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + "version" "4.0.1" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmpl@1.0.x": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-fast-properties@^2.0.0": + "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-object-path@^0.3.0": + "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" + "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "kind-of" "^3.0.2" + +"to-regex-range@^2.1.0": + "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"to-regex@^3.0.1", "to-regex@^3.0.2": + "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" + "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "regex-not" "^1.0.2" + "safe-regex" "^1.1.0" + +"toidentifier@1.0.0": + "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + "version" "1.0.0" + +"touch@^3.1.0": + "integrity" "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==" + "resolved" "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "nopt" "~1.0.10" + +"tough-cookie@^2.3.3": + "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tough-cookie@^3.0.1": + "integrity" "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ip-regex" "^2.1.0" + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tough-cookie@~2.5.0": + "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tr46@^2.0.2": + "integrity" "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "punycode" "^2.1.1" + +"tree-kill@^1.2.0": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" + +"ts-jest@^26.4.1": + "integrity" "sha512-F4aFq01aS6mnAAa0DljNmKr/Kk9y4HVZ1m6/rtJ0ED56cuxINGq3Q9eVAh+z5vcYKe5qnTMvv90vE8vUMFxomg==" + "resolved" "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.1.tgz" + "version" "26.4.1" + dependencies: + "@types/jest" "26.x" + "bs-logger" "0.x" + "buffer-from" "1.x" + "fast-json-stable-stringify" "2.x" + "jest-util" "^26.1.0" + "json5" "2.x" + "lodash.memoize" "4.x" + "make-error" "1.x" + "mkdirp" "1.x" + "semver" "7.x" + "yargs-parser" "20.x" + +"ts-node@^8.3.0": + "integrity" "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz" + "version" "8.3.0" + dependencies: + "arg" "^4.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "source-map-support" "^0.5.6" + "yn" "^3.0.0" + +"tslib@^1.8.1", "tslib@^1.9.0": + "integrity" "sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.11.0.tgz" + "version" "1.11.0" + +"tsutils@^3.17.1": + "integrity" "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz" + "version" "3.17.1" + dependencies: + "tslib" "^1.8.1" + +"tunnel-agent@^0.6.0": + "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"type-check@~0.3.2": + "integrity" "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "prelude-ls" "~1.1.2" + +"type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.6.0": + "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + "version" "0.6.0" + +"type-fest@^0.8.1": + "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + "version" "0.8.1" + +"type-is@~1.6.17", "type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "is-typedarray" "^1.0.0" + +"typescript@^4.0.3", "typescript@>=2.0", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.8 <5.0": + "integrity" "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz" + "version" "4.0.3" + +"undefsafe@^2.0.2": + "integrity" "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + "resolved" "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + "version" "2.0.5" + +"union-value@^1.0.0": + "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" + "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "arr-union" "^3.1.0" + "get-value" "^2.0.6" + "is-extendable" "^0.1.1" + "set-value" "^2.0.1" + +"unique-string@^1.0.0": + "integrity" "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=" + "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "crypto-random-string" "^1.0.0" + +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" + +"unset-value@^1.0.0": + "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" + "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-value" "^0.3.1" + "isobject" "^3.0.0" + +"unzip-response@^2.0.1": + "integrity" "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + "resolved" "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz" + "version" "2.0.1" + +"upath@^1.1.1": + "integrity" "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + "resolved" "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz" + "version" "1.1.2" + +"update-notifier@^2.5.0": + "integrity" "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==" + "resolved" "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "boxen" "^1.2.1" + "chalk" "^2.0.1" + "configstore" "^3.0.0" + "import-lazy" "^2.1.0" + "is-ci" "^1.0.10" + "is-installed-globally" "^0.1.0" + "is-npm" "^1.0.0" + "latest-version" "^3.0.0" + "semver-diff" "^2.0.0" + "xdg-basedir" "^3.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "punycode" "^2.1.0" + +"urix@^0.1.0": + "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + "version" "0.1.0" + +"url-parse-lax@^1.0.0": + "integrity" "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=" + "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "prepend-http" "^1.0.1" + +"use@^3.1.0": + "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + "version" "3.1.1" + +"util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util@^0.10.3": + "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + "version" "0.10.4" + dependencies: + "inherits" "2.0.3" + +"utils-merge@1.0.1": + "integrity" "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" + +"uuid@^3.3.2": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^8.3.0": + "integrity" "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz" + "version" "8.3.1" + +"v8-compile-cache@^2.0.3": + "integrity" "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz" + "version" "2.1.0" + +"v8-to-istanbul@^6.0.1": + "integrity" "sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + "convert-source-map" "^1.6.0" + "source-map" "^0.7.3" + +"validate-npm-package-license@^3.0.1": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" + +"vary@^1", "vary@~1.1.2": + "integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" + +"verror@1.10.0": + "integrity" "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" + dependencies: + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" + +"w3c-hr-time@^1.0.2": + "integrity" "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==" + "resolved" "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "browser-process-hrtime" "^1.0.0" + +"w3c-xmlserializer@^2.0.0": + "integrity" "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==" + "resolved" "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "xml-name-validator" "^3.0.0" + +"walker@^1.0.7", "walker@~1.0.5": + "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "makeerror" "1.0.x" + +"webidl-conversions@^5.0.0": + "integrity" "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + "version" "5.0.0" + +"webidl-conversions@^6.1.0": + "integrity" "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + "version" "6.1.0" + +"whatwg-encoding@^1.0.5": + "integrity" "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==" + "resolved" "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "iconv-lite" "0.4.24" + +"whatwg-mimetype@^2.3.0": + "integrity" "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + "version" "2.3.0" + +"whatwg-url@^8.0.0": + "integrity" "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz" + "version" "8.4.0" + dependencies: + "lodash.sortby" "^4.7.0" + "tr46" "^2.0.2" + "webidl-conversions" "^6.1.0" + +"which-module@^2.0.0": + "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + +"which-pm-runs@^1.0.0": + "integrity" "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + "resolved" "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz" + "version" "1.0.0" + +"which@^1.2.9": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.0": + "version" "1.1.3" + dependencies: + "string-width" "^1.0.2 || 2" + +"widest-line@^2.0.0": + "integrity" "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "string-width" "^2.1.1" + +"word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^2.0.0": + "integrity" "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + "version" "2.4.3" + dependencies: + "graceful-fs" "^4.1.11" + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.2" + +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" + +"write@1.0.3": + "integrity" "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==" + "resolved" "https://registry.npmjs.org/write/-/write-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "mkdirp" "^0.5.1" + +"ws@^7.2.3": + "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + "version" "7.4.6" + +"xdg-basedir@^3.0.0": + "integrity" "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + "resolved" "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz" + "version" "3.0.0" + +"xml-name-validator@^3.0.0": + "integrity" "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + "version" "3.0.0" + +"xmlchars@^2.2.0": + "integrity" "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "resolved" "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + "version" "2.2.0" + +"y18n@^4.0.0": + "integrity" "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz" + "version" "4.0.1" + +"yallist@^2.1.2": + "integrity" "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "version" "2.1.2" + +"yallist@^3.0.0", "yallist@^3.0.2": + "version" "3.0.3" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.7.2": + "integrity" "sha512-6qI/tTx7OVtA4qNqD0OyutbM6Z9EKu4rxWm/2Y3FDEBQ4/2X2XAnyuRXMzAE2+1BPyqzksJZtrIwblOHg0IEzA==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@babel/runtime" "^7.8.7" + +"yargs-parser@^18.1.2": + "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + "version" "18.1.3" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@20.x": + "integrity" "sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.1.tgz" + "version" "20.2.1" + +"yargs@^15.4.1": + "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + "version" "15.4.1" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.2" + +"yn@^3.0.0": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" diff --git a/packages/stripe/CHANGELOG.md b/packages/stripe/CHANGELOG.md index 5eecb4d41..fd660c02d 100644 --- a/packages/stripe/CHANGELOG.md +++ b/packages/stripe/CHANGELOG.md @@ -1,3 +1,32 @@ +## 4.0.0 +** Breaking changes ** +- Added support for iOS 15 paymentSummaryItems: PKDeferredPaymentSummaryItem and PKRecurringPaymentSummaryItem. +Adding a summary item before was: + +```dart + ApplePayCartSummaryItem( + label: 'Product Test', + amount: '0.01', +); +``` + +Becomes + +```dart +ApplePayCartSummaryItem.immediate( + label: 'Product Test', + amount: '0.01', +); +``` + +- Changed paymentsheet parameters to make it more clear which settings are used for Google Pay and Apple Pay. Changes: `merchantCountryCode` is now moved into both `PaymentSheetApplePay`and `PaymentSheetGooglePay`, `currencyCode` and `testEnv` is now part of the `PaymentSheetGooglePay` object. + +- Added possibility to add `ApplePayCartSummaryItem` to the paymensheet. + +Other changes +- Support for affirm payment method. +- Several fixes by the Stripe sdk [v.0.15.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.15.0). + ## 3.3.0 - Added the canAddCardToWallet method. - Several fixes by the Stripe sdk [v.0.14.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.14.0). diff --git a/packages/stripe/pubspec.yaml b/packages/stripe/pubspec.yaml index aca474d55..91184aa23 100644 --- a/packages/stripe/pubspec.yaml +++ b/packages/stripe/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_stripe description: Flutter library for Stripe. Supports PaymentSheets, Apple & Google Pay, SCA, PSD2 and much more. -version: 3.3.0 +version: 4.0.0 homepage: https://github.com/flutter-stripe/flutter_stripe repository: https://github.com/flutter-stripe/flutter_stripe @@ -21,9 +21,9 @@ flutter: dependencies: flutter: sdk: flutter - stripe_android: ^3.3.0 - stripe_ios: ^3.3.0 - stripe_platform_interface: ^3.3.0 + stripe_android: ^4.0.0 + stripe_ios: ^4.0.0 + stripe_platform_interface: ^4.0.0 dev_dependencies: flutter_test: sdk: flutter diff --git a/packages/stripe_android/CHANGELOG.md b/packages/stripe_android/CHANGELOG.md index 5eecb4d41..8fa3edbdd 100644 --- a/packages/stripe_android/CHANGELOG.md +++ b/packages/stripe_android/CHANGELOG.md @@ -1,3 +1,11 @@ +## 4.0.0 +** Breaking changes ** +- Changed paymentsheet parameters to make it more clear which settings are used for Google Pay and Apple Pay. Changes: `merchantCountryCode` is now moved into both `PaymentSheetApplePay`and `PaymentSheetGooglePay`, `currencyCode` and `testEnv` is now part of the `PaymentSheetGooglePay` object. + +Other changes +- Support for affirm payment method. +- Several fixes by the Stripe sdk [v.0.15.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.15.0). + ## 3.3.0 - Added the canAddCardToWallet method. - Several fixes by the Stripe sdk [v.0.14.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.14.0). diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/AuBECSDebitFormView.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/AuBECSDebitFormView.kt index 14363e0db..f158db3c4 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/AuBECSDebitFormView.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/AuBECSDebitFormView.kt @@ -10,6 +10,8 @@ import com.facebook.react.uimanager.events.EventDispatcher import com.google.android.material.shape.CornerFamily import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.ShapeAppearanceModel +import com.reactnativestripesdk.utils.getIntOrNull +import com.reactnativestripesdk.utils.getValOr import com.stripe.android.databinding.BecsDebitWidgetBinding import com.stripe.android.model.PaymentMethodCreateParams import com.stripe.android.view.BecsDebitWidget diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFieldView.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFieldView.kt index 02d1e94f9..da6a26e15 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFieldView.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFieldView.kt @@ -5,6 +5,7 @@ import android.graphics.Color import android.graphics.Typeface import android.os.Build import android.text.Editable +import android.text.InputFilter import android.text.TextWatcher import android.util.Log import android.widget.FrameLayout @@ -16,6 +17,8 @@ import com.facebook.react.uimanager.events.EventDispatcher import com.google.android.material.shape.CornerFamily import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.ShapeAppearanceModel +import com.reactnativestripesdk.utils.* +import com.reactnativestripesdk.utils.mapCardBrand import com.stripe.android.core.model.CountryCode import com.stripe.android.core.model.CountryUtils import com.stripe.android.databinding.CardInputWidgetBinding @@ -205,12 +208,11 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) { * We can reliable assume that setPostalCodeEnabled is called before * setCountryCode because of the order of the props in CardField.tsx */ - fun setCountryCode(countryCode: String?) { + fun setCountryCode(countryString: String?) { if (mCardWidget.postalCodeEnabled) { - val doesCountryUsePostalCode = CountryUtils.doesCountryUsePostalCode( - CountryCode.create(value = countryCode ?: LocaleListCompat.getAdjustedDefault()[0].country) - ) - mCardWidget.postalCodeRequired = doesCountryUsePostalCode + val countryCode = CountryCode.create(value = countryString ?: LocaleListCompat.getAdjustedDefault()[0].country) + mCardWidget.postalCodeRequired = CountryUtils.doesCountryUsePostalCode(countryCode) + setPostalCodeFilter(countryCode) } } @@ -336,6 +338,26 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) { }) } + private fun setPostalCodeFilter(countryCode: CountryCode) { + cardInputWidgetBinding.postalCodeEditText.filters = arrayOf( + *cardInputWidgetBinding.postalCodeEditText.filters, + createPostalCodeInputFilter(countryCode) + ) + } + + private fun createPostalCodeInputFilter(countryCode: CountryCode): InputFilter { + return InputFilter { charSequence, start, end, _, _, _ -> + for (i in start until end) { + val isValidCharacter = (countryCode == CountryCode.US && PostalCodeUtilities.isValidUsPostalCodeCharacter(charSequence[i])) || + (countryCode != CountryCode.US && PostalCodeUtilities.isValidGlobalPostalCodeCharacter(charSequence[i])) + if (!isValidCharacter) { + return@InputFilter "" + } + } + return@InputFilter null + } + } + override fun requestLayout() { super.requestLayout() post(mLayoutRunnable) diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFormView.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFormView.kt index 1610d3ff9..0fbfba9a1 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFormView.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/CardFormView.kt @@ -4,6 +4,7 @@ import android.content.res.ColorStateList import android.graphics.Color import android.graphics.Typeface import android.os.Build +import android.text.InputFilter import android.view.View import android.view.View.OnFocusChangeListener import android.widget.FrameLayout @@ -14,6 +15,8 @@ import com.facebook.react.uimanager.events.EventDispatcher import com.google.android.material.shape.CornerFamily import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.ShapeAppearanceModel +import com.reactnativestripesdk.utils.* +import com.reactnativestripesdk.utils.mapCardBrand import com.stripe.android.core.model.CountryCode import com.stripe.android.databinding.CardMultilineWidgetBinding import com.stripe.android.databinding.StripeCardFormViewBinding @@ -52,10 +55,15 @@ class CardFormView(context: ThemedReactContext) : FrameLayout(context) { } fun setDefaultValues(defaults: ReadableMap) { - defaults.getString("countryCode")?.let { - cardFormViewBinding.countryLayout.setSelectedCountryCode(CountryCode(it)) - cardFormViewBinding.countryLayout.updateUiForCountryEntered(CountryCode(it)) + setCountry(defaults.getString("countryCode")) + } + + private fun setCountry(countryString: String?) { + if (countryString != null) { + cardFormViewBinding.countryLayout.setSelectedCountryCode(CountryCode(countryString)) + cardFormViewBinding.countryLayout.updateUiForCountryEntered(CountryCode(countryString)) } + setPostalCodeFilter() } fun setPlaceHolders(value: ReadableMap) { @@ -256,6 +264,29 @@ class CardFormView(context: ThemedReactContext) : FrameLayout(context) { } } + private fun setPostalCodeFilter() { + cardFormViewBinding.postalCode.filters = arrayOf( + *cardFormViewBinding.postalCode.filters, + createPostalCodeInputFilter() + ) + } + + private fun createPostalCodeInputFilter(): InputFilter { + return InputFilter { charSequence, start, end, _, _, _ -> + if (cardFormViewBinding.countryLayout.getSelectedCountryCode() == CountryCode.US) { + // Rely on CardFormView's built-in US postal code filter + return@InputFilter null + } + + for (i in start until end) { + if (!PostalCodeUtilities.isValidGlobalPostalCodeCharacter(charSequence[i])) { + return@InputFilter "" + } + } + return@InputFilter null + } + } + override fun requestLayout() { super.requestLayout() post(mLayoutRunnable) diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/GooglePayFragment.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/GooglePayFragment.kt index 703c49789..2f200fb40 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/GooglePayFragment.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/GooglePayFragment.kt @@ -8,6 +8,10 @@ import android.widget.FrameLayout import androidx.fragment.app.Fragment import com.facebook.react.bridge.Promise import com.facebook.react.bridge.WritableNativeMap +import com.reactnativestripesdk.utils.GooglePayErrorType +import com.reactnativestripesdk.utils.createError +import com.reactnativestripesdk.utils.createResult +import com.reactnativestripesdk.utils.mapFromPaymentMethod import com.stripe.android.googlepaylauncher.GooglePayEnvironment import com.stripe.android.googlepaylauncher.GooglePayLauncher import com.stripe.android.googlepaylauncher.GooglePayPaymentMethodLauncher diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt index c96c34c58..588b6c18f 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt @@ -1,10 +1,13 @@ package com.reactnativestripesdk import com.facebook.react.bridge.ReadableMap +import com.reactnativestripesdk.utils.* +import com.reactnativestripesdk.utils.mapToBillingDetails +import com.reactnativestripesdk.utils.mapToUSBankAccountHolderType +import com.reactnativestripesdk.utils.mapToUSBankAccountType import com.stripe.android.model.* class PaymentMethodCreateParamsFactory( - private val clientSecret: String, private val paymentMethodData: ReadableMap?, private val options: ReadableMap, private val cardFieldView: CardFieldView?, @@ -13,26 +16,27 @@ class PaymentMethodCreateParamsFactory( private val billingDetailsParams = mapToBillingDetails(getMapOrNull(paymentMethodData, "billingDetails"), cardFieldView?.cardAddress ?: cardFormView?.cardAddress) @Throws(PaymentMethodCreateParamsException::class) - fun createConfirmParams(paymentMethodType: PaymentMethod.Type): ConfirmPaymentIntentParams { + fun createPaymentMethodParams(paymentMethodType: PaymentMethod.Type): PaymentMethodCreateParams { try { return when (paymentMethodType) { - PaymentMethod.Type.Card -> createCardPaymentConfirmParams() - PaymentMethod.Type.Ideal -> createIDEALPaymentConfirmParams() - PaymentMethod.Type.Alipay -> createAlipayPaymentConfirmParams() - PaymentMethod.Type.Sofort -> createSofortPaymentConfirmParams() - PaymentMethod.Type.Bancontact -> createBancontactPaymentConfirmParams() - PaymentMethod.Type.SepaDebit -> createSepaPaymentConfirmParams() - PaymentMethod.Type.Oxxo -> createOXXOPaymentConfirmParams() - PaymentMethod.Type.Giropay -> createGiropayPaymentConfirmParams() - PaymentMethod.Type.Eps -> createEPSPaymentConfirmParams() - PaymentMethod.Type.GrabPay -> createGrabPayPaymentConfirmParams() - PaymentMethod.Type.P24 -> createP24PaymentConfirmParams() - PaymentMethod.Type.Fpx -> createFpxPaymentConfirmParams() - PaymentMethod.Type.AfterpayClearpay -> createAfterpayClearpayPaymentConfirmParams() - PaymentMethod.Type.AuBecsDebit -> createAuBecsDebitPaymentConfirmParams() - PaymentMethod.Type.Klarna -> createKlarnaPaymentConfirmParams() - PaymentMethod.Type.USBankAccount -> createUSBankAccountPaymentConfirmParams() - PaymentMethod.Type.PayPal -> createPayPalPaymentConfirmParams() + PaymentMethod.Type.Card -> createCardPaymentMethodParams() + PaymentMethod.Type.Ideal -> createIDEALParams() + PaymentMethod.Type.Alipay -> createAlipayParams() + PaymentMethod.Type.Sofort -> createSofortParams() + PaymentMethod.Type.Bancontact -> createBancontactParams() + PaymentMethod.Type.SepaDebit -> createSepaParams() + PaymentMethod.Type.Oxxo -> createOXXOParams() + PaymentMethod.Type.Giropay -> createGiropayParams() + PaymentMethod.Type.Eps -> createEPSParams() + PaymentMethod.Type.GrabPay -> createGrabPayParams() + PaymentMethod.Type.P24 -> createP24Params() + PaymentMethod.Type.Fpx -> createFpxParams() + PaymentMethod.Type.AfterpayClearpay -> createAfterpayClearpayParams() + PaymentMethod.Type.AuBecsDebit -> createAuBecsDebitParams() + PaymentMethod.Type.Klarna -> createKlarnaParams() + PaymentMethod.Type.USBankAccount -> createUSBankAccountParams(paymentMethodData) + PaymentMethod.Type.PayPal -> createPayPalParams() + PaymentMethod.Type.Affirm -> createAffirmParams() else -> { throw Exception("This paymentMethodType is not supported yet") } @@ -43,351 +47,116 @@ class PaymentMethodCreateParamsFactory( } @Throws(PaymentMethodCreateParamsException::class) - fun createSetupParams(paymentMethodType: PaymentMethod.Type): ConfirmSetupIntentParams { - try { - return when (paymentMethodType) { - PaymentMethod.Type.Card -> createCardPaymentSetupParams() - PaymentMethod.Type.Ideal -> createIDEALPaymentSetupParams() - PaymentMethod.Type.Sofort -> createSofortPaymentSetupParams() - PaymentMethod.Type.Bancontact -> createBancontactPaymentSetupParams() - PaymentMethod.Type.SepaDebit -> createSepaPaymentSetupParams() - PaymentMethod.Type.AuBecsDebit -> createAuBecsDebitPaymentSetupParams() - PaymentMethod.Type.USBankAccount -> createUSBankAccountPaymentSetupParams() - PaymentMethod.Type.PayPal -> createPayPalPaymentSetupParams() - else -> { - throw Exception("This paymentMethodType is not supported yet") - } - } - } catch (error: PaymentMethodCreateParamsException) { - throw error - } - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createIDEALPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createIDEALParams(): PaymentMethodCreateParams { val bankName = getValOr(paymentMethodData, "bankName", null) val idealParams = PaymentMethodCreateParams.Ideal(bankName) - val createParams = - PaymentMethodCreateParams.create(ideal = idealParams, billingDetails = billingDetailsParams) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = createParams, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), - ) - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createP24PaymentConfirmParams(): ConfirmPaymentIntentParams { - billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createP24(it) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), - ) - } - - throw PaymentMethodCreateParamsException("You must provide billing details") - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createCardPaymentConfirmParams(): ConfirmPaymentIntentParams { - val paymentMethodId = getValOr(paymentMethodData, "paymentMethodId", null) - val token = getValOr(paymentMethodData, "token", null) - - val cardParams = cardFieldView?.cardParams ?: cardFormView?.cardParams - - if (cardParams == null && paymentMethodId == null && token == null) { - throw PaymentMethodCreateParamsException("Card details not complete") - } - - val setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - - if (paymentMethodId != null) { - val cvc = getValOr(paymentMethodData, "cvc", null) - val paymentMethodOptionParams = - if (cvc != null) PaymentMethodOptionsParams.Card(cvc) else null - - return ConfirmPaymentIntentParams.createWithPaymentMethodId( - paymentMethodId = paymentMethodId, - paymentMethodOptions = paymentMethodOptionParams, - clientSecret = clientSecret, - setupFutureUsage = setupFutureUsage, - ) - } else { - var card = cardParams - if (token != null) { - card = PaymentMethodCreateParams.Card.create(token) - } - - val paymentMethodCreateParams = PaymentMethodCreateParams.create(card!!, billingDetailsParams) - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = paymentMethodCreateParams, - clientSecret = clientSecret, - setupFutureUsage = setupFutureUsage, - ) - } + return PaymentMethodCreateParams.create(ideal = idealParams, billingDetails = billingDetailsParams) } @Throws(PaymentMethodCreateParamsException::class) - private fun createIDEALPaymentSetupParams(): ConfirmSetupIntentParams { - val bankName = getValOr(paymentMethodData, "bankName", null) - - val idealParams = PaymentMethodCreateParams.Ideal(bankName) - val createParams = - PaymentMethodCreateParams.create(ideal = idealParams, billingDetails = billingDetailsParams) - - return ConfirmSetupIntentParams.create( - paymentMethodCreateParams = createParams, - clientSecret = clientSecret, - ) + private fun createAlipayParams(): PaymentMethodCreateParams { + return PaymentMethodCreateParams.createAlipay() } @Throws(PaymentMethodCreateParamsException::class) - private fun createSepaPaymentSetupParams(): ConfirmSetupIntentParams { - billingDetailsParams?.let { - val iban = getValOr(paymentMethodData, "iban", null) ?: run { - throw PaymentMethodCreateParamsException("You must provide IBAN") - } - - val sepaParams = PaymentMethodCreateParams.SepaDebit(iban) - val createParams = - PaymentMethodCreateParams.create( - sepaDebit = sepaParams, - billingDetails = it - ) - - return ConfirmSetupIntentParams.create( - paymentMethodCreateParams = createParams, - clientSecret = clientSecret - ) - } - - throw PaymentMethodCreateParamsException("You must provide billing details") - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createCardPaymentSetupParams(): ConfirmSetupIntentParams { - val paymentMethodId = getValOr(paymentMethodData, "paymentMethodId", null) - val token = getValOr(paymentMethodData, "token", null) - val cardParams = cardFieldView?.cardParams ?: cardFormView?.cardParams - - if (paymentMethodId != null) { - return ConfirmSetupIntentParams.create( - paymentMethodId, - clientSecret - ) - } - - val paymentMethodCreateParams = - if (token != null) - PaymentMethodCreateParams.create(PaymentMethodCreateParams.Card.create(token), billingDetailsParams) - else if (cardParams != null) - PaymentMethodCreateParams.create(cardParams, billingDetailsParams) - else - null - - if (paymentMethodCreateParams != null) { - return ConfirmSetupIntentParams - .create(paymentMethodCreateParams, clientSecret) - } else { - throw PaymentMethodCreateParamsException("Card details not complete") - } - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createAlipayPaymentConfirmParams(): ConfirmPaymentIntentParams { - return ConfirmPaymentIntentParams.createAlipay(clientSecret) - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createSofortPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createSofortParams(): PaymentMethodCreateParams { val country = getValOr(paymentMethodData, "country", null) ?: run { throw PaymentMethodCreateParamsException("You must provide bank account country") } - val params = PaymentMethodCreateParams.create( + return PaymentMethodCreateParams.create( PaymentMethodCreateParams.Sofort(country = country), billingDetailsParams ) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), - ) } @Throws(PaymentMethodCreateParamsException::class) - private fun createSofortPaymentSetupParams(): ConfirmSetupIntentParams { - val country = getValOr(paymentMethodData, "country", null) - ?: throw PaymentMethodCreateParamsException("You must provide country") - - val params = PaymentMethodCreateParams.create( - PaymentMethodCreateParams.Sofort(country = country), - billingDetailsParams - ) - - return ConfirmSetupIntentParams.create( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - ) - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createGrabPayPaymentConfirmParams(): ConfirmPaymentIntentParams { - val billingDetails = billingDetailsParams ?: PaymentMethod.BillingDetails() - val params = PaymentMethodCreateParams.createGrabPay(billingDetails) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), - ) - } - - @Throws(PaymentMethodCreateParamsException::class) - private fun createBancontactPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createBancontactParams(): PaymentMethodCreateParams { billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createBancontact(it) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), - ) + return PaymentMethodCreateParams.createBancontact(it) } throw PaymentMethodCreateParamsException("You must provide billing details") } - private fun createBancontactPaymentSetupParams(): ConfirmSetupIntentParams { + @Throws(PaymentMethodCreateParamsException::class) + private fun createSepaParams(): PaymentMethodCreateParams { billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createBancontact(it) + val iban = getValOr(paymentMethodData, "iban", null) ?: run { + throw PaymentMethodCreateParamsException("You must provide IBAN") + } - return ConfirmSetupIntentParams - .create( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - ) + return PaymentMethodCreateParams.create( + sepaDebit = PaymentMethodCreateParams.SepaDebit(iban), + billingDetails = it + ) } throw PaymentMethodCreateParamsException("You must provide billing details") } @Throws(PaymentMethodCreateParamsException::class) - private fun createOXXOPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createOXXOParams(): PaymentMethodCreateParams { billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createOxxo(it) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + return PaymentMethodCreateParams.createOxxo(it) } throw PaymentMethodCreateParamsException("You must provide billing details") } @Throws(PaymentMethodCreateParamsException::class) - private fun createEPSPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createGiropayParams(): PaymentMethodCreateParams { billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createEps(it) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + return PaymentMethodCreateParams.createGiropay(it) } throw PaymentMethodCreateParamsException("You must provide billing details") } @Throws(PaymentMethodCreateParamsException::class) - private fun createGiropayPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createEPSParams(): PaymentMethodCreateParams { billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createGiropay(it) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + return PaymentMethodCreateParams.createEps(it) } throw PaymentMethodCreateParamsException("You must provide billing details") } @Throws(PaymentMethodCreateParamsException::class) - private fun createSepaPaymentConfirmParams(): ConfirmPaymentIntentParams { - billingDetailsParams?.let { - val iban = getValOr(paymentMethodData, "iban", null) ?: run { - throw PaymentMethodCreateParamsException("You must provide IBAN") - } - - val params = PaymentMethodCreateParams.create( - sepaDebit = PaymentMethodCreateParams.SepaDebit(iban), - billingDetails = it - ) + private fun createGrabPayParams(): PaymentMethodCreateParams { + val billingDetails = billingDetailsParams ?: PaymentMethod.BillingDetails() + return PaymentMethodCreateParams.createGrabPay(billingDetails) + } - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + @Throws(PaymentMethodCreateParamsException::class) + private fun createP24Params(): PaymentMethodCreateParams { + billingDetailsParams?.let { + return PaymentMethodCreateParams.createP24(it) } throw PaymentMethodCreateParamsException("You must provide billing details") } @Throws(PaymentMethodCreateParamsException::class) - private fun createFpxPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createFpxParams(): PaymentMethodCreateParams { val bank = getBooleanOrFalse(paymentMethodData, "testOfflineBank").let { "test_offline_bank" } - val params = PaymentMethodCreateParams.create( + return PaymentMethodCreateParams.create( PaymentMethodCreateParams.Fpx(bank) ) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) } @Throws(PaymentMethodCreateParamsException::class) - private fun createAfterpayClearpayPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createAfterpayClearpayParams(): PaymentMethodCreateParams { billingDetailsParams?.let { - val params = PaymentMethodCreateParams.createAfterpayClearpay(it) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + return PaymentMethodCreateParams.createAfterpayClearpay(it) } throw PaymentMethodCreateParamsException("You must provide billing details") } @Throws(PaymentMethodCreateParamsException::class) - private fun createAuBecsDebitPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createAuBecsDebitParams(): PaymentMethodCreateParams { val formDetails = getMapOrNull(paymentMethodData, "formDetails") ?: run { throw PaymentMethodCreateParamsException("You must provide form details") } @@ -402,129 +171,206 @@ class PaymentMethodCreateParamsFactory( .setEmail(email) .build() - val params = PaymentMethodCreateParams.create( + return PaymentMethodCreateParams.create( auBecsDebit = PaymentMethodCreateParams.AuBecsDebit( bsbNumber = bsbNumber, accountNumber = accountNumber ), billingDetails = billingDetails ) - - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) } @Throws(PaymentMethodCreateParamsException::class) - private fun createAuBecsDebitPaymentSetupParams(): ConfirmSetupIntentParams { - val formDetails = getMapOrNull(paymentMethodData, "formDetails") ?: run { - throw PaymentMethodCreateParamsException("You must provide form details") + private fun createKlarnaParams(): PaymentMethodCreateParams { + if (billingDetailsParams == null || + billingDetailsParams.address?.country.isNullOrBlank() || + billingDetailsParams.email.isNullOrBlank() + ) { + throw PaymentMethodCreateParamsException("Klarna requires that you provide the following billing details: email, country") } - val bsbNumber = getValOr(formDetails, "bsbNumber") as String - val accountNumber = getValOr(formDetails, "accountNumber") as String - val name = getValOr(formDetails, "name") as String - val email = getValOr(formDetails, "email") as String - - val billingDetails = PaymentMethod.BillingDetails.Builder() - .setName(name) - .setEmail(email) - .build() + return PaymentMethodCreateParams.createKlarna(billingDetailsParams) + } - val params = PaymentMethodCreateParams.create( - auBecsDebit = PaymentMethodCreateParams.AuBecsDebit( - bsbNumber = bsbNumber, - accountNumber = accountNumber - ), - billingDetails = billingDetails - ) + @Throws(PaymentMethodCreateParamsException::class) + private fun createPayPalParams(): PaymentMethodCreateParams { + return PaymentMethodCreateParams.createPayPal(null) + } - return ConfirmSetupIntentParams - .create( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - ) + @Throws(PaymentMethodCreateParamsException::class) + private fun createAffirmParams(): PaymentMethodCreateParams { + return PaymentMethodCreateParams.createAffirm(billingDetailsParams) } @Throws(PaymentMethodCreateParamsException::class) - private fun createUSBankAccountPaymentSetupParams(): ConfirmSetupIntentParams { - // If payment method data is supplied, assume they are passing in the bank details manually - paymentMethodData?.let { - if (billingDetailsParams?.name.isNullOrBlank()) { - throw PaymentMethodCreateParamsException("When creating a US bank account payment method, you must provide the following billing details: name") + fun createParams(clientSecret: String, paymentMethodType: PaymentMethod.Type, isPaymentIntent: Boolean): ConfirmStripeIntentParams { + try { + return when (paymentMethodType) { + PaymentMethod.Type.Card -> createCardStripeIntentParams(clientSecret, isPaymentIntent) + PaymentMethod.Type.USBankAccount -> createUSBankAccountStripeIntentParams(clientSecret, isPaymentIntent) + PaymentMethod.Type.PayPal -> createPayPalStripeIntentParams(clientSecret, isPaymentIntent) + PaymentMethod.Type.Affirm -> createAffirmStripeIntentParams(clientSecret, isPaymentIntent) + + PaymentMethod.Type.Ideal, + PaymentMethod.Type.Alipay, + PaymentMethod.Type.Sofort, + PaymentMethod.Type.Bancontact, + PaymentMethod.Type.SepaDebit, + PaymentMethod.Type.Oxxo, + PaymentMethod.Type.Giropay, + PaymentMethod.Type.Eps, + PaymentMethod.Type.GrabPay, + PaymentMethod.Type.P24, + PaymentMethod.Type.Fpx, + PaymentMethod.Type.AfterpayClearpay, + PaymentMethod.Type.AuBecsDebit, + PaymentMethod.Type.Klarna -> { + val params = createPaymentMethodParams(paymentMethodType) + + return if (isPaymentIntent) { + ConfirmPaymentIntentParams + .createWithPaymentMethodCreateParams( + paymentMethodCreateParams = params, + clientSecret = clientSecret, + setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), + ) + } else { + ConfirmSetupIntentParams.create( + paymentMethodCreateParams = params, + clientSecret = clientSecret, + ) + } + } + else -> { + throw Exception("This paymentMethodType is not supported yet") + } } - return ConfirmSetupIntentParams.create( - paymentMethodCreateParams = createUSBankAccountParams(paymentMethodData), - clientSecret = clientSecret, - ) - } ?: run { - // Payment method is assumed to be already attached through via collectBankAccount - return ConfirmSetupIntentParams.create( - clientSecret = clientSecret, - paymentMethodType = PaymentMethod.Type.USBankAccount - ) + } catch (error: PaymentMethodCreateParamsException) { + throw error } } @Throws(PaymentMethodCreateParamsException::class) - private fun createPayPalPaymentSetupParams(): ConfirmSetupIntentParams { - throw PaymentMethodCreateParamsException("PayPal is not yet supported through SetupIntents.") + private fun createCardPaymentMethodParams(): PaymentMethodCreateParams { + val token = getValOr(paymentMethodData, "token", null) + var cardParams = cardFieldView?.cardParams ?: cardFormView?.cardParams + + if (token != null) { + cardParams = PaymentMethodCreateParams.Card.create(token) + } + + if (cardParams == null) { + throw PaymentMethodCreateParamsException("Card details not complete") + } + + return PaymentMethodCreateParams.create(cardParams, billingDetailsParams) } @Throws(PaymentMethodCreateParamsException::class) - private fun createKlarnaPaymentConfirmParams(): ConfirmPaymentIntentParams { - if (billingDetailsParams == null || - billingDetailsParams.address?.country.isNullOrBlank() || - billingDetailsParams.email.isNullOrBlank() - ) { - throw PaymentMethodCreateParamsException("Klarna requires that you provide the following billing details: email, country") - } + private fun createCardStripeIntentParams(clientSecret: String, isPaymentIntent: Boolean): ConfirmStripeIntentParams { + val paymentMethodId = getValOr(paymentMethodData, "paymentMethodId", null) + val setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - val params = PaymentMethodCreateParams.createKlarna(billingDetailsParams) + if (paymentMethodId != null) { + val cvc = getValOr(paymentMethodData, "cvc", null) + val paymentMethodOptionParams = + if (cvc != null) PaymentMethodOptionsParams.Card(cvc) else null - return ConfirmPaymentIntentParams - .createWithPaymentMethodCreateParams( - paymentMethodCreateParams = params, - clientSecret = clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + return ( + if (isPaymentIntent) + ConfirmPaymentIntentParams.createWithPaymentMethodId( + paymentMethodId, + paymentMethodOptions = paymentMethodOptionParams, + clientSecret = clientSecret, + setupFutureUsage = setupFutureUsage) + else + ConfirmSetupIntentParams.create( + paymentMethodId, + clientSecret) + ) + } else { + val paymentMethodCreateParams = createCardPaymentMethodParams() + return ( + if (isPaymentIntent) + ConfirmPaymentIntentParams + .createWithPaymentMethodCreateParams( + paymentMethodCreateParams, + clientSecret, + setupFutureUsage = setupFutureUsage) + else + ConfirmSetupIntentParams + .create(paymentMethodCreateParams, clientSecret) + ) + } } @Throws(PaymentMethodCreateParamsException::class) - private fun createUSBankAccountPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createUSBankAccountStripeIntentParams(clientSecret: String, isPaymentIntent: Boolean): ConfirmStripeIntentParams { // If payment method data is supplied, assume they are passing in the bank details manually paymentMethodData?.let { if (billingDetailsParams?.name.isNullOrBlank()) { throw PaymentMethodCreateParamsException("When creating a US bank account payment method, you must provide the following billing details: name") } - - return ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams( - paymentMethodCreateParams = createUSBankAccountParams(paymentMethodData), - clientSecret, - setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) - ) + return if (isPaymentIntent) { + ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams( + paymentMethodCreateParams = createUSBankAccountParams(paymentMethodData), + clientSecret, + setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")) + ) + } else { + ConfirmSetupIntentParams.create( + paymentMethodCreateParams = createUSBankAccountParams(paymentMethodData), + clientSecret = clientSecret, + ) + } } ?: run { // Payment method is assumed to be already attached through via collectBankAccount - return ConfirmPaymentIntentParams.create( - clientSecret = clientSecret, - paymentMethodType = PaymentMethod.Type.USBankAccount - ) + return if (isPaymentIntent) { + ConfirmPaymentIntentParams.create( + clientSecret = clientSecret, + paymentMethodType = PaymentMethod.Type.USBankAccount + ) + } else { + ConfirmSetupIntentParams.create( + clientSecret = clientSecret, + paymentMethodType = PaymentMethod.Type.USBankAccount + ) + } } } @Throws(PaymentMethodCreateParamsException::class) - private fun createPayPalPaymentConfirmParams(): ConfirmPaymentIntentParams { + private fun createPayPalStripeIntentParams(clientSecret: String, isPaymentIntent: Boolean): ConfirmStripeIntentParams { + if (!isPaymentIntent) { + throw PaymentMethodCreateParamsException("PayPal is not yet supported through SetupIntents.") + } + + val params = createPayPalParams() + return ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams( - paymentMethodCreateParams = PaymentMethodCreateParams.createPayPal(null), + paymentMethodCreateParams = params, clientSecret = clientSecret, ) } @Throws(PaymentMethodCreateParamsException::class) - private fun createUSBankAccountParams(params: ReadableMap): PaymentMethodCreateParams { + private fun createAffirmStripeIntentParams(clientSecret: String, isPaymentIntent: Boolean): ConfirmStripeIntentParams { + if (!isPaymentIntent) { + throw PaymentMethodCreateParamsException("Affirm is not yet supported through SetupIntents.") + } + + val params = createAffirmParams() + + return ConfirmPaymentIntentParams + .createWithPaymentMethodCreateParams( + paymentMethodCreateParams = params, + clientSecret = clientSecret, + setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")), + ) + } + + @Throws(PaymentMethodCreateParamsException::class) + private fun createUSBankAccountParams(params: ReadableMap?): PaymentMethodCreateParams { val accountNumber = getValOr(params, "accountNumber", null) val routingNumber = getValOr(params, "routingNumber", null) diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetAppearance.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetAppearance.kt index 22f731c4b..2e97eb7b0 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetAppearance.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetAppearance.kt @@ -2,6 +2,7 @@ package com.reactnativestripesdk import android.graphics.Color import android.os.Bundle +import com.reactnativestripesdk.utils.PaymentSheetAppearanceException import com.stripe.android.paymentsheet.PaymentSheet fun PaymentSheetFragment.buildPaymentSheetAppearance(userParams: Bundle?): PaymentSheet.Appearance { diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetFragment.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetFragment.kt index 9ee177d34..2e5e9ebb5 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetFragment.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentSheetFragment.kt @@ -18,6 +18,9 @@ import com.facebook.react.bridge.Promise import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.WritableMap import com.facebook.react.bridge.WritableNativeMap +import com.reactnativestripesdk.utils.* +import com.reactnativestripesdk.utils.createError +import com.reactnativestripesdk.utils.createResult import com.stripe.android.paymentsheet.PaymentOptionCallback import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult @@ -55,10 +58,7 @@ class PaymentSheetFragment( } val customerId = arguments?.getString("customerId").orEmpty() val customerEphemeralKeySecret = arguments?.getString("customerEphemeralKeySecret").orEmpty() - val countryCode = arguments?.getString("merchantCountryCode").orEmpty() - val currencyCode = arguments?.getString("currencyCode").orEmpty() - val googlePayEnabled = arguments?.getBoolean("googlePay") - val testEnv = arguments?.getBoolean("testEnv") + val googlePayConfig = buildGooglePayConfig(arguments?.getBundle("googlePay")) val allowsDelayedPaymentMethods = arguments?.getBoolean("allowsDelayedPaymentMethods") val billingDetailsBundle = arguments?.getBundle("defaultBillingDetails") paymentIntentClientSecret = arguments?.getString("paymentIntentClientSecret").orEmpty() @@ -71,37 +71,29 @@ class PaymentSheetFragment( } val paymentOptionCallback = PaymentOptionCallback { paymentOption -> - if (paymentOption != null) { - val bitmap = getBitmapFromVectorDrawable(context, paymentOption.drawableResourceId) + val result = paymentOption?.let { + val bitmap = getBitmapFromVectorDrawable(context, it.drawableResourceId) val imageString = getBase64FromBitmap(bitmap) val option: WritableMap = WritableNativeMap() - option.putString("label", paymentOption.label) + option.putString("label", it.label) option.putString("image", imageString) - presentPromise?.resolve(createResult("paymentOption", option)) - } else { - presentPromise?.resolve(createError(PaymentSheetErrorType.Canceled.toString(), "The payment option selection flow has been canceled")) + createResult("paymentOption", option) + } ?: run { + createError(PaymentSheetErrorType.Canceled.toString(), "The payment option selection flow has been canceled") } + presentPromise?.resolve(result) } val paymentResultCallback = PaymentSheetResultCallback { paymentResult -> when (paymentResult) { is PaymentSheetResult.Canceled -> { - val message = "The payment flow has been canceled" - confirmPromise?.resolve(createError(PaymentSheetErrorType.Canceled.toString(), message)) - ?: run { - presentPromise?.resolve(createError(PaymentSheetErrorType.Canceled.toString(), message)) - } + resolvePaymentResult(createError(PaymentSheetErrorType.Canceled.toString(), "The payment flow has been canceled")) } is PaymentSheetResult.Failed -> { - confirmPromise?.resolve(createError(PaymentSheetErrorType.Failed.toString(), paymentResult.error)) - ?: run { - presentPromise?.resolve(createError(PaymentSheetErrorType.Failed.toString(), paymentResult.error)) - } + resolvePaymentResult(createError(PaymentSheetErrorType.Failed.toString(), paymentResult.error)) } is PaymentSheetResult.Completed -> { - confirmPromise?.resolve(WritableNativeMap()) ?: run { - presentPromise?.resolve(WritableNativeMap()) - } + resolvePaymentResult(WritableNativeMap()) // Remove the fragment now, we can be sure it won't be needed again if an intent is successful (context.currentActivity as? AppCompatActivity)?.supportFragmentManager?.beginTransaction()?.remove(this)?.commitAllowingStateLoss() } @@ -133,11 +125,7 @@ class PaymentSheetFragment( id = customerId, ephemeralKeySecret = customerEphemeralKeySecret ) else null, - googlePay = if (googlePayEnabled == true) PaymentSheet.GooglePayConfiguration( - environment = if (testEnv == true) PaymentSheet.GooglePayConfiguration.Environment.Test else PaymentSheet.GooglePayConfiguration.Environment.Production, - countryCode = countryCode, - currencyCode = currencyCode - ) else null, + googlePay = googlePayConfig, appearance = appearance ) @@ -197,6 +185,33 @@ class PaymentSheetFragment( ) } } + + private fun resolvePaymentResult(map: WritableMap) { + confirmPromise?.let { + it.resolve(map) + confirmPromise = null + } ?: run { + presentPromise?.resolve(map) + } + } + + companion object { + internal fun buildGooglePayConfig(params: Bundle?): PaymentSheet.GooglePayConfiguration? { + if (params == null) { + return null + } + + val countryCode = params.getString("merchantCountryCode").orEmpty() + val currencyCode = params.getString("currencyCode").orEmpty() + val testEnv = params.getBoolean("testEnv") + + return PaymentSheet.GooglePayConfiguration( + environment = if (testEnv) PaymentSheet.GooglePayConfiguration.Environment.Test else PaymentSheet.GooglePayConfiguration.Environment.Production, + countryCode = countryCode, + currencyCode = currencyCode + ) + } + } } fun getBitmapFromVectorDrawable(context: Context?, drawableId: Int): Bitmap? { diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/StripeSdkModule.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/StripeSdkModule.kt index bace3757b..d67c61e70 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/StripeSdkModule.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/StripeSdkModule.kt @@ -10,9 +10,12 @@ import com.facebook.react.module.annotations.ReactModule import com.flutter.stripe.getCurrentActivityOrResolveWithError import com.flutter.stripe.invoke import com.reactnativestripesdk.pushprovisioning.PushProvisioningProxy +import com.reactnativestripesdk.utils.* +import com.reactnativestripesdk.utils.createError +import com.reactnativestripesdk.utils.createMissingActivityError import com.stripe.android.* -import com.stripe.android.core.AppInfo import com.stripe.android.core.ApiVersion +import com.stripe.android.core.AppInfo import com.stripe.android.model.* import com.stripe.android.payments.bankaccount.CollectBankAccountConfiguration import com.stripe.android.view.AddPaymentMethodActivityStarter @@ -175,7 +178,7 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac ) } else { Log.e("StripeReactNative", "FPX payment failed. Promise and/or client secret is not set.") - confirmPromise?.resolve(createError(ConfirmPaymentErrorType.Failed.toString(), "FPX payment failed.")) + confirmPromise?.resolve(createError(ConfirmPaymentErrorType.Failed.toString(), "FPX payment failed. Client secret is not set.")) } } is AddPaymentMethodActivityStarter.Result.Failure -> { @@ -191,27 +194,30 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac @ReactMethod fun createPaymentMethod(data: ReadableMap, options: ReadableMap, promise: Promise) { - val cardParams = (cardFieldView?.cardParams ?: cardFormView?.cardParams) ?: run { - promise.resolve(createError("Failed", "Card details not complete")) + val paymentMethodType = getValOr(data, "paymentMethodType")?.let { mapToPaymentMethodType(it) } ?: run { + promise.resolve(createError(ConfirmPaymentErrorType.Failed.toString(), "You must provide paymentMethodType")) return } - val cardAddress = cardFieldView?.cardAddress ?: cardFormView?.cardAddress val paymentMethodData = getMapOrNull(data, "paymentMethodData") - val billingDetailsParams = mapToBillingDetails(getMapOrNull(paymentMethodData, "billingDetails"), cardAddress) - - val paymentMethodCreateParams = PaymentMethodCreateParams.create(cardParams, billingDetailsParams) - stripe.createPaymentMethod( - paymentMethodCreateParams, - callback = object : ApiResultCallback { - override fun onError(e: Exception) { - promise.resolve(createError("Failed", e)) - } + val factory = PaymentMethodCreateParamsFactory(paymentMethodData, options, cardFieldView, cardFormView) + try { + val paymentMethodCreateParams = factory.createPaymentMethodParams(paymentMethodType) + stripe.createPaymentMethod( + paymentMethodCreateParams, + callback = object : ApiResultCallback { + override fun onError(e: Exception) { + promise.resolve(createError("Failed", e)) + } - override fun onSuccess(result: PaymentMethod) { - val paymentMethodMap: WritableMap = mapFromPaymentMethod(result) - promise.resolve(createResult("paymentMethod", paymentMethodMap)) + override fun onSuccess(result: PaymentMethod) { + val paymentMethodMap: WritableMap = mapFromPaymentMethod(result) + promise.resolve(createResult("paymentMethod", paymentMethodMap)) + } } - }) + ) + } catch (error: PaymentMethodCreateParamsException) { + promise.resolve(createError(ConfirmPaymentErrorType.Failed.toString(), error)) + } } @ReactMethod @@ -389,10 +395,10 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac // return // } - val factory = PaymentMethodCreateParamsFactory(paymentIntentClientSecret, paymentMethodData, options, cardFieldView, cardFormView) + val factory = PaymentMethodCreateParamsFactory(paymentMethodData, options, cardFieldView, cardFormView) try { - val confirmParams = factory.createConfirmParams(paymentMethodType) + val confirmParams = factory.createParams(paymentIntentClientSecret, paymentMethodType, isPaymentIntent = true) as ConfirmPaymentIntentParams urlScheme?.let { confirmParams.returnUrl = mapToReturnURL(urlScheme) } @@ -442,10 +448,10 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac return } - val factory = PaymentMethodCreateParamsFactory(setupIntentClientSecret, getMapOrNull(params, "paymentMethodData"), options, cardFieldView, cardFormView) + val factory = PaymentMethodCreateParamsFactory(getMapOrNull(params, "paymentMethodData"), options, cardFieldView, cardFormView) try { - val confirmParams = factory.createSetupParams(paymentMethodType) + val confirmParams = factory.createParams(setupIntentClientSecret, paymentMethodType, isPaymentIntent = false) as ConfirmSetupIntentParams urlScheme?.let { confirmParams.returnUrl = mapToReturnURL(urlScheme) } @@ -546,12 +552,13 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac getCurrentActivityOrResolveWithError(promise)?.let { PushProvisioningProxy.isCardInWallet(it, last4) { isCardInWallet, token, error -> - if (error != null) { - promise.resolve(createCanAddCardResult(false, "MISSING_CONFIGURATION", null)) - } else { + val result = error?.let { + createCanAddCardResult(false, "MISSING_CONFIGURATION", null) + } ?: run { val status = if (isCardInWallet) "CARD_ALREADY_EXISTS" else null - promise.resolve(createCanAddCardResult(!isCardInWallet, status, token)) + createCanAddCardResult(!isCardInWallet, status, token) } + promise.resolve(result) } } } @@ -564,14 +571,13 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac } getCurrentActivityOrResolveWithError(promise)?.let { PushProvisioningProxy.isCardInWallet(it, last4) { isCardInWallet, token, error -> - if (error != null) { - promise.resolve(error) - } else { - val result = WritableNativeMap() - result.putBoolean("isInWallet", isCardInWallet) - result.putMap("token", token) - promise.resolve(result) + val result: WritableMap = error ?: run { + val map = WritableNativeMap() + map.putBoolean("isInWallet", isCardInWallet) + map.putMap("token", token) + map } + promise.resolve(result) } } } @@ -636,6 +642,7 @@ class StripeSdkModule(internal val reactContext: ReactApplicationContext) : Reac promise.resolve(createResult("paymentIntent", mapFromPaymentIntentResult(result))) } } + val setupCallback = object : ApiResultCallback { override fun onError(e: Exception) { promise.resolve(createError(ErrorType.Failed.toString(), e)) diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt index d2bbd0cbc..eb1d937c7 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt @@ -17,7 +17,7 @@ import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.UIManagerModule import com.facebook.react.uimanager.events.EventDispatcher -import com.reactnativestripesdk.createError +import com.reactnativestripesdk.utils.createError class AddToWalletButtonView(private val context: ThemedReactContext, private val requestManager: RequestManager) : AppCompatImageView(context) { diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt index 8336e212b..4eea65ec0 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt @@ -9,8 +9,8 @@ import android.util.Log import com.facebook.react.bridge.BaseActivityEventListener import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReadableMap -import com.reactnativestripesdk.createError -import com.reactnativestripesdk.mapError +import com.reactnativestripesdk.utils.createError +import com.reactnativestripesdk.utils.mapError import com.stripe.android.pushProvisioning.PushProvisioningActivity import com.stripe.android.pushProvisioning.PushProvisioningActivityStarter diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt index f81237d86..7ee66ae7f 100644 --- a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt @@ -5,7 +5,7 @@ import android.util.Log import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableMap import com.facebook.react.bridge.WritableNativeMap -import com.reactnativestripesdk.createError +import com.reactnativestripesdk.utils.createError import com.google.android.gms.tasks.Task typealias TokenCheckHandler = (isCardInWallet: Boolean, token: WritableMap?, error: WritableMap?) -> Unit diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Errors.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Errors.kt new file mode 100644 index 000000000..cd18f26f4 --- /dev/null +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Errors.kt @@ -0,0 +1,113 @@ +package com.reactnativestripesdk.utils + +import com.facebook.react.bridge.WritableMap +import com.facebook.react.bridge.WritableNativeMap +import com.stripe.android.core.exception.APIException +import com.stripe.android.core.exception.AuthenticationException +import com.stripe.android.core.exception.InvalidRequestException +import com.stripe.android.exception.CardException +import com.stripe.android.model.PaymentIntent +import com.stripe.android.model.SetupIntent + +enum class ErrorType { + Failed, Canceled, Unknown +} + +enum class ConfirmPaymentErrorType { + Failed, Canceled, Unknown +} + +enum class CreateTokenErrorType { + Failed +} + +enum class ConfirmSetupIntentErrorType { + Failed, Canceled, Unknown +} + +enum class RetrievePaymentIntentErrorType { + Unknown +} + +enum class RetrieveSetupIntentErrorType { + Unknown +} + +enum class PaymentSheetErrorType { + Failed, Canceled +} + +enum class GooglePayErrorType { + Failed, Canceled +} + +class PaymentSheetAppearanceException(message: String) : Exception(message) + +internal fun mapError(code: String, message: String?, localizedMessage: String?, declineCode: String?, type: String?, stripeErrorCode: String?): WritableMap { + val map: WritableMap = WritableNativeMap() + val details: WritableMap = WritableNativeMap() + details.putString("code", code) + details.putString("message", message) + details.putString("localizedMessage", localizedMessage) + details.putString("declineCode", declineCode) + details.putString("type", type) + details.putString("stripeErrorCode", stripeErrorCode) + + map.putMap("error", details) + return map +} + +internal fun createError(code: String, message: String?): WritableMap { + return mapError(code, message, message, null, null, null) +} + +internal fun createMissingActivityError(): WritableMap { + return mapError( + "Failed", + "Activity doesn't exist yet. You can safely retry this method.", + null, + null, + null, + null) +} + +internal fun createError(code: String, error: PaymentIntent.Error?): WritableMap { + return mapError(code, error?.message, error?.message, error?.declineCode, error?.type?.code, error?.code) +} + +internal fun createError(code: String, error: SetupIntent.Error?): WritableMap { + return mapError(code, error?.message, error?.message, error?.declineCode, error?.type?.code, error?.code) +} + +internal fun createError(code: String, error: Exception): WritableMap { + return when (error) { + is CardException -> { + mapError(code, error.message, error.localizedMessage, error.declineCode, error.stripeError?.type, error.stripeError?.code) + } + is InvalidRequestException -> { + mapError(code, error.message, error.localizedMessage, error.stripeError?.declineCode, error.stripeError?.type, error.stripeError?.code) + } + is AuthenticationException -> { + mapError(code, error.message, error.localizedMessage, error.stripeError?.declineCode, error.stripeError?.type, error.stripeError?.code) + } + is APIException -> { + mapError(code, error.message, error.localizedMessage, error.stripeError?.declineCode, error.stripeError?.type, error.stripeError?.code) + } + else -> mapError(code, error.message, error.localizedMessage.orEmpty(), null, null, null) + } +} + +internal fun createError(code: String, error: Throwable): WritableMap { + (error as? Exception)?.let { + return createError( + code, + it) + } + return mapError( + code, + error.message, + error.localizedMessage, + null, + null, + null) +} diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Extensions.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Extensions.kt new file mode 100644 index 000000000..9ef9da65c --- /dev/null +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Extensions.kt @@ -0,0 +1,21 @@ +package com.reactnativestripesdk.utils + +import android.content.Context +import android.view.View +import android.view.inputmethod.InputMethodManager + +fun View.showSoftKeyboard() { + post { + if (this.requestFocus()) { + val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager? + imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) + } + } +} + +fun View.hideSoftKeyboard() { + if (this.requestFocus()) { + val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager? + imm?.hideSoftInputFromWindow(windowToken, 0) + } +} diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Mappers.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Mappers.kt new file mode 100644 index 000000000..e794f0e60 --- /dev/null +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/Mappers.kt @@ -0,0 +1,856 @@ +package com.reactnativestripesdk.utils + +import android.os.Bundle +import android.util.Log +import com.facebook.react.bridge.* +import com.stripe.android.PaymentAuthConfig +import com.stripe.android.model.* +import com.stripe.android.model.StripeIntent.NextActionType +import com.stripe.android.model.StripeIntent.NextActionData + +internal fun createResult(key: String, value: WritableMap): WritableMap { + val map = WritableNativeMap() + map.putMap(key, value) + return map +} + +internal fun createCanAddCardResult(canAddCard: Boolean, status: String? = null, token: WritableMap? = null): WritableNativeMap { + val result = WritableNativeMap() + val details = WritableNativeMap() + if (status != null) { + result.putBoolean("canAddCard", false) + details.putString("status", status) + } else { + result.putBoolean("canAddCard", canAddCard) + if (token != null) { + details.putMap("token", token) + } + } + result.putMap("details", details) + return result +} + +internal fun mapIntentStatus(status: StripeIntent.Status?): String { + return when (status) { + StripeIntent.Status.Succeeded -> "Succeeded" + StripeIntent.Status.RequiresPaymentMethod -> "RequiresPaymentMethod" + StripeIntent.Status.RequiresConfirmation -> "RequiresConfirmation" + StripeIntent.Status.Canceled -> "Canceled" + StripeIntent.Status.Processing -> "Processing" + StripeIntent.Status.RequiresAction -> "RequiresAction" + StripeIntent.Status.RequiresCapture -> "RequiresCapture" + else -> "Unknown" + } +} + + +internal fun mapCaptureMethod(captureMethod: PaymentIntent.CaptureMethod?): String { + return when (captureMethod) { + PaymentIntent.CaptureMethod.Automatic -> "Automatic" + PaymentIntent.CaptureMethod.Manual -> "Manual" + else -> "Unknown" + } +} + +internal fun mapConfirmationMethod(captureMethod: PaymentIntent.ConfirmationMethod?): String { + return when (captureMethod) { + PaymentIntent.ConfirmationMethod.Automatic -> "Automatic" + PaymentIntent.ConfirmationMethod.Manual -> "Manual" + else -> "Unknown" + } +} + +internal fun mapToReturnURL(urlScheme: String?): String? { + if (urlScheme != null) { + return "$urlScheme://safepay" + } + return null +} + +internal fun mapIntentShipping(shipping: PaymentIntent.Shipping): WritableMap { + val map: WritableMap = WritableNativeMap() + val address: WritableMap = WritableNativeMap() + + address.putString("city", shipping.address.city) + address.putString("country", shipping.address.country) + address.putString("line1", shipping.address.line1) + address.putString("line2", shipping.address.line2) + address.putString("postalCode", shipping.address.postalCode) + address.putString("state", shipping.address.state) + map.putMap("address", address) + map.putString("name", shipping.name) + map.putString("carrier", shipping.carrier) + map.putString("phone", shipping.phone) + map.putString("trackingNumber", shipping.trackingNumber) + + return map +} + +internal fun mapCardBrand(brand: CardBrand?): String { + return when (brand) { + CardBrand.AmericanExpress -> "AmericanExpress" + CardBrand.DinersClub -> "DinersClub" + CardBrand.Discover -> "Discover" + CardBrand.JCB -> "JCB" + CardBrand.MasterCard -> "MasterCard" + CardBrand.UnionPay -> "UnionPay" + CardBrand.Visa -> "Visa" + CardBrand.Unknown -> "Unknown" + else -> "Unknown" + } +} + +internal fun mapPaymentMethodType(type: PaymentMethod.Type?): String { + return when (type) { + PaymentMethod.Type.AfterpayClearpay -> "AfterpayClearpay" + PaymentMethod.Type.Alipay -> "Alipay" + PaymentMethod.Type.AuBecsDebit -> "AuBecsDebit" + PaymentMethod.Type.BacsDebit -> "BacsDebit" + PaymentMethod.Type.Bancontact -> "Bancontact" + PaymentMethod.Type.Card -> "Card" + PaymentMethod.Type.CardPresent -> "CardPresent" + PaymentMethod.Type.Eps -> "Eps" + PaymentMethod.Type.Fpx -> "Fpx" + PaymentMethod.Type.Giropay -> "Giropay" + PaymentMethod.Type.GrabPay -> "GrabPay" + PaymentMethod.Type.Ideal -> "Ideal" + PaymentMethod.Type.Netbanking -> "Netbanking" + PaymentMethod.Type.Oxxo -> "Oxxo" + PaymentMethod.Type.P24 -> "P24" + PaymentMethod.Type.SepaDebit -> "SepaDebit" + PaymentMethod.Type.Sofort -> "Sofort" + PaymentMethod.Type.Upi -> "Upi" + PaymentMethod.Type.WeChatPay -> "WeChatPay" + PaymentMethod.Type.Klarna -> "Klarna" + PaymentMethod.Type.USBankAccount -> "USBankAccount" + PaymentMethod.Type.PayPal -> "PayPal" + PaymentMethod.Type.Affirm -> "Affirm" + else -> "Unknown" + } +} + +internal fun mapToPaymentMethodType(type: String?): PaymentMethod.Type? { + return when (type) { + "Card" -> PaymentMethod.Type.Card + "Ideal" -> PaymentMethod.Type.Ideal + "Alipay" -> PaymentMethod.Type.Alipay + "AuBecsDebit" -> PaymentMethod.Type.AuBecsDebit + "BacsDebit" -> PaymentMethod.Type.BacsDebit + "Bancontact" -> PaymentMethod.Type.Bancontact + "AfterpayClearpay" -> PaymentMethod.Type.AfterpayClearpay + "CardPresent" -> PaymentMethod.Type.CardPresent + "Eps" -> PaymentMethod.Type.Eps + "Fpx" -> PaymentMethod.Type.Fpx + "Giropay" -> PaymentMethod.Type.Giropay + "GrabPay" -> PaymentMethod.Type.GrabPay + "Netbanking" -> PaymentMethod.Type.Netbanking + "Oxxo" -> PaymentMethod.Type.Oxxo + "P24" -> PaymentMethod.Type.P24 + "SepaDebit" -> PaymentMethod.Type.SepaDebit + "Sofort" -> PaymentMethod.Type.Sofort + "Upi" -> PaymentMethod.Type.Upi + "WeChatPay" -> PaymentMethod.Type.WeChatPay + "Klarna" -> PaymentMethod.Type.Klarna + "USBankAccount" -> PaymentMethod.Type.USBankAccount + "PayPal" -> PaymentMethod.Type.PayPal + "Affirm" -> PaymentMethod.Type.Affirm + else -> null + } +} + +internal fun mapFromBillingDetails(billingDatails: PaymentMethod.BillingDetails?): WritableMap { + val details: WritableMap = WritableNativeMap() + val address: WritableMap = WritableNativeMap() + + address.putString("country", billingDatails?.address?.country) + address.putString("city", billingDatails?.address?.city) + address.putString("line1", billingDatails?.address?.line1) + address.putString("line2", billingDatails?.address?.line2) + address.putString("postalCode", billingDatails?.address?.postalCode) + address.putString("state", billingDatails?.address?.state) + + details.putString("email", billingDatails?.email) + details.putString("phone", billingDatails?.phone) + details.putString("name", billingDatails?.name) + details.putMap("address", address) + + return details +} + +internal fun mapTokenType(type: Token.Type): String { + return when (type) { + Token.Type.Account -> "Account" + Token.Type.BankAccount -> "BankAccount" + Token.Type.Card -> "Card" + Token.Type.CvcUpdate -> "CvcUpdate" + Token.Type.Person -> "Person" + Token.Type.Pii -> "Pii" + else -> "Unknown" + } +} + +internal fun mapFromBankAccountType(type: BankAccount.Type?): String { + return when (type) { + BankAccount.Type.Company -> "Company" + BankAccount.Type.Individual -> "Individual" + else -> "Unknown" + } +} + +internal fun mapToBankAccountType(type: String?): BankAccountTokenParams.Type { + return when (type) { + "Company" -> BankAccountTokenParams.Type.Company + "Individual" -> BankAccountTokenParams.Type.Individual + else -> BankAccountTokenParams.Type.Individual + } +} + +internal fun mapFromBankAccountStatus(status: BankAccount.Status?): String { + return when (status) { + BankAccount.Status.Errored -> "Errored" + BankAccount.Status.New -> "New" + BankAccount.Status.Validated -> "Validated" + BankAccount.Status.VerificationFailed -> "VerificationFailed" + BankAccount.Status.Verified -> "Verified" + else -> "Unknown" + } +} + +internal fun mapFromBankAccount(bankAccount: BankAccount?): WritableMap? { + val bankAccountMap: WritableMap = WritableNativeMap() + + if (bankAccount == null) { + return null + } + + bankAccountMap.putString("id", bankAccount.id) + bankAccountMap.putString("bankName", bankAccount.bankName) + bankAccountMap.putString("accountHolderName", bankAccount.accountHolderName) + bankAccountMap.putString("accountHolderType", mapFromBankAccountType(bankAccount.accountHolderType)) + bankAccountMap.putString("currency", bankAccount.currency) + bankAccountMap.putString("country", bankAccount.countryCode) + bankAccountMap.putString("routingNumber", bankAccount.routingNumber) + bankAccountMap.putString("status", mapFromBankAccountStatus(bankAccount.status)) + + return bankAccountMap +} + +internal fun mapToUSBankAccountHolderType(type: String?): PaymentMethod.USBankAccount.USBankAccountHolderType { + return when (type) { + "Company" -> PaymentMethod.USBankAccount.USBankAccountHolderType.COMPANY + "Individual" -> PaymentMethod.USBankAccount.USBankAccountHolderType.INDIVIDUAL + else -> PaymentMethod.USBankAccount.USBankAccountHolderType.INDIVIDUAL + } +} + +internal fun mapFromUSBankAccountHolderType(type: PaymentMethod.USBankAccount.USBankAccountHolderType?): String { + return when (type) { + PaymentMethod.USBankAccount.USBankAccountHolderType.COMPANY -> "Company" + PaymentMethod.USBankAccount.USBankAccountHolderType.INDIVIDUAL -> "Individual" + else -> "Unknown" + } +} + +internal fun mapToUSBankAccountType(type: String?): PaymentMethod.USBankAccount.USBankAccountType { + return when (type) { + "Savings" -> PaymentMethod.USBankAccount.USBankAccountType.SAVINGS + "Checking" -> PaymentMethod.USBankAccount.USBankAccountType.CHECKING + else -> PaymentMethod.USBankAccount.USBankAccountType.CHECKING + } +} + +internal fun mapFromUSBankAccountType(type: PaymentMethod.USBankAccount.USBankAccountType?): String { + return when (type) { + PaymentMethod.USBankAccount.USBankAccountType.CHECKING -> "Checking" + PaymentMethod.USBankAccount.USBankAccountType.SAVINGS -> "Savings" + else -> "Unknown" + } +} + +internal fun mapFromCard(card: Card?): WritableMap? { + val cardMap: WritableMap = WritableNativeMap() + + if (card == null) { + return null + } + + val address: WritableMap = WritableNativeMap() + + cardMap.putString("country", card.country) + cardMap.putString("brand", mapCardBrand(card.brand)) + cardMap.putString("currency", card.currency) + + (card.expMonth)?.let { + cardMap.putInt("expMonth", it) + } ?: run { + cardMap.putNull("expMonth") + } + + (card.expYear)?.let { + cardMap.putInt("expYear", it) + } ?: run { + cardMap.putNull("expYear") + } + + cardMap.putString("id", card.id) + cardMap.putString("last4", card.last4) + cardMap.putString("funding", card.funding?.name) + cardMap.putString("name", card.name) + + address.putString("city", card.addressCity) + address.putString("country", card.addressCountry) + address.putString("line1", card.addressLine1) + address.putString("line2", card.addressLine2) + address.putString("state", card.addressState) + address.putString("postalCode", card.addressZip) + + cardMap.putMap("address", address) + + return cardMap +} + + +internal fun mapFromToken(token: Token): WritableMap { + val tokenMap: WritableMap = WritableNativeMap() + + tokenMap.putString("id", token.id) + tokenMap.putString("created", token.created.time.toString()) + tokenMap.putString("type", mapTokenType(token.type)) + tokenMap.putBoolean("livemode", token.livemode) + tokenMap.putMap("bankAccount", mapFromBankAccount(token.bankAccount)) + tokenMap.putMap("card", mapFromCard(token.card)) + + return tokenMap +} + +internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap { + val pm: WritableMap = WritableNativeMap() + val card: WritableMap = WritableNativeMap() + val sepaDebit: WritableMap = WritableNativeMap() + val bacsDebit: WritableMap = WritableNativeMap() + val auBECSDebit: WritableMap = WritableNativeMap() + val sofort: WritableMap = WritableNativeMap() + val ideal: WritableMap = WritableNativeMap() + val fpx: WritableMap = WritableNativeMap() + val upi: WritableMap = WritableNativeMap() + val usBankAccount: WritableMap = WritableNativeMap() + + card.putString("brand", mapCardBrand(paymentMethod.card?.brand)) + card.putString("country", paymentMethod.card?.country) + paymentMethod.card?.expiryYear?.let { + card.putInt("expYear", it) + } + paymentMethod.card?.expiryMonth?.let { + card.putInt("expMonth", it) + } + card.putString("funding", paymentMethod.card?.funding) + card.putString("last4", paymentMethod.card?.last4) + card.putString("fingerprint", paymentMethod.card?.fingerprint) + + sepaDebit.putString("bankCode", paymentMethod.sepaDebit?.bankCode) + sepaDebit.putString("country", paymentMethod.sepaDebit?.country) + sepaDebit.putString("fingerprint", paymentMethod.sepaDebit?.fingerprint) + sepaDebit.putString("last4", paymentMethod.sepaDebit?.branchCode) + + bacsDebit.putString("fingerprint", paymentMethod.bacsDebit?.fingerprint) + bacsDebit.putString("last4", paymentMethod.bacsDebit?.last4) + bacsDebit.putString("sortCode", paymentMethod.bacsDebit?.sortCode) + + auBECSDebit.putString("bsbNumber", paymentMethod.bacsDebit?.sortCode) + auBECSDebit.putString("fingerprint", paymentMethod.bacsDebit?.fingerprint) + auBECSDebit.putString("last4", paymentMethod.bacsDebit?.last4) + + sofort.putString("country", paymentMethod.sofort?.country) + + ideal.putString("bankName", paymentMethod.ideal?.bank) + ideal.putString("bankIdentifierCode", paymentMethod.ideal?.bankIdentifierCode) + + fpx.putString("accountHolderType", paymentMethod.fpx?.accountHolderType) + fpx.putString("bank", paymentMethod.fpx?.bank) + + upi.putString("vpa", paymentMethod.upi?.vpa) + + usBankAccount.putString("routingNumber", paymentMethod.usBankAccount?.routingNumber) + usBankAccount.putString("accountType", mapFromUSBankAccountType(paymentMethod.usBankAccount?.accountType)) + usBankAccount.putString("accountHolderType", mapFromUSBankAccountHolderType(paymentMethod.usBankAccount?.accountHolderType)) + usBankAccount.putString("last4", paymentMethod.usBankAccount?.last4) + usBankAccount.putString("bankName", paymentMethod.usBankAccount?.bankName) + usBankAccount.putString("linkedAccount", paymentMethod.usBankAccount?.linkedAccount) + usBankAccount.putString("fingerprint", paymentMethod.usBankAccount?.fingerprint) + usBankAccount.putString("preferredNetworks", paymentMethod.usBankAccount?.networks?.preferred) + usBankAccount.putArray("supportedNetworks", paymentMethod.usBankAccount?.networks?.supported as? ReadableArray) + + pm.putString("id", paymentMethod.id) + pm.putString("paymentMethodType", mapPaymentMethodType(paymentMethod.type)) + pm.putBoolean("livemode", paymentMethod.liveMode) + pm.putString("customerId", paymentMethod.customerId) + pm.putMap("billingDetails", mapFromBillingDetails(paymentMethod.billingDetails)) + pm.putMap("Card", card) + pm.putMap("SepaDebit", sepaDebit) + pm.putMap("BacsDebit", bacsDebit) + pm.putMap("AuBecsDebit", auBECSDebit) + pm.putMap("Sofort", sofort) + pm.putMap("Ideal", ideal) + pm.putMap("Fpx", fpx) + pm.putMap("Upi", upi) + pm.putMap("USBankAccount", usBankAccount) + + return pm +} + +internal fun mapFromPaymentIntentResult(paymentIntent: PaymentIntent): WritableMap { + val map: WritableMap = WritableNativeMap() + map.putString("id", paymentIntent.id) + map.putString("clientSecret", paymentIntent.clientSecret) + map.putBoolean("livemode", paymentIntent.isLiveMode) + map.putString("paymentMethodId", paymentIntent.paymentMethodId) + map.putString("receiptEmail", paymentIntent.receiptEmail) + map.putString("currency", paymentIntent.currency) + map.putString("status", mapIntentStatus(paymentIntent.status)) + map.putString("description", paymentIntent.description) + map.putString("receiptEmail", paymentIntent.receiptEmail) + map.putString("created", convertToUnixTimestamp(paymentIntent.created)) + map.putString("captureMethod", mapCaptureMethod(paymentIntent.captureMethod)) + map.putString("confirmationMethod", mapConfirmationMethod(paymentIntent.confirmationMethod)) + map.putMap("nextAction", mapNextAction(paymentIntent.nextActionType, paymentIntent.nextActionData)) + map.putNull("lastPaymentError") + map.putNull("shipping") + map.putNull("amount") + map.putNull("canceledAt") + + paymentIntent.lastPaymentError?.let { + val paymentError: WritableMap = WritableNativeMap() + paymentError.putString("code", it.code) + paymentError.putString("message", it.message) + paymentError.putString("type", mapFromPaymentIntentLastErrorType(it.type)) + paymentError.putString("declineCode", it.declineCode) + paymentIntent.lastPaymentError?.paymentMethod?.let { paymentMethod -> + paymentError.putMap("paymentMethod", mapFromPaymentMethod(paymentMethod)) + } + + map.putMap("lastPaymentError", paymentError) + } + + paymentIntent.shipping?.let { + map.putMap("shipping", mapIntentShipping(it)) + } + + paymentIntent.amount?.let { + map.putDouble("amount", it.toDouble()) + } + map.putString("canceledAt", convertToUnixTimestamp(paymentIntent.canceledAt)) + return map +} + +internal fun mapFromMicrodepositType(type: MicrodepositType): String { + return when (type) { + MicrodepositType.AMOUNTS -> "amounts" + MicrodepositType.DESCRIPTOR_CODE -> "descriptorCode" + else -> "unknown" + } +} + +internal fun mapNextAction(type: NextActionType?, data: NextActionData?): WritableNativeMap? { + val nextActionMap = WritableNativeMap() + when (type) { + NextActionType.RedirectToUrl -> { + (data as? NextActionData.RedirectToUrl)?.let { + nextActionMap.putString("type", "urlRedirect") + nextActionMap.putString("redirectUrl", it.url.toString()) + } + } + NextActionType.VerifyWithMicrodeposits -> { + (data as? NextActionData.VerifyWithMicrodeposits)?.let { + nextActionMap.putString("type", "verifyWithMicrodeposits") + nextActionMap.putString("arrivalDate", it.arrivalDate.toString()) + nextActionMap.putString("redirectUrl", it.hostedVerificationUrl) + nextActionMap.putString("microdepositType", mapFromMicrodepositType(it.microdepositType)) + } + } + NextActionType.DisplayOxxoDetails -> { + (data as? NextActionData.DisplayOxxoDetails)?.let { + nextActionMap.putString("type", "oxxoVoucher") + nextActionMap.putInt("expiration", it.expiresAfter) + nextActionMap.putString("voucherURL", it.hostedVoucherUrl) + nextActionMap.putString("voucherNumber", it.number) + } + } + NextActionType.WeChatPayRedirect -> { + (data as? NextActionData.WeChatPayRedirect)?.let { + nextActionMap.putString("type", "weChatRedirect") + nextActionMap.putString("redirectUrl", it.weChat.qrCodeUrl) + } + } + NextActionType.AlipayRedirect -> { // TODO: Can't access, private + return null + } + NextActionType.BlikAuthorize, NextActionType.UseStripeSdk, null -> { + return null + } + } + return nextActionMap +} + +internal fun mapFromPaymentIntentLastErrorType(errorType: PaymentIntent.Error.Type?): String? { + return when (errorType) { + PaymentIntent.Error.Type.ApiConnectionError -> "api_connection_error" + PaymentIntent.Error.Type.AuthenticationError -> "authentication_error" + PaymentIntent.Error.Type.ApiError -> "api_error" + PaymentIntent.Error.Type.CardError -> "card_error" + PaymentIntent.Error.Type.IdempotencyError -> "idempotency_error" + PaymentIntent.Error.Type.InvalidRequestError -> "invalid_request_error" + PaymentIntent.Error.Type.RateLimitError -> "rate_limit_error" + else -> null + } +} + +internal fun mapFromSetupIntentLastErrorType(errorType: SetupIntent.Error.Type?): String? { + return when (errorType) { + SetupIntent.Error.Type.ApiConnectionError -> "api_connection_error" + SetupIntent.Error.Type.AuthenticationError -> "authentication_error" + SetupIntent.Error.Type.ApiError -> "api_error" + SetupIntent.Error.Type.CardError -> "card_error" + SetupIntent.Error.Type.IdempotencyError -> "idempotency_error" + SetupIntent.Error.Type.InvalidRequestError -> "invalid_request_error" + SetupIntent.Error.Type.RateLimitError -> "rate_limit_error" + else -> null + } +} + +fun getValOr(map: ReadableMap?, key: String, default: String? = ""): String? { + return map?.let { + if (it.hasKey(key)) it.getString(key) else default + } ?: default +} + +internal fun mapToAddress(addressMap: ReadableMap?, cardAddress: Address?): Address { + val address = Address.Builder() + + addressMap?.let { + address + .setPostalCode(getValOr(it, "postalCode")) + .setCity(getValOr(it, "city")) + .setCountry(getValOr(it, "country")) + .setLine1(getValOr(it, "line1")) + .setLine2(getValOr(it, "line2")) + .setState(getValOr(it, "state")) + } + + cardAddress?.let { + if (!it.postalCode.isNullOrEmpty()) { + address.setPostalCode(it.postalCode) + } + if (!it.country.isNullOrEmpty()) { + address.setCountry(it.country) + } + } + + return address.build() +} + +internal fun mapToBillingDetails(billingDetails: ReadableMap?, cardAddress: Address?): PaymentMethod.BillingDetails? { + if (billingDetails == null && cardAddress == null) { + return null + } + val address = mapToAddress(getMapOrNull(billingDetails, "address"), cardAddress) + val paymentMethodBillingDetailsBuilder = PaymentMethod.BillingDetails.Builder() + + if (billingDetails != null) { + paymentMethodBillingDetailsBuilder + .setName(getValOr(billingDetails, "name")) + .setPhone(getValOr(billingDetails, "phone")) + .setEmail(getValOr(billingDetails, "email")) + } + + paymentMethodBillingDetailsBuilder.setAddress(address) + return paymentMethodBillingDetailsBuilder.build() +} + +internal fun mapToShippingDetails(shippingDetails: ReadableMap?): ConfirmPaymentIntentParams.Shipping? { + if (shippingDetails == null) { + return null + } + + val address = mapToAddress(getMapOrNull(shippingDetails, "address"), null) + + return ConfirmPaymentIntentParams.Shipping( + name = getValOr(shippingDetails, "name") ?: "", + address = address + ) +} + +private fun getStringOrNull(map: ReadableMap?, key: String): String? { + return if (map?.hasKey(key) == true) map.getString(key) else null +} + +fun getIntOrNull(map: ReadableMap?, key: String): Int? { + return if (map?.hasKey(key) == true) map.getInt(key) else null +} + +fun getMapOrNull(map: ReadableMap?, key: String): ReadableMap? { + return if (map?.hasKey(key) == true) map.getMap(key) else null +} + +fun getBooleanOrFalse(map: ReadableMap?, key: String): Boolean { + return if (map?.hasKey(key) == true) map.getBoolean(key) else false +} + +private fun convertToUnixTimestamp(timestamp: Long): String { + return (timestamp * 1000).toString() +} + +fun mapToUICustomization(params: ReadableMap): PaymentAuthConfig.Stripe3ds2UiCustomization { + val labelCustomization = getMapOrNull(params, "label") + val navigationBarCustomization = params.getMap("navigationBar") + val textBoxCustomization = getMapOrNull(params, "textField") + val submitButtonCustomization = getMapOrNull(params, "submitButton") + val cancelButtonCustomization = getMapOrNull(params, "cancelButton") + val nextButtonCustomization = getMapOrNull(params, "nextButton") + val continueButtonCustomization = getMapOrNull(params, "continueButton") + val resendButtonCustomization = getMapOrNull(params, "resendButton") + + val labelCustomizationBuilder = PaymentAuthConfig.Stripe3ds2LabelCustomization.Builder() + val toolbarCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ToolbarCustomization.Builder() + val textBoxCustomizationBuilder = PaymentAuthConfig.Stripe3ds2TextBoxCustomization.Builder() + + val submitButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder() + val cancelButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder() + val nextButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder() + val continueButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder() + val resendButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder() + + getStringOrNull(labelCustomization,"headingTextColor")?.let { + labelCustomizationBuilder.setHeadingTextColor(it) + } + getStringOrNull(labelCustomization,"textColor")?.let { + labelCustomizationBuilder.setTextColor(it) + } + getIntOrNull(labelCustomization,"headingFontSize")?.let { + labelCustomizationBuilder.setHeadingTextFontSize(it) + } + getIntOrNull(labelCustomization,"textFontSize")?.let { + labelCustomizationBuilder.setTextFontSize(it) + } + + getStringOrNull(navigationBarCustomization,"headerText")?.let { + toolbarCustomizationBuilder.setHeaderText(it) + } + getStringOrNull(navigationBarCustomization,"buttonText")?.let { + toolbarCustomizationBuilder.setButtonText(it) + } + getStringOrNull(navigationBarCustomization,"textColor")?.let { + toolbarCustomizationBuilder.setTextColor(it) + } + getStringOrNull(navigationBarCustomization,"statusBarColor")?.let { + toolbarCustomizationBuilder.setStatusBarColor(it) + } + getStringOrNull(navigationBarCustomization,"backgroundColor")?.let { + toolbarCustomizationBuilder.setBackgroundColor(it) + } + getIntOrNull(navigationBarCustomization,"textFontSize")?.let { + toolbarCustomizationBuilder.setTextFontSize(it) + } + + getStringOrNull(textBoxCustomization, "borderColor")?.let { + textBoxCustomizationBuilder.setBorderColor(it) + } + getStringOrNull(textBoxCustomization, "textColor")?.let { + textBoxCustomizationBuilder.setTextColor(it) + } + getIntOrNull(textBoxCustomization, "borderWidth")?.let { + textBoxCustomizationBuilder.setBorderWidth(it) + } + getIntOrNull(textBoxCustomization, "borderRadius")?.let { + textBoxCustomizationBuilder.setCornerRadius(it) + } + getIntOrNull(textBoxCustomization, "textFontSize")?.let { + textBoxCustomizationBuilder.setTextFontSize(it) + } + + // Submit button + getStringOrNull(submitButtonCustomization, "backgroundColor")?.let { + submitButtonCustomizationBuilder.setBackgroundColor(it) + } + getIntOrNull(submitButtonCustomization, "borderRadius")?.let { + submitButtonCustomizationBuilder.setCornerRadius(it) + } + getStringOrNull(submitButtonCustomization, "textColor")?.let { + submitButtonCustomizationBuilder.setTextColor(it) + } + getIntOrNull(submitButtonCustomization, "textFontSize")?.let { + submitButtonCustomizationBuilder.setTextFontSize(it) + } + + // Cancel button + getStringOrNull(cancelButtonCustomization, "backgroundColor")?.let { + cancelButtonCustomizationBuilder.setBackgroundColor(it) + } + getIntOrNull(cancelButtonCustomization, "borderRadius")?.let { + cancelButtonCustomizationBuilder.setCornerRadius(it) + } + getStringOrNull(cancelButtonCustomization, "textColor")?.let { + cancelButtonCustomizationBuilder.setTextColor(it) + } + getIntOrNull(cancelButtonCustomization, "textFontSize")?.let { + cancelButtonCustomizationBuilder.setTextFontSize(it) + } + + // Continue button + getStringOrNull(continueButtonCustomization, "backgroundColor")?.let { + continueButtonCustomizationBuilder.setBackgroundColor(it) + } + getIntOrNull(continueButtonCustomization, "borderRadius")?.let { + continueButtonCustomizationBuilder.setCornerRadius(it) + } + getStringOrNull(continueButtonCustomization, "textColor")?.let { + continueButtonCustomizationBuilder.setTextColor(it) + } + getIntOrNull(continueButtonCustomization, "textFontSize")?.let { + continueButtonCustomizationBuilder.setTextFontSize(it) + } + + // Next button + getStringOrNull(nextButtonCustomization, "backgroundColor")?.let { + nextButtonCustomizationBuilder.setBackgroundColor(it) + } + getIntOrNull(nextButtonCustomization, "borderRadius")?.let { + nextButtonCustomizationBuilder.setCornerRadius(it) + } + getStringOrNull(nextButtonCustomization, "textColor")?.let { + nextButtonCustomizationBuilder.setTextColor(it) + } + getIntOrNull(nextButtonCustomization, "textFontSize")?.let { + nextButtonCustomizationBuilder.setTextFontSize(it) + } + + // Resend button + getStringOrNull(resendButtonCustomization, "backgroundColor")?.let { + resendButtonCustomizationBuilder.setBackgroundColor(it) + } + getIntOrNull(resendButtonCustomization, "borderRadius")?.let { + resendButtonCustomizationBuilder.setCornerRadius(it) + } + getStringOrNull(resendButtonCustomization, "textColor")?.let { + resendButtonCustomizationBuilder.setTextColor(it) + } + getIntOrNull(resendButtonCustomization, "textFontSize")?.let { + resendButtonCustomizationBuilder.setTextFontSize(it) + } + + + + val uiCustomization = PaymentAuthConfig.Stripe3ds2UiCustomization.Builder() + .setLabelCustomization( + labelCustomizationBuilder.build() + ) + .setToolbarCustomization( + toolbarCustomizationBuilder.build() + ) + .setButtonCustomization( + submitButtonCustomizationBuilder.build(), + PaymentAuthConfig.Stripe3ds2UiCustomization.ButtonType.SUBMIT + ) + .setButtonCustomization( + continueButtonCustomizationBuilder.build(), + PaymentAuthConfig.Stripe3ds2UiCustomization.ButtonType.CONTINUE + ) + .setButtonCustomization( + nextButtonCustomizationBuilder.build(), + PaymentAuthConfig.Stripe3ds2UiCustomization.ButtonType.SELECT + ) + .setButtonCustomization( + cancelButtonCustomizationBuilder.build(), + PaymentAuthConfig.Stripe3ds2UiCustomization.ButtonType.CANCEL + ) + .setButtonCustomization( + resendButtonCustomizationBuilder.build(), + PaymentAuthConfig.Stripe3ds2UiCustomization.ButtonType.RESEND + ) + + getStringOrNull(params, "accentColor")?.let { + uiCustomization.setAccentColor(it) + } + + return uiCustomization.build() +} + +internal fun mapFromSetupIntentResult(setupIntent: SetupIntent): WritableMap { + val map: WritableMap = WritableNativeMap() + val paymentMethodTypes: WritableArray = Arguments.createArray() + map.putString("id", setupIntent.id) + map.putString("status", mapIntentStatus(setupIntent.status)) + map.putString("description", setupIntent.description) + map.putBoolean("livemode", setupIntent.isLiveMode) + map.putString("clientSecret", setupIntent.clientSecret) + map.putString("paymentMethodId", setupIntent.paymentMethodId) + map.putString("usage", mapSetupIntentUsage(setupIntent.usage)) + map.putString("created", convertToUnixTimestamp(setupIntent.created)) + map.putMap("nextAction", mapNextAction(setupIntent.nextActionType, setupIntent.nextActionData)) + + setupIntent.lastSetupError?.let { + val setupError: WritableMap = WritableNativeMap() + setupError.putString("code", it.code) + setupError.putString("message", it.message) + setupError.putString("type", mapFromSetupIntentLastErrorType(it.type)) + setupError.putString("declineCode", it.declineCode) + setupIntent.lastSetupError?.paymentMethod?.let { paymentMethod -> + setupError.putMap("paymentMethod", mapFromPaymentMethod(paymentMethod)) + } + map.putMap("lastSetupError", setupError) + } + + setupIntent.paymentMethodTypes.forEach { code -> + val type: PaymentMethod.Type? = PaymentMethod.Type.values().find { + code == it.code + } + type?.let { + paymentMethodTypes.pushString(mapPaymentMethodType(it)) + } + } + + map.putArray("paymentMethodTypes", paymentMethodTypes) + + return map +} + +internal fun mapSetupIntentUsage(type: StripeIntent.Usage?): String { + return when (type) { + StripeIntent.Usage.OffSession -> "OffSession" + StripeIntent.Usage.OnSession -> "OnSession" + StripeIntent.Usage.OneTime -> "OneTime" + else -> "Unknown" + } +} + +fun mapToPaymentIntentFutureUsage(type: String?): ConfirmPaymentIntentParams.SetupFutureUsage? { + return when (type) { + "OffSession" -> ConfirmPaymentIntentParams.SetupFutureUsage.OffSession + "OnSession" -> ConfirmPaymentIntentParams.SetupFutureUsage.OnSession + else -> null + } +} + +fun toBundleObject(readableMap: ReadableMap?): Bundle { + val result = Bundle() + if (readableMap == null) { + return result + } + val iterator = readableMap.keySetIterator() + while (iterator.hasNextKey()) { + val key = iterator.nextKey() + when (readableMap.getType(key)) { + ReadableType.Null -> result.putString(key, null) + ReadableType.Boolean -> result.putBoolean(key, readableMap.getBoolean(key)) + ReadableType.Number -> try { + result.putInt(key, readableMap.getInt(key)) + } catch (e: Exception) { + result.putDouble(key, readableMap.getDouble(key)) + } + ReadableType.String -> result.putString(key, readableMap.getString(key)) + ReadableType.Map -> result.putBundle(key, toBundleObject(readableMap.getMap(key))) + ReadableType.Array -> Log.e("toBundleException", "Cannot put arrays of objects into bundles. Failed on: $key.") + else -> Log.e("toBundleException", "Could not convert object with key: $key.") + } + } + return result +} diff --git a/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/PostalCodeUtilities.kt b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/PostalCodeUtilities.kt new file mode 100644 index 000000000..8b14d0df5 --- /dev/null +++ b/packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/utils/PostalCodeUtilities.kt @@ -0,0 +1,18 @@ +package com.reactnativestripesdk.utils + +class PostalCodeUtilities { + + companion object { + internal fun isValidGlobalPostalCodeCharacter(c: Char): Boolean { + return Character.isLetterOrDigit(c) + || c.isWhitespace() + || c == '-' + } + + internal fun isValidUsPostalCodeCharacter(c: Char): Boolean { + return Character.isDigit(c) + || c.isWhitespace() + || c == '-' + } + } +} diff --git a/packages/stripe_android/pubspec.yaml b/packages/stripe_android/pubspec.yaml index 4693a4940..9196da011 100644 --- a/packages/stripe_android/pubspec.yaml +++ b/packages/stripe_android/pubspec.yaml @@ -1,6 +1,6 @@ name: stripe_android description: Stripe platform implementation for Android -version: 3.3.0 +version: 4.0.0 repository: https://github.com/flutter-stripe/flutter_stripe homepage: https://pub.dev/packages/flutter_stripe diff --git a/packages/stripe_ios/CHANGELOG.md b/packages/stripe_ios/CHANGELOG.md index 5eecb4d41..fd660c02d 100644 --- a/packages/stripe_ios/CHANGELOG.md +++ b/packages/stripe_ios/CHANGELOG.md @@ -1,3 +1,32 @@ +## 4.0.0 +** Breaking changes ** +- Added support for iOS 15 paymentSummaryItems: PKDeferredPaymentSummaryItem and PKRecurringPaymentSummaryItem. +Adding a summary item before was: + +```dart + ApplePayCartSummaryItem( + label: 'Product Test', + amount: '0.01', +); +``` + +Becomes + +```dart +ApplePayCartSummaryItem.immediate( + label: 'Product Test', + amount: '0.01', +); +``` + +- Changed paymentsheet parameters to make it more clear which settings are used for Google Pay and Apple Pay. Changes: `merchantCountryCode` is now moved into both `PaymentSheetApplePay`and `PaymentSheetGooglePay`, `currencyCode` and `testEnv` is now part of the `PaymentSheetGooglePay` object. + +- Added possibility to add `ApplePayCartSummaryItem` to the paymensheet. + +Other changes +- Support for affirm payment method. +- Several fixes by the Stripe sdk [v.0.15.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.15.0). + ## 3.3.0 - Added the canAddCardToWallet method. - Several fixes by the Stripe sdk [v.0.14.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.14.0). diff --git a/packages/stripe_ios/ios/Classes/Stripe Sdk/ApplePayUtils.swift b/packages/stripe_ios/ios/Classes/Stripe Sdk/ApplePayUtils.swift new file mode 100644 index 000000000..e8dc6fb18 --- /dev/null +++ b/packages/stripe_ios/ios/Classes/Stripe Sdk/ApplePayUtils.swift @@ -0,0 +1,159 @@ +// +// ApplePayUtils.swift +// stripe-react-native +// +// Created by Charles Cruzan on 6/27/22. +// + +import Foundation +import Stripe + +class ApplePayUtils { + + @available(iOS 15.0, *) + internal class func createDeferredPaymentSummaryItem(item: [String : Any]) throws -> PKPaymentSummaryItem { + let label = item["label"] as? String ?? "" + let amount = NSDecimalNumber(string: item["amount"] as? String ?? "") + + let deferredItem = PKDeferredPaymentSummaryItem( + label: label, + amount: amount + ) + guard let date = item["deferredDate"] as? Double else { + throw ApplePayUtilsError.missingParameter(label, "deferredDate") + } + deferredItem.deferredDate = Date(timeIntervalSince1970: date) + return deferredItem + } + + @available(iOS 15.0, *) + internal class func createRecurringPaymentSummaryItem(item: [String : Any]) throws -> PKPaymentSummaryItem { + let label = item["label"] as? String ?? "" + let amount = NSDecimalNumber(string: item["amount"] as? String ?? "") + + let recurringItem = PKRecurringPaymentSummaryItem( + label: label, + amount: amount + ) + guard let intervalCount = item["intervalCount"] as? Int else { + throw ApplePayUtilsError.missingParameter(label, "intervalCount") + } + recurringItem.intervalCount = intervalCount + recurringItem.intervalUnit = try mapToIntervalUnit(intervalString: item["intervalUnit"] as? String) + if let startDate = item["startDate"] as? Double { + recurringItem.startDate = Date(timeIntervalSince1970: startDate) + } + if let endDate = item["endDate"] as? Double { + recurringItem.endDate = Date(timeIntervalSince1970: endDate) + } + return recurringItem + } + + internal class func mapToIntervalUnit(intervalString: String?) throws -> NSCalendar.Unit { + switch intervalString { + case "minute": + return NSCalendar.Unit.minute + case "hour": + return NSCalendar.Unit.hour + case "day": + return NSCalendar.Unit.day + case "month": + return NSCalendar.Unit.month + case "year": + return NSCalendar.Unit.year + default: + throw ApplePayUtilsError.invalidTimeInterval(intervalString ?? "null") + } + } + + internal class func createImmediatePaymentSummaryItem(item: [String : Any]) -> PKPaymentSummaryItem { + let label = item["label"] as? String ?? "" + let amount = NSDecimalNumber(string: item["amount"] as? String ?? "") + + return PKPaymentSummaryItem( + label: label, + amount: amount, + type: item["isPending"] as? Bool ?? false ? + PKPaymentSummaryItemType.pending : PKPaymentSummaryItemType.final + ) + } + + public class func buildPaymentSummaryItems(items: [[String : Any]]?) throws -> [PKPaymentSummaryItem] { + var paymentSummaryItems: [PKPaymentSummaryItem] = [] + if let items = items { + for item in items { + let paymentSummaryItem = try buildPaymentSummaryItem(item: item) + paymentSummaryItems.append(paymentSummaryItem) + } + } + + return paymentSummaryItems + } + + internal class func buildPaymentSummaryItem(item: [String : Any]) throws -> PKPaymentSummaryItem { + switch item["paymentType"] as? String { + case "Deferred": + if #available(iOS 15.0, *) { + return try createDeferredPaymentSummaryItem(item: item) + } else { + return createImmediatePaymentSummaryItem(item: item) + } + case "Recurring": + if #available(iOS 15.0, *) { + return try createRecurringPaymentSummaryItem(item: item) + } else { + return createImmediatePaymentSummaryItem(item: item) + } + case "Immediate": + return createImmediatePaymentSummaryItem(item: item) + default: + throw ApplePayUtilsError.invalidCartSummaryItemType(item["paymentType"] as? String ?? "null") + } + } + + public class func buildPaymentSheetApplePayConfig( + merchantIdentifier: String?, + merchantCountryCode: String?, + paymentSummaryItems: [[String : Any]]? + ) throws -> PaymentSheet.ApplePayConfiguration { + guard let merchantId = merchantIdentifier else { + throw ApplePayUtilsError.missingMerchantId + } + guard let countryCode = merchantCountryCode else { + throw ApplePayUtilsError.missingCountryCode + } + let paymentSummaryItems = try ApplePayUtils.buildPaymentSummaryItems( + items: paymentSummaryItems + ) + return PaymentSheet.ApplePayConfiguration.init( + merchantId: merchantId, + merchantCountryCode: countryCode, + paymentSummaryItems:paymentSummaryItems.count > 0 ? paymentSummaryItems : nil + ) + } +} + +enum ApplePayUtilsError : Error, Equatable { + case invalidCartSummaryItemType(String) + case missingParameter(String, String) + case invalidTimeInterval(String) + case missingMerchantId + case missingCountryCode +} + +extension ApplePayUtilsError: LocalizedError { + public var errorDescription: String? { + switch self { + case .invalidCartSummaryItemType(let type): + return "Failed to ceate Apple Pay summary item. Expected `type` to be one of 'Immediate', 'Recurring', or 'Deferred', but received: \(type)" + case .missingParameter(let label, let parameter): + return "Failed to create Apple Pay summary item with label: \(label). The \(parameter) item parameter is required, but none was provided." + case .invalidTimeInterval(let providedInterval): + return "Failed to create Apple Pay summary item. \(providedInterval) is not a valid timeInterval, must be one of: minute, hour, day, month, or year." + case .missingMerchantId: + return "`merchantIdentifier` is required, but none was found. Ensure you are passing this to initStripe your StripeProvider." + case .missingCountryCode: + return "`merchantCountryCode` is a required param, but was not provided." + } + } +} diff --git a/packages/stripe_ios/ios/Classes/Stripe Sdk/Mappers.swift b/packages/stripe_ios/ios/Classes/Stripe Sdk/Mappers.swift index 483300415..1f94a5cbf 100644 --- a/packages/stripe_ios/ios/Classes/Stripe Sdk/Mappers.swift +++ b/packages/stripe_ios/ios/Classes/Stripe Sdk/Mappers.swift @@ -16,17 +16,6 @@ class Mappers { } } - class func mapToPaymentSummaryItemType(type: String?) -> PKPaymentSummaryItemType { - if let type = type { - switch type { - case "pending": return PKPaymentSummaryItemType.pending - case "final": return PKPaymentSummaryItemType.final - default: return PKPaymentSummaryItemType.final - } - } - return PKPaymentSummaryItemType.final - } - class func mapFromBankAccountHolderType(_ type: STPBankAccountHolderType?) -> String? { if let type = type { switch type { @@ -171,8 +160,12 @@ class Mappers { let amount = NSDecimalNumber(string: method["amount"] as? String ?? "") let identifier = method["identifier"] as! String let detail = method["detail"] as? String ?? "" - let type = Mappers.mapToPaymentSummaryItemType(type: method["type"] as? String) - let pm = PKShippingMethod.init(label: label, amount: amount, type: type) + let pm = PKShippingMethod.init( + label: label, + amount: amount, + type: method["isPending"] as? Bool ?? false + ? PKPaymentSummaryItemType.pending : PKPaymentSummaryItemType.final + ) pm.identifier = identifier pm.detail = detail shippingMethodsList.append(pm) @@ -283,6 +276,7 @@ class Mappers { case STPPaymentMethodType.klarna: return "Klarna" case STPPaymentMethodType.USBankAccount: return "USBankAccount" case STPPaymentMethodType.payPal: return "PayPal" + case STPPaymentMethodType.affirm: return "Affirm" case STPPaymentMethodType.unknown: return "Unknown" default: return "Unknown" } @@ -312,6 +306,7 @@ class Mappers { case "WeChatPay": return STPPaymentMethodType.weChatPay case "USBankAccount": return STPPaymentMethodType.USBankAccount case "PayPal": return STPPaymentMethodType.payPal + case "Affirm": return STPPaymentMethodType.affirm default: return STPPaymentMethodType.unknown } } diff --git a/packages/stripe_ios/ios/Classes/Stripe Sdk/PaymentMethodFactory.swift b/packages/stripe_ios/ios/Classes/Stripe Sdk/PaymentMethodFactory.swift index f78b838d9..4370cbb17 100644 --- a/packages/stripe_ios/ios/Classes/Stripe Sdk/PaymentMethodFactory.swift +++ b/packages/stripe_ios/ios/Classes/Stripe Sdk/PaymentMethodFactory.swift @@ -53,6 +53,8 @@ class PaymentMethodFactory { return try createUSBankAccountPaymentMethodParams() case STPPaymentMethodType.payPal: return try createPayPalPaymentMethodParams() + case STPPaymentMethodType.affirm: + return try createAffirmPaymentMethodParams() // case STPPaymentMethodType.weChatPay: // return try createWeChatPayPaymentMethodParams() default: @@ -102,6 +104,8 @@ class PaymentMethodFactory { return try createUSBankAccountPaymentMethodOptions() case STPPaymentMethodType.payPal: return nil + case STPPaymentMethodType.affirm: + return nil default: throw PaymentMethodError.paymentNotSupported } @@ -361,6 +365,11 @@ class PaymentMethodFactory { private func createPayPalPaymentMethodParams() throws -> STPPaymentMethodParams { return STPPaymentMethodParams(payPal: STPPaymentMethodPayPalParams(), billingDetails: billingDetailsParams, metadata: nil) } + + private func createAffirmPaymentMethodParams() throws -> STPPaymentMethodParams { + let params = STPPaymentMethodAffirmParams() + return STPPaymentMethodParams(affirm: params, metadata: nil) + } } enum PaymentMethodError: Error { diff --git a/packages/stripe_ios/ios/Classes/Stripe Sdk/StripeSdk.swift b/packages/stripe_ios/ios/Classes/Stripe Sdk/StripeSdk.swift index f01b25cae..ebe72a597 100644 --- a/packages/stripe_ios/ios/Classes/Stripe Sdk/StripeSdk.swift +++ b/packages/stripe_ios/ios/Classes/Stripe Sdk/StripeSdk.swift @@ -85,12 +85,15 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi } } - if params["applePay"] as? Bool == true { - if let merchantIdentifier = self.merchantIdentifier, let merchantCountryCode = params["merchantCountryCode"] as? String { - configuration.applePay = .init(merchantId: merchantIdentifier, - merchantCountryCode: merchantCountryCode) - } else { - resolve(Errors.createError(ErrorType.Failed, "Either merchantIdentifier or merchantCountryCode is missing")) + if let applePayParams = params["applePay"] as? NSDictionary { + do { + configuration.applePay = try ApplePayUtils.buildPaymentSheetApplePayConfig( + merchantIdentifier: self.merchantIdentifier, + merchantCountryCode: applePayParams["merchantCountryCode"] as? String, + paymentSummaryItems: applePayParams["paymentSummaryItems"] as? [[String : Any]] + ) + } catch { + resolve(Errors.createError(ErrorType.Failed, error.localizedDescription)) return } } @@ -145,15 +148,14 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi resolve(Errors.createError(ErrorType.Failed, error as NSError)) case .success(let paymentSheetFlowController): self.paymentSheetFlowController = paymentSheetFlowController + var result: NSDictionary? = nil if let paymentOption = stripeSdk?.paymentSheetFlowController?.paymentOption { - let option: NSDictionary = [ + result = [ "label": paymentOption.label, "image": paymentOption.image.pngData()?.base64EncodedString() ?? "" ] - resolve(Mappers.createResult("paymentOption", option)) - } else { - resolve(Mappers.createResult("paymentOption", nil)) } + resolve(Mappers.createResult("paymentOption", result)) } } @@ -285,6 +287,7 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi if (paymentMethodType == .payPal) { resolve(Errors.createError(ErrorType.Failed, "PayPal is not yet supported through SetupIntents.")) + return } var err: NSDictionary? = nil @@ -344,17 +347,16 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi resolve(Errors.createError(ErrorType.Failed, "You can use this method only after either onDidSetShippingMethod or onDidSetShippingContact events emitted")) return } - var paymentSummaryItems: [PKPaymentSummaryItem] = [] - if let items = summaryItems as? [[String : Any]] { - for item in items { - let label = item["label"] as? String ?? "" - let amount = NSDecimalNumber(string: item["amount"] as? String ?? "") - let type = Mappers.mapToPaymentSummaryItemType(type: item["type"] as? String) - paymentSummaryItems.append(PKPaymentSummaryItem(label: label, amount: amount, type: type)) - } + + var paymentSummaryItems : [PKPaymentSummaryItem] = [] + do { + paymentSummaryItems = try ApplePayUtils.buildPaymentSummaryItems(items: summaryItems as? [[String : Any]]) + } catch { + resolve(Errors.createError(ErrorType.Failed, error.localizedDescription)) + return } + var shippingAddressErrors: [Error] = [] - for item in errorAddressFields { let field = item["field"] as! String let message = item["message"] as? String ?? field + " error" @@ -513,18 +515,14 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi paymentRequest.shippingMethods = Mappers.mapToShippingMethods(shippingMethods: shippingMethods) - var paymentSummaryItems: [PKPaymentSummaryItem] = [] - - if let items = summaryItems as? [[String : Any]] { - for item in items { - let label = item["label"] as? String ?? "" - let amount = NSDecimalNumber(string: item["amount"] as? String ?? "") - let type = Mappers.mapToPaymentSummaryItemType(type: item["type"] as? String) - paymentSummaryItems.append(PKPaymentSummaryItem(label: label, amount: amount, type: type)) - } + do { + paymentRequest.paymentSummaryItems = try ApplePayUtils + .buildPaymentSummaryItems(items: summaryItems as? [[String : Any]]) + } catch { + resolve(Errors.createError(ErrorType.Failed, error.localizedDescription)) + return } - paymentRequest.paymentSummaryItems = paymentSummaryItems if let applePayContext = STPApplePayContext(paymentRequest: paymentRequest, delegate: self) { DispatchQueue.main.async { applePayContext.presentApplePay(completion: nil) @@ -572,12 +570,10 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi STPAPIClient.shared.createPaymentMethod(with: paymentMethodParams) { paymentMethod, error in if let createError = error { resolve(Errors.createError(ErrorType.Failed, createError.localizedDescription)) - return - } - - if let paymentMethod = paymentMethod { - let method = Mappers.mapFromPaymentMethod(paymentMethod) - resolve(Mappers.createResult("paymentMethod", method)) + } else { + resolve( + Mappers.createResult("paymentMethod", Mappers.mapFromPaymentMethod(paymentMethod)) + ) } } } else { @@ -763,10 +759,11 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi if let intent = intent { if (intent.status == .requiresPaymentMethod) { resolve(Errors.createError(ErrorType.Canceled, "Bank account collection was canceled.")) + } else { + resolve( + Mappers.createResult("paymentIntent", Mappers.mapFromPaymentIntent(paymentIntent: intent)) + ) } - resolve( - Mappers.createResult("paymentIntent", Mappers.mapFromPaymentIntent(paymentIntent: intent)) - ) } else { resolve(Errors.createError(ErrorType.Unknown, "There was unexpected error while collecting bank account information.")) } @@ -787,10 +784,11 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi if let intent = intent { if (intent.status == .requiresPaymentMethod) { resolve(Errors.createError(ErrorType.Canceled, "Bank account collection was canceled.")) + } else { + resolve( + Mappers.createResult("setupIntent", Mappers.mapFromSetupIntent(setupIntent: intent)) + ) } - resolve( - Mappers.createResult("setupIntent", Mappers.mapFromSetupIntent(setupIntent: intent)) - ) } else { resolve(Errors.createError(ErrorType.Unknown, "There was unexpected error while collecting bank account information.")) } @@ -891,7 +889,6 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi } else { resolve(Errors.createError(ErrorType.Unknown, error?.localizedDescription)) } - return } @@ -916,7 +913,6 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi } else { resolve(Errors.createError(ErrorType.Unknown, error?.localizedDescription)) } - return } diff --git a/packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.m b/packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.m deleted file mode 100644 index 4b1db84b1..000000000 --- a/packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// AddToWalletButtonManager.m -// stripe-react-native -// -// Created by Charles Cruzan on 3/28/22. -// - -//#import -//#import -//#import -// -//@interface RCT_EXTERN_MODULE(AddToWalletButtonManager, RCTViewManager) -//RCT_EXPORT_VIEW_PROPERTY(testEnv, BOOL) -//RCT_EXPORT_VIEW_PROPERTY(iOSButtonStyle, NSString) -//RCT_EXPORT_VIEW_PROPERTY(cardHolderName, NSString) -//RCT_EXPORT_VIEW_PROPERTY(cardDescription, NSString) -//RCT_EXPORT_VIEW_PROPERTY(cardLastFour, NSString) -//RCT_EXPORT_VIEW_PROPERTY(cardBrand, NSString) -//RCT_EXPORT_VIEW_PROPERTY(ephemeralKey, NSDictionary) -//RCT_EXPORT_VIEW_PROPERTY(onCompleteAction, RCTDirectEventBlock) -//@end diff --git a/packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.swift b/packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.swift deleted file mode 100644 index 11c6f6384..000000000 --- a/packages/stripe_ios/ios/Classes/Stripe Sdk/pushprovisioning/AddToWalletButtonManager.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// AddToWalletButtonManager.swift -// stripe-react-native -// -// Created by Charles Cruzan on 3/28/22. -// - -//import Foundation -// -//@objc(AddToWalletButtonManager) -//class AddToWalletButtonManager : RCTViewManager { -// override func view() -> UIView! { -// return AddToWalletButtonView() -// } -// -// override class func requiresMainQueueSetup() -> Bool { -// return true -// } -//} diff --git a/packages/stripe_ios/pubspec.yaml b/packages/stripe_ios/pubspec.yaml index ec590c05e..da61a6f59 100644 --- a/packages/stripe_ios/pubspec.yaml +++ b/packages/stripe_ios/pubspec.yaml @@ -1,6 +1,6 @@ name: stripe_ios description: Stripe platform implementation for iOS -version: 3.3.0 +version: 4.0.0 repository: https://github.com/flutter-stripe/flutter_stripe homepage: https://pub.dev/packages/flutter_stripe diff --git a/packages/stripe_platform_interface/CHANGELOG.md b/packages/stripe_platform_interface/CHANGELOG.md index 5eecb4d41..fd660c02d 100644 --- a/packages/stripe_platform_interface/CHANGELOG.md +++ b/packages/stripe_platform_interface/CHANGELOG.md @@ -1,3 +1,32 @@ +## 4.0.0 +** Breaking changes ** +- Added support for iOS 15 paymentSummaryItems: PKDeferredPaymentSummaryItem and PKRecurringPaymentSummaryItem. +Adding a summary item before was: + +```dart + ApplePayCartSummaryItem( + label: 'Product Test', + amount: '0.01', +); +``` + +Becomes + +```dart +ApplePayCartSummaryItem.immediate( + label: 'Product Test', + amount: '0.01', +); +``` + +- Changed paymentsheet parameters to make it more clear which settings are used for Google Pay and Apple Pay. Changes: `merchantCountryCode` is now moved into both `PaymentSheetApplePay`and `PaymentSheetGooglePay`, `currencyCode` and `testEnv` is now part of the `PaymentSheetGooglePay` object. + +- Added possibility to add `ApplePayCartSummaryItem` to the paymensheet. + +Other changes +- Support for affirm payment method. +- Several fixes by the Stripe sdk [v.0.15.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.15.0). + ## 3.3.0 - Added the canAddCardToWallet method. - Several fixes by the Stripe sdk [v.0.14.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.14.0). diff --git a/packages/stripe_platform_interface/lib/src/models/apple_pay.dart b/packages/stripe_platform_interface/lib/src/models/apple_pay.dart index 241b02ad4..28af12c96 100644 --- a/packages/stripe_platform_interface/lib/src/models/apple_pay.dart +++ b/packages/stripe_platform_interface/lib/src/models/apple_pay.dart @@ -34,15 +34,6 @@ enum ApplePayContactFieldsType { postalAddress } -/// The summary item’s type indicating whether or not the amount is final. -enum ApplePaySummaryItemType { - /// amount is final - fixed, - - /// amount is pending - pending -} - @freezed /// @@ -60,26 +51,69 @@ class ApplePayShippingMethod with _$ApplePayShippingMethod { _$ApplePayShippingMethodFromJson(json); } -@freezed +@Freezed(unionKey: 'paymentType') /// Object that can be used to explain the different charges on the Apple Pay sheet. class ApplePayCartSummaryItem with _$ApplePayCartSummaryItem { @JsonSerializable(explicitToJson: true) - const factory ApplePayCartSummaryItem({ + @FreezedUnionValue('Immediate') + + /// Use this type for payments that will occur immediately. + const factory ApplePayCartSummaryItem.immediate({ /// Short localized description of the item. required String label, /// The monetary amount. required String amount, - /// The type of summary item - @Default(ApplePaySummaryItemType.fixed) ApplePaySummaryItemType type, - }) = _ApplePayCartSummaryItem; + /// When creating items for estimates or charges whose final value is not yet known, set this to true. + bool? isPending, + }) = _ImmediateCartSummaryItem; + + @JsonSerializable(explicitToJson: true) + @FreezedUnionValue('Deferred') + + /// Use this type for a payment that occurs in the future, such as a pre-order. Only available on iOS 15 and up, otherwise falls back to ImmediateCartSummaryItem + const factory ApplePayCartSummaryItem.deferred({ + /// Short localized description of the item. + required String label, + + /// The monetary amount. + required String amount, + + /// The unix timestamp of the date, in the future, of the payment. Measured in seconds. + required int deferredDate, + }) = _DeferredSummaryItem; + + @JsonSerializable(explicitToJson: true) + @FreezedUnionValue('Recurring') + + /// Use this type for payments that occur more than once, such as a subscription. Only available on iOS 15 and up, otherwise falls back to ImmediateCartSummaryItem + const factory ApplePayCartSummaryItem.recurring({ + /// Short localized description of the item. + required String label, + + /// The monetary amount. + required String amount, + + /// The amount of time – in calendar units such as day, month, or year – that represents a fraction of the total payment interval. For example, if you set the intervalUnit to 'month' and intervalCount to 3, then the payment interval is three months. + required ApplePayIntervalUnit intervalUnit, + + /// The number of interval units that make up the total payment interval. For example, if you set the intervalUnit to 'month' and intervalCount to 3, then the payment interval is three months. + required int intervalCount, + + /// The unix timestamp of the start date. Measured in seconds. + int? startDate, + ////The unix timestamp of the end date. Measured in seconds. */ + int? number, + }) = _RecurringCartSummaryItem; factory ApplePayCartSummaryItem.fromJson(Map json) => _$ApplePayCartSummaryItemFromJson(json); } +enum ApplePayIntervalUnit { minute, hour, day, month, year } + @freezed class ApplePayPresentParams with _$ApplePayPresentParams { @JsonSerializable(explicitToJson: true) diff --git a/packages/stripe_platform_interface/lib/src/models/apple_pay.freezed.dart b/packages/stripe_platform_interface/lib/src/models/apple_pay.freezed.dart index cee8228d8..4d9909169 100644 --- a/packages/stripe_platform_interface/lib/src/models/apple_pay.freezed.dart +++ b/packages/stripe_platform_interface/lib/src/models/apple_pay.freezed.dart @@ -242,7 +242,21 @@ abstract class _ApplePayShippingMethod implements ApplePayShippingMethod { ApplePayCartSummaryItem _$ApplePayCartSummaryItemFromJson( Map json) { - return _ApplePayCartSummaryItem.fromJson(json); + switch (json['paymentType']) { + case 'Immediate': + return _ImmediateCartSummaryItem.fromJson(json); + case 'Deferred': + return _DeferredSummaryItem.fromJson(json); + case 'Recurring': + return _RecurringCartSummaryItem.fromJson(json); + + default: + throw CheckedFromJsonException( + json, + 'paymentType', + 'ApplePayCartSummaryItem', + 'Invalid union type "${json['paymentType']}"!'); + } } /// @nodoc @@ -252,10 +266,73 @@ mixin _$ApplePayCartSummaryItem { /// The monetary amount. String get amount => throw _privateConstructorUsedError; - - /// The type of summary item - ApplePaySummaryItemType get type => throw _privateConstructorUsedError; - + @optionalTypeArgs + TResult when({ + required TResult Function(String label, String amount, bool? isPending) + immediate, + required TResult Function(String label, String amount, int deferredDate) + deferred, + required TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number) + recurring, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(_ImmediateCartSummaryItem value) immediate, + required TResult Function(_DeferredSummaryItem value) deferred, + required TResult Function(_RecurringCartSummaryItem value) recurring, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; Map toJson() => throw _privateConstructorUsedError; @JsonKey(ignore: true) $ApplePayCartSummaryItemCopyWith get copyWith => @@ -267,7 +344,7 @@ abstract class $ApplePayCartSummaryItemCopyWith<$Res> { factory $ApplePayCartSummaryItemCopyWith(ApplePayCartSummaryItem value, $Res Function(ApplePayCartSummaryItem) then) = _$ApplePayCartSummaryItemCopyWithImpl<$Res>; - $Res call({String label, String amount, ApplePaySummaryItemType type}); + $Res call({String label, String amount}); } /// @nodoc @@ -283,7 +360,6 @@ class _$ApplePayCartSummaryItemCopyWithImpl<$Res> $Res call({ Object? label = freezed, Object? amount = freezed, - Object? type = freezed, }) { return _then(_value.copyWith( label: label == freezed @@ -294,43 +370,40 @@ class _$ApplePayCartSummaryItemCopyWithImpl<$Res> ? _value.amount : amount // ignore: cast_nullable_to_non_nullable as String, - type: type == freezed - ? _value.type - : type // ignore: cast_nullable_to_non_nullable - as ApplePaySummaryItemType, )); } } /// @nodoc -abstract class _$$_ApplePayCartSummaryItemCopyWith<$Res> +abstract class _$$_ImmediateCartSummaryItemCopyWith<$Res> implements $ApplePayCartSummaryItemCopyWith<$Res> { - factory _$$_ApplePayCartSummaryItemCopyWith(_$_ApplePayCartSummaryItem value, - $Res Function(_$_ApplePayCartSummaryItem) then) = - __$$_ApplePayCartSummaryItemCopyWithImpl<$Res>; + factory _$$_ImmediateCartSummaryItemCopyWith( + _$_ImmediateCartSummaryItem value, + $Res Function(_$_ImmediateCartSummaryItem) then) = + __$$_ImmediateCartSummaryItemCopyWithImpl<$Res>; @override - $Res call({String label, String amount, ApplePaySummaryItemType type}); + $Res call({String label, String amount, bool? isPending}); } /// @nodoc -class __$$_ApplePayCartSummaryItemCopyWithImpl<$Res> +class __$$_ImmediateCartSummaryItemCopyWithImpl<$Res> extends _$ApplePayCartSummaryItemCopyWithImpl<$Res> - implements _$$_ApplePayCartSummaryItemCopyWith<$Res> { - __$$_ApplePayCartSummaryItemCopyWithImpl(_$_ApplePayCartSummaryItem _value, - $Res Function(_$_ApplePayCartSummaryItem) _then) - : super(_value, (v) => _then(v as _$_ApplePayCartSummaryItem)); + implements _$$_ImmediateCartSummaryItemCopyWith<$Res> { + __$$_ImmediateCartSummaryItemCopyWithImpl(_$_ImmediateCartSummaryItem _value, + $Res Function(_$_ImmediateCartSummaryItem) _then) + : super(_value, (v) => _then(v as _$_ImmediateCartSummaryItem)); @override - _$_ApplePayCartSummaryItem get _value => - super._value as _$_ApplePayCartSummaryItem; + _$_ImmediateCartSummaryItem get _value => + super._value as _$_ImmediateCartSummaryItem; @override $Res call({ Object? label = freezed, Object? amount = freezed, - Object? type = freezed, + Object? isPending = freezed, }) { - return _then(_$_ApplePayCartSummaryItem( + return _then(_$_ImmediateCartSummaryItem( label: label == freezed ? _value.label : label // ignore: cast_nullable_to_non_nullable @@ -339,10 +412,10 @@ class __$$_ApplePayCartSummaryItemCopyWithImpl<$Res> ? _value.amount : amount // ignore: cast_nullable_to_non_nullable as String, - type: type == freezed - ? _value.type - : type // ignore: cast_nullable_to_non_nullable - as ApplePaySummaryItemType, + isPending: isPending == freezed + ? _value.isPending + : isPending // ignore: cast_nullable_to_non_nullable + as bool?, )); } } @@ -350,14 +423,16 @@ class __$$_ApplePayCartSummaryItemCopyWithImpl<$Res> /// @nodoc @JsonSerializable(explicitToJson: true) -class _$_ApplePayCartSummaryItem implements _ApplePayCartSummaryItem { - const _$_ApplePayCartSummaryItem( +class _$_ImmediateCartSummaryItem implements _ImmediateCartSummaryItem { + const _$_ImmediateCartSummaryItem( {required this.label, required this.amount, - this.type = ApplePaySummaryItemType.fixed}); + this.isPending, + final String? $type}) + : $type = $type ?? 'Immediate'; - factory _$_ApplePayCartSummaryItem.fromJson(Map json) => - _$$_ApplePayCartSummaryItemFromJson(json); + factory _$_ImmediateCartSummaryItem.fromJson(Map json) => + _$$_ImmediateCartSummaryItemFromJson(json); /// Short localized description of the item. @override @@ -367,24 +442,26 @@ class _$_ApplePayCartSummaryItem implements _ApplePayCartSummaryItem { @override final String amount; - /// The type of summary item + /// When creating items for estimates or charges whose final value is not yet known, set this to true. @override - @JsonKey() - final ApplePaySummaryItemType type; + final bool? isPending; + + @JsonKey(name: 'paymentType') + final String $type; @override String toString() { - return 'ApplePayCartSummaryItem(label: $label, amount: $amount, type: $type)'; + return 'ApplePayCartSummaryItem.immediate(label: $label, amount: $amount, isPending: $isPending)'; } @override bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$_ApplePayCartSummaryItem && + other is _$_ImmediateCartSummaryItem && const DeepCollectionEquality().equals(other.label, label) && const DeepCollectionEquality().equals(other.amount, amount) && - const DeepCollectionEquality().equals(other.type, type)); + const DeepCollectionEquality().equals(other.isPending, isPending)); } @JsonKey(ignore: true) @@ -393,29 +470,119 @@ class _$_ApplePayCartSummaryItem implements _ApplePayCartSummaryItem { runtimeType, const DeepCollectionEquality().hash(label), const DeepCollectionEquality().hash(amount), - const DeepCollectionEquality().hash(type)); + const DeepCollectionEquality().hash(isPending)); @JsonKey(ignore: true) @override - _$$_ApplePayCartSummaryItemCopyWith<_$_ApplePayCartSummaryItem> - get copyWith => - __$$_ApplePayCartSummaryItemCopyWithImpl<_$_ApplePayCartSummaryItem>( - this, _$identity); + _$$_ImmediateCartSummaryItemCopyWith<_$_ImmediateCartSummaryItem> + get copyWith => __$$_ImmediateCartSummaryItemCopyWithImpl< + _$_ImmediateCartSummaryItem>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(String label, String amount, bool? isPending) + immediate, + required TResult Function(String label, String amount, int deferredDate) + deferred, + required TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number) + recurring, + }) { + return immediate(label, amount, isPending); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + }) { + return immediate?.call(label, amount, isPending); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + required TResult orElse(), + }) { + if (immediate != null) { + return immediate(label, amount, isPending); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_ImmediateCartSummaryItem value) immediate, + required TResult Function(_DeferredSummaryItem value) deferred, + required TResult Function(_RecurringCartSummaryItem value) recurring, + }) { + return immediate(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + }) { + return immediate?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + required TResult orElse(), + }) { + if (immediate != null) { + return immediate(this); + } + return orElse(); + } @override Map toJson() { - return _$$_ApplePayCartSummaryItemToJson(this); + return _$$_ImmediateCartSummaryItemToJson(this); } } -abstract class _ApplePayCartSummaryItem implements ApplePayCartSummaryItem { - const factory _ApplePayCartSummaryItem( +abstract class _ImmediateCartSummaryItem implements ApplePayCartSummaryItem { + const factory _ImmediateCartSummaryItem( {required final String label, required final String amount, - final ApplePaySummaryItemType type}) = _$_ApplePayCartSummaryItem; + final bool? isPending}) = _$_ImmediateCartSummaryItem; - factory _ApplePayCartSummaryItem.fromJson(Map json) = - _$_ApplePayCartSummaryItem.fromJson; + factory _ImmediateCartSummaryItem.fromJson(Map json) = + _$_ImmediateCartSummaryItem.fromJson; @override @@ -425,13 +592,522 @@ abstract class _ApplePayCartSummaryItem implements ApplePayCartSummaryItem { /// The monetary amount. String get amount => throw _privateConstructorUsedError; + + /// When creating items for estimates or charges whose final value is not yet known, set this to true. + bool? get isPending => throw _privateConstructorUsedError; + @override + @JsonKey(ignore: true) + _$$_ImmediateCartSummaryItemCopyWith<_$_ImmediateCartSummaryItem> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$_DeferredSummaryItemCopyWith<$Res> + implements $ApplePayCartSummaryItemCopyWith<$Res> { + factory _$$_DeferredSummaryItemCopyWith(_$_DeferredSummaryItem value, + $Res Function(_$_DeferredSummaryItem) then) = + __$$_DeferredSummaryItemCopyWithImpl<$Res>; + @override + $Res call({String label, String amount, int deferredDate}); +} + +/// @nodoc +class __$$_DeferredSummaryItemCopyWithImpl<$Res> + extends _$ApplePayCartSummaryItemCopyWithImpl<$Res> + implements _$$_DeferredSummaryItemCopyWith<$Res> { + __$$_DeferredSummaryItemCopyWithImpl(_$_DeferredSummaryItem _value, + $Res Function(_$_DeferredSummaryItem) _then) + : super(_value, (v) => _then(v as _$_DeferredSummaryItem)); + + @override + _$_DeferredSummaryItem get _value => super._value as _$_DeferredSummaryItem; + + @override + $Res call({ + Object? label = freezed, + Object? amount = freezed, + Object? deferredDate = freezed, + }) { + return _then(_$_DeferredSummaryItem( + label: label == freezed + ? _value.label + : label // ignore: cast_nullable_to_non_nullable + as String, + amount: amount == freezed + ? _value.amount + : amount // ignore: cast_nullable_to_non_nullable + as String, + deferredDate: deferredDate == freezed + ? _value.deferredDate + : deferredDate // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _$_DeferredSummaryItem implements _DeferredSummaryItem { + const _$_DeferredSummaryItem( + {required this.label, + required this.amount, + required this.deferredDate, + final String? $type}) + : $type = $type ?? 'Deferred'; + + factory _$_DeferredSummaryItem.fromJson(Map json) => + _$$_DeferredSummaryItemFromJson(json); + + /// Short localized description of the item. + @override + final String label; + + /// The monetary amount. + @override + final String amount; + + /// The unix timestamp of the date, in the future, of the payment. Measured in seconds. + @override + final int deferredDate; + + @JsonKey(name: 'paymentType') + final String $type; + + @override + String toString() { + return 'ApplePayCartSummaryItem.deferred(label: $label, amount: $amount, deferredDate: $deferredDate)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_DeferredSummaryItem && + const DeepCollectionEquality().equals(other.label, label) && + const DeepCollectionEquality().equals(other.amount, amount) && + const DeepCollectionEquality() + .equals(other.deferredDate, deferredDate)); + } + + @JsonKey(ignore: true) @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(label), + const DeepCollectionEquality().hash(amount), + const DeepCollectionEquality().hash(deferredDate)); + + @JsonKey(ignore: true) + @override + _$$_DeferredSummaryItemCopyWith<_$_DeferredSummaryItem> get copyWith => + __$$_DeferredSummaryItemCopyWithImpl<_$_DeferredSummaryItem>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(String label, String amount, bool? isPending) + immediate, + required TResult Function(String label, String amount, int deferredDate) + deferred, + required TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number) + recurring, + }) { + return deferred(label, amount, deferredDate); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + }) { + return deferred?.call(label, amount, deferredDate); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + required TResult orElse(), + }) { + if (deferred != null) { + return deferred(label, amount, deferredDate); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_ImmediateCartSummaryItem value) immediate, + required TResult Function(_DeferredSummaryItem value) deferred, + required TResult Function(_RecurringCartSummaryItem value) recurring, + }) { + return deferred(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + }) { + return deferred?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + required TResult orElse(), + }) { + if (deferred != null) { + return deferred(this); + } + return orElse(); + } + + @override + Map toJson() { + return _$$_DeferredSummaryItemToJson(this); + } +} + +abstract class _DeferredSummaryItem implements ApplePayCartSummaryItem { + const factory _DeferredSummaryItem( + {required final String label, + required final String amount, + required final int deferredDate}) = _$_DeferredSummaryItem; + + factory _DeferredSummaryItem.fromJson(Map json) = + _$_DeferredSummaryItem.fromJson; + + @override + + /// Short localized description of the item. + String get label => throw _privateConstructorUsedError; + @override + + /// The monetary amount. + String get amount => throw _privateConstructorUsedError; + + /// The unix timestamp of the date, in the future, of the payment. Measured in seconds. + int get deferredDate => throw _privateConstructorUsedError; + @override + @JsonKey(ignore: true) + _$$_DeferredSummaryItemCopyWith<_$_DeferredSummaryItem> get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$_RecurringCartSummaryItemCopyWith<$Res> + implements $ApplePayCartSummaryItemCopyWith<$Res> { + factory _$$_RecurringCartSummaryItemCopyWith( + _$_RecurringCartSummaryItem value, + $Res Function(_$_RecurringCartSummaryItem) then) = + __$$_RecurringCartSummaryItemCopyWithImpl<$Res>; + @override + $Res call( + {String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number}); +} + +/// @nodoc +class __$$_RecurringCartSummaryItemCopyWithImpl<$Res> + extends _$ApplePayCartSummaryItemCopyWithImpl<$Res> + implements _$$_RecurringCartSummaryItemCopyWith<$Res> { + __$$_RecurringCartSummaryItemCopyWithImpl(_$_RecurringCartSummaryItem _value, + $Res Function(_$_RecurringCartSummaryItem) _then) + : super(_value, (v) => _then(v as _$_RecurringCartSummaryItem)); + + @override + _$_RecurringCartSummaryItem get _value => + super._value as _$_RecurringCartSummaryItem; + + @override + $Res call({ + Object? label = freezed, + Object? amount = freezed, + Object? intervalUnit = freezed, + Object? intervalCount = freezed, + Object? startDate = freezed, + Object? number = freezed, + }) { + return _then(_$_RecurringCartSummaryItem( + label: label == freezed + ? _value.label + : label // ignore: cast_nullable_to_non_nullable + as String, + amount: amount == freezed + ? _value.amount + : amount // ignore: cast_nullable_to_non_nullable + as String, + intervalUnit: intervalUnit == freezed + ? _value.intervalUnit + : intervalUnit // ignore: cast_nullable_to_non_nullable + as ApplePayIntervalUnit, + intervalCount: intervalCount == freezed + ? _value.intervalCount + : intervalCount // ignore: cast_nullable_to_non_nullable + as int, + startDate: startDate == freezed + ? _value.startDate + : startDate // ignore: cast_nullable_to_non_nullable + as int?, + number: number == freezed + ? _value.number + : number // ignore: cast_nullable_to_non_nullable + as int?, + )); + } +} + +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _$_RecurringCartSummaryItem implements _RecurringCartSummaryItem { + const _$_RecurringCartSummaryItem( + {required this.label, + required this.amount, + required this.intervalUnit, + required this.intervalCount, + this.startDate, + this.number, + final String? $type}) + : $type = $type ?? 'Recurring'; + + factory _$_RecurringCartSummaryItem.fromJson(Map json) => + _$$_RecurringCartSummaryItemFromJson(json); + + /// Short localized description of the item. + @override + final String label; + + /// The monetary amount. + @override + final String amount; + + /// The amount of time – in calendar units such as day, month, or year – that represents a fraction of the total payment interval. For example, if you set the intervalUnit to 'month' and intervalCount to 3, then the payment interval is three months. + @override + final ApplePayIntervalUnit intervalUnit; + + /// The number of interval units that make up the total payment interval. For example, if you set the intervalUnit to 'month' and intervalCount to 3, then the payment interval is three months. + @override + final int intervalCount; + + /// The unix timestamp of the start date. Measured in seconds. + @override + final int? startDate; +////The unix timestamp of the end date. Measured in seconds. */ + @override + final int? number; + + @JsonKey(name: 'paymentType') + final String $type; + + @override + String toString() { + return 'ApplePayCartSummaryItem.recurring(label: $label, amount: $amount, intervalUnit: $intervalUnit, intervalCount: $intervalCount, startDate: $startDate, number: $number)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_RecurringCartSummaryItem && + const DeepCollectionEquality().equals(other.label, label) && + const DeepCollectionEquality().equals(other.amount, amount) && + const DeepCollectionEquality() + .equals(other.intervalUnit, intervalUnit) && + const DeepCollectionEquality() + .equals(other.intervalCount, intervalCount) && + const DeepCollectionEquality().equals(other.startDate, startDate) && + const DeepCollectionEquality().equals(other.number, number)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(label), + const DeepCollectionEquality().hash(amount), + const DeepCollectionEquality().hash(intervalUnit), + const DeepCollectionEquality().hash(intervalCount), + const DeepCollectionEquality().hash(startDate), + const DeepCollectionEquality().hash(number)); + + @JsonKey(ignore: true) + @override + _$$_RecurringCartSummaryItemCopyWith<_$_RecurringCartSummaryItem> + get copyWith => __$$_RecurringCartSummaryItemCopyWithImpl< + _$_RecurringCartSummaryItem>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(String label, String amount, bool? isPending) + immediate, + required TResult Function(String label, String amount, int deferredDate) + deferred, + required TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number) + recurring, + }) { + return recurring( + label, amount, intervalUnit, intervalCount, startDate, number); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + }) { + return recurring?.call( + label, amount, intervalUnit, intervalCount, startDate, number); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(String label, String amount, bool? isPending)? immediate, + TResult Function(String label, String amount, int deferredDate)? deferred, + TResult Function( + String label, + String amount, + ApplePayIntervalUnit intervalUnit, + int intervalCount, + int? startDate, + int? number)? + recurring, + required TResult orElse(), + }) { + if (recurring != null) { + return recurring( + label, amount, intervalUnit, intervalCount, startDate, number); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_ImmediateCartSummaryItem value) immediate, + required TResult Function(_DeferredSummaryItem value) deferred, + required TResult Function(_RecurringCartSummaryItem value) recurring, + }) { + return recurring(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + }) { + return recurring?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_ImmediateCartSummaryItem value)? immediate, + TResult Function(_DeferredSummaryItem value)? deferred, + TResult Function(_RecurringCartSummaryItem value)? recurring, + required TResult orElse(), + }) { + if (recurring != null) { + return recurring(this); + } + return orElse(); + } + + @override + Map toJson() { + return _$$_RecurringCartSummaryItemToJson(this); + } +} + +abstract class _RecurringCartSummaryItem implements ApplePayCartSummaryItem { + const factory _RecurringCartSummaryItem( + {required final String label, + required final String amount, + required final ApplePayIntervalUnit intervalUnit, + required final int intervalCount, + final int? startDate, + final int? number}) = _$_RecurringCartSummaryItem; + + factory _RecurringCartSummaryItem.fromJson(Map json) = + _$_RecurringCartSummaryItem.fromJson; + + @override + + /// Short localized description of the item. + String get label => throw _privateConstructorUsedError; + @override + + /// The monetary amount. + String get amount => throw _privateConstructorUsedError; + + /// The amount of time – in calendar units such as day, month, or year – that represents a fraction of the total payment interval. For example, if you set the intervalUnit to 'month' and intervalCount to 3, then the payment interval is three months. + ApplePayIntervalUnit get intervalUnit => throw _privateConstructorUsedError; + + /// The number of interval units that make up the total payment interval. For example, if you set the intervalUnit to 'month' and intervalCount to 3, then the payment interval is three months. + int get intervalCount => throw _privateConstructorUsedError; - /// The type of summary item - ApplePaySummaryItemType get type => throw _privateConstructorUsedError; + /// The unix timestamp of the start date. Measured in seconds. + int? get startDate => + throw _privateConstructorUsedError; ////The unix timestamp of the end date. Measured in seconds. */ + int? get number => throw _privateConstructorUsedError; @override @JsonKey(ignore: true) - _$$_ApplePayCartSummaryItemCopyWith<_$_ApplePayCartSummaryItem> + _$$_RecurringCartSummaryItemCopyWith<_$_RecurringCartSummaryItem> get copyWith => throw _privateConstructorUsedError; } diff --git a/packages/stripe_platform_interface/lib/src/models/apple_pay.g.dart b/packages/stripe_platform_interface/lib/src/models/apple_pay.g.dart index a60132d50..aba9eefda 100644 --- a/packages/stripe_platform_interface/lib/src/models/apple_pay.g.dart +++ b/packages/stripe_platform_interface/lib/src/models/apple_pay.g.dart @@ -32,27 +32,73 @@ const _$ApplePayShippingMethodTypeEnumMap = { ApplePayShippingMethodType.pending: 'pending', }; -_$_ApplePayCartSummaryItem _$$_ApplePayCartSummaryItemFromJson( +_$_ImmediateCartSummaryItem _$$_ImmediateCartSummaryItemFromJson( Map json) => - _$_ApplePayCartSummaryItem( + _$_ImmediateCartSummaryItem( label: json['label'] as String, amount: json['amount'] as String, - type: - $enumDecodeNullable(_$ApplePaySummaryItemTypeEnumMap, json['type']) ?? - ApplePaySummaryItemType.fixed, + isPending: json['isPending'] as bool?, + $type: json['paymentType'] as String?, ); -Map _$$_ApplePayCartSummaryItemToJson( - _$_ApplePayCartSummaryItem instance) => +Map _$$_ImmediateCartSummaryItemToJson( + _$_ImmediateCartSummaryItem instance) => { 'label': instance.label, 'amount': instance.amount, - 'type': _$ApplePaySummaryItemTypeEnumMap[instance.type], + 'isPending': instance.isPending, + 'paymentType': instance.$type, }; -const _$ApplePaySummaryItemTypeEnumMap = { - ApplePaySummaryItemType.fixed: 'fixed', - ApplePaySummaryItemType.pending: 'pending', +_$_DeferredSummaryItem _$$_DeferredSummaryItemFromJson( + Map json) => + _$_DeferredSummaryItem( + label: json['label'] as String, + amount: json['amount'] as String, + deferredDate: json['deferredDate'] as int, + $type: json['paymentType'] as String?, + ); + +Map _$$_DeferredSummaryItemToJson( + _$_DeferredSummaryItem instance) => + { + 'label': instance.label, + 'amount': instance.amount, + 'deferredDate': instance.deferredDate, + 'paymentType': instance.$type, + }; + +_$_RecurringCartSummaryItem _$$_RecurringCartSummaryItemFromJson( + Map json) => + _$_RecurringCartSummaryItem( + label: json['label'] as String, + amount: json['amount'] as String, + intervalUnit: + $enumDecode(_$ApplePayIntervalUnitEnumMap, json['intervalUnit']), + intervalCount: json['intervalCount'] as int, + startDate: json['startDate'] as int?, + number: json['number'] as int?, + $type: json['paymentType'] as String?, + ); + +Map _$$_RecurringCartSummaryItemToJson( + _$_RecurringCartSummaryItem instance) => + { + 'label': instance.label, + 'amount': instance.amount, + 'intervalUnit': _$ApplePayIntervalUnitEnumMap[instance.intervalUnit], + 'intervalCount': instance.intervalCount, + 'startDate': instance.startDate, + 'number': instance.number, + 'paymentType': instance.$type, + }; + +const _$ApplePayIntervalUnitEnumMap = { + ApplePayIntervalUnit.minute: 'minute', + ApplePayIntervalUnit.hour: 'hour', + ApplePayIntervalUnit.day: 'day', + ApplePayIntervalUnit.month: 'month', + ApplePayIntervalUnit.year: 'year', }; _$_ApplePayPresentParams _$$_ApplePayPresentParamsFromJson( diff --git a/packages/stripe_platform_interface/lib/src/models/payment_methods.dart b/packages/stripe_platform_interface/lib/src/models/payment_methods.dart index 9322587ec..8d765a6af 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_methods.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_methods.dart @@ -405,6 +405,17 @@ class PaymentMethodParams with _$PaymentMethodParams { required PaymentMethodData paymentMethodData, }) = _PaymentMethodParamsEps; + + @JsonSerializable(explicitToJson: true) + @FreezedUnionValue('Affirm') + + /// Config parameters for affirm payment method. + /// Shipping details are required most of the time. + const factory PaymentMethodParams.affirm({ + /// Paymentmethod data for this paymentmethod. + required PaymentMethodData paymentMethodData, + }) = _PaymentMethodParamsAffirm; + @JsonSerializable(explicitToJson: true) @FreezedUnionValue('GrabPay') diff --git a/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart b/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart index a414953bc..54991871e 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart @@ -2694,6 +2694,8 @@ PaymentMethodParams _$PaymentMethodParamsFromJson(Map json) { return _PaymentMethodParamsGiroPay.fromJson(json); case 'Eps': return _PaymentMethodParamsEps.fromJson(json); + case 'Affirm': + return _PaymentMethodParamsAffirm.fromJson(json); case 'GrabPay': return _PaymentMethodParamsPay.fromJson(json); case 'P24': @@ -2743,6 +2745,7 @@ mixin _$PaymentMethodParams { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -2776,6 +2779,7 @@ mixin _$PaymentMethodParams { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -2808,6 +2812,7 @@ mixin _$PaymentMethodParams { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -2837,6 +2842,7 @@ mixin _$PaymentMethodParams { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -2863,6 +2869,7 @@ mixin _$PaymentMethodParams { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -2888,6 +2895,7 @@ mixin _$PaymentMethodParams { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -3051,6 +3059,7 @@ class _$_PaymentMethodParamsCard implements _PaymentMethodParamsCard { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -3087,6 +3096,7 @@ class _$_PaymentMethodParamsCard implements _PaymentMethodParamsCard { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -3122,6 +3132,7 @@ class _$_PaymentMethodParamsCard implements _PaymentMethodParamsCard { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -3157,6 +3168,7 @@ class _$_PaymentMethodParamsCard implements _PaymentMethodParamsCard { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -3186,6 +3198,7 @@ class _$_PaymentMethodParamsCard implements _PaymentMethodParamsCard { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -3214,6 +3227,7 @@ class _$_PaymentMethodParamsCard implements _PaymentMethodParamsCard { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -3392,6 +3406,7 @@ class _$_PaymentMethodParamsCardWithToken required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -3428,6 +3443,7 @@ class _$_PaymentMethodParamsCardWithToken TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -3463,6 +3479,7 @@ class _$_PaymentMethodParamsCardWithToken TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -3498,6 +3515,7 @@ class _$_PaymentMethodParamsCardWithToken required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -3527,6 +3545,7 @@ class _$_PaymentMethodParamsCardWithToken TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -3555,6 +3574,7 @@ class _$_PaymentMethodParamsCardWithToken TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -3738,6 +3758,7 @@ class _$_PaymentMethodParamsCardWithMethodId required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -3774,6 +3795,7 @@ class _$_PaymentMethodParamsCardWithMethodId TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -3809,6 +3831,7 @@ class _$_PaymentMethodParamsCardWithMethodId TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -3844,6 +3867,7 @@ class _$_PaymentMethodParamsCardWithMethodId required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -3873,6 +3897,7 @@ class _$_PaymentMethodParamsCardWithMethodId TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -3901,6 +3926,7 @@ class _$_PaymentMethodParamsCardWithMethodId TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4054,6 +4080,7 @@ class _$_PaymentMethodParamsAlipay implements _PaymentMethodParamsAlipay { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -4090,6 +4117,7 @@ class _$_PaymentMethodParamsAlipay implements _PaymentMethodParamsAlipay { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -4125,6 +4153,7 @@ class _$_PaymentMethodParamsAlipay implements _PaymentMethodParamsAlipay { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -4160,6 +4189,7 @@ class _$_PaymentMethodParamsAlipay implements _PaymentMethodParamsAlipay { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -4189,6 +4219,7 @@ class _$_PaymentMethodParamsAlipay implements _PaymentMethodParamsAlipay { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4217,6 +4248,7 @@ class _$_PaymentMethodParamsAlipay implements _PaymentMethodParamsAlipay { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4362,6 +4394,7 @@ class _$_PaymentMethodParamsIdeal implements _PaymentMethodParamsIdeal { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -4398,6 +4431,7 @@ class _$_PaymentMethodParamsIdeal implements _PaymentMethodParamsIdeal { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -4433,6 +4467,7 @@ class _$_PaymentMethodParamsIdeal implements _PaymentMethodParamsIdeal { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -4468,6 +4503,7 @@ class _$_PaymentMethodParamsIdeal implements _PaymentMethodParamsIdeal { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -4497,6 +4533,7 @@ class _$_PaymentMethodParamsIdeal implements _PaymentMethodParamsIdeal { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4525,6 +4562,7 @@ class _$_PaymentMethodParamsIdeal implements _PaymentMethodParamsIdeal { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4672,6 +4710,7 @@ class _$_PaymentMethodParamsAubecs implements _PaymentMethodParamsAubecs { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -4708,6 +4747,7 @@ class _$_PaymentMethodParamsAubecs implements _PaymentMethodParamsAubecs { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -4743,6 +4783,7 @@ class _$_PaymentMethodParamsAubecs implements _PaymentMethodParamsAubecs { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -4778,6 +4819,7 @@ class _$_PaymentMethodParamsAubecs implements _PaymentMethodParamsAubecs { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -4807,6 +4849,7 @@ class _$_PaymentMethodParamsAubecs implements _PaymentMethodParamsAubecs { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4835,6 +4878,7 @@ class _$_PaymentMethodParamsAubecs implements _PaymentMethodParamsAubecs { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -4983,6 +5027,7 @@ class _$_PaymentMethodParamsBankContact required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -5019,6 +5064,7 @@ class _$_PaymentMethodParamsBankContact TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5054,6 +5100,7 @@ class _$_PaymentMethodParamsBankContact TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5089,6 +5136,7 @@ class _$_PaymentMethodParamsBankContact required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -5118,6 +5166,7 @@ class _$_PaymentMethodParamsBankContact TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -5146,6 +5195,7 @@ class _$_PaymentMethodParamsBankContact TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -5291,6 +5341,7 @@ class _$_PaymentMethodParamsGiroPay implements _PaymentMethodParamsGiroPay { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -5327,6 +5378,7 @@ class _$_PaymentMethodParamsGiroPay implements _PaymentMethodParamsGiroPay { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5362,6 +5414,7 @@ class _$_PaymentMethodParamsGiroPay implements _PaymentMethodParamsGiroPay { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5397,6 +5450,7 @@ class _$_PaymentMethodParamsGiroPay implements _PaymentMethodParamsGiroPay { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -5426,6 +5480,7 @@ class _$_PaymentMethodParamsGiroPay implements _PaymentMethodParamsGiroPay { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -5454,6 +5509,7 @@ class _$_PaymentMethodParamsGiroPay implements _PaymentMethodParamsGiroPay { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -5597,6 +5653,7 @@ class _$_PaymentMethodParamsEps implements _PaymentMethodParamsEps { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -5633,6 +5690,7 @@ class _$_PaymentMethodParamsEps implements _PaymentMethodParamsEps { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5668,6 +5726,7 @@ class _$_PaymentMethodParamsEps implements _PaymentMethodParamsEps { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5703,6 +5762,7 @@ class _$_PaymentMethodParamsEps implements _PaymentMethodParamsEps { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -5732,6 +5792,7 @@ class _$_PaymentMethodParamsEps implements _PaymentMethodParamsEps { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -5760,6 +5821,7 @@ class _$_PaymentMethodParamsEps implements _PaymentMethodParamsEps { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -5800,6 +5862,320 @@ abstract class _PaymentMethodParamsEps implements PaymentMethodParams { throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$_PaymentMethodParamsAffirmCopyWith<$Res> { + factory _$$_PaymentMethodParamsAffirmCopyWith( + _$_PaymentMethodParamsAffirm value, + $Res Function(_$_PaymentMethodParamsAffirm) then) = + __$$_PaymentMethodParamsAffirmCopyWithImpl<$Res>; + $Res call({PaymentMethodData paymentMethodData}); + + $PaymentMethodDataCopyWith<$Res> get paymentMethodData; +} + +/// @nodoc +class __$$_PaymentMethodParamsAffirmCopyWithImpl<$Res> + extends _$PaymentMethodParamsCopyWithImpl<$Res> + implements _$$_PaymentMethodParamsAffirmCopyWith<$Res> { + __$$_PaymentMethodParamsAffirmCopyWithImpl( + _$_PaymentMethodParamsAffirm _value, + $Res Function(_$_PaymentMethodParamsAffirm) _then) + : super(_value, (v) => _then(v as _$_PaymentMethodParamsAffirm)); + + @override + _$_PaymentMethodParamsAffirm get _value => + super._value as _$_PaymentMethodParamsAffirm; + + @override + $Res call({ + Object? paymentMethodData = freezed, + }) { + return _then(_$_PaymentMethodParamsAffirm( + paymentMethodData: paymentMethodData == freezed + ? _value.paymentMethodData + : paymentMethodData // ignore: cast_nullable_to_non_nullable + as PaymentMethodData, + )); + } + + @override + $PaymentMethodDataCopyWith<$Res> get paymentMethodData { + return $PaymentMethodDataCopyWith<$Res>(_value.paymentMethodData, (value) { + return _then(_value.copyWith(paymentMethodData: value)); + }); + } +} + +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _$_PaymentMethodParamsAffirm implements _PaymentMethodParamsAffirm { + const _$_PaymentMethodParamsAffirm( + {required this.paymentMethodData, final String? $type}) + : $type = $type ?? 'Affirm'; + + factory _$_PaymentMethodParamsAffirm.fromJson(Map json) => + _$$_PaymentMethodParamsAffirmFromJson(json); + + /// Paymentmethod data for this paymentmethod. + @override + final PaymentMethodData paymentMethodData; + + @JsonKey(name: 'paymentMethodType') + final String $type; + + @override + String toString() { + return 'PaymentMethodParams.affirm(paymentMethodData: $paymentMethodData)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_PaymentMethodParamsAffirm && + const DeepCollectionEquality() + .equals(other.paymentMethodData, paymentMethodData)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, const DeepCollectionEquality().hash(paymentMethodData)); + + @JsonKey(ignore: true) + @override + _$$_PaymentMethodParamsAffirmCopyWith<_$_PaymentMethodParamsAffirm> + get copyWith => __$$_PaymentMethodParamsAffirmCopyWithImpl< + _$_PaymentMethodParamsAffirm>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + PaymentMethodData paymentMethodData, PaymentMethodOptions? options) + card, + required TResult Function(PaymentMethodDataCardFromToken paymentMethodData, + PaymentMethodOptions? options) + cardFromToken, + required TResult Function(PaymentMethodDataCardFromMethod paymentMethodData, + PaymentMethodOptions? options) + cardFromMethodId, + required TResult Function(PaymentMethodData paymentMethodData) alipay, + required TResult Function(PaymentMethodDataIdeal paymentMethodData) ideal, + required TResult Function(PaymentMethodDataAubecs paymentMethodData) aubecs, + required TResult Function(PaymentMethodData paymentMethodData) bancontact, + required TResult Function(PaymentMethodData paymentMethodData) giroPay, + required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, + required TResult Function(PaymentMethodData paymentMethodData) grabPay, + required TResult Function(PaymentMethodData paymentMethodData) p24, + required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, + required TResult Function(PaymentMethodDataSepa paymentMethodData) + sepaDebit, + required TResult Function(PaymentMethodDataSofort paymentMethodData) sofort, + required TResult Function(PaymentMethodDataAfterPay paymentMethodData) + afterpayClearpay, + required TResult Function(PaymentMethodData paymentMethodData) oxxo, + required TResult Function(PaymentMethodData paymentMethodData) klarna, + required TResult Function(PaymentMethodData paymentMethodData) payPal, + required TResult Function(PaymentMethodDataUsBank paymentMethodData, + PaymentMethodOptions? options) + usBankAccount, + }) { + return affirm(paymentMethodData); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult Function( + PaymentMethodData paymentMethodData, PaymentMethodOptions? options)? + card, + TResult Function(PaymentMethodDataCardFromToken paymentMethodData, + PaymentMethodOptions? options)? + cardFromToken, + TResult Function(PaymentMethodDataCardFromMethod paymentMethodData, + PaymentMethodOptions? options)? + cardFromMethodId, + TResult Function(PaymentMethodData paymentMethodData)? alipay, + TResult Function(PaymentMethodDataIdeal paymentMethodData)? ideal, + TResult Function(PaymentMethodDataAubecs paymentMethodData)? aubecs, + TResult Function(PaymentMethodData paymentMethodData)? bancontact, + TResult Function(PaymentMethodData paymentMethodData)? giroPay, + TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, + TResult Function(PaymentMethodData paymentMethodData)? grabPay, + TResult Function(PaymentMethodData paymentMethodData)? p24, + TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, + TResult Function(PaymentMethodDataSepa paymentMethodData)? sepaDebit, + TResult Function(PaymentMethodDataSofort paymentMethodData)? sofort, + TResult Function(PaymentMethodDataAfterPay paymentMethodData)? + afterpayClearpay, + TResult Function(PaymentMethodData paymentMethodData)? oxxo, + TResult Function(PaymentMethodData paymentMethodData)? klarna, + TResult Function(PaymentMethodData paymentMethodData)? payPal, + TResult Function(PaymentMethodDataUsBank paymentMethodData, + PaymentMethodOptions? options)? + usBankAccount, + }) { + return affirm?.call(paymentMethodData); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + PaymentMethodData paymentMethodData, PaymentMethodOptions? options)? + card, + TResult Function(PaymentMethodDataCardFromToken paymentMethodData, + PaymentMethodOptions? options)? + cardFromToken, + TResult Function(PaymentMethodDataCardFromMethod paymentMethodData, + PaymentMethodOptions? options)? + cardFromMethodId, + TResult Function(PaymentMethodData paymentMethodData)? alipay, + TResult Function(PaymentMethodDataIdeal paymentMethodData)? ideal, + TResult Function(PaymentMethodDataAubecs paymentMethodData)? aubecs, + TResult Function(PaymentMethodData paymentMethodData)? bancontact, + TResult Function(PaymentMethodData paymentMethodData)? giroPay, + TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, + TResult Function(PaymentMethodData paymentMethodData)? grabPay, + TResult Function(PaymentMethodData paymentMethodData)? p24, + TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, + TResult Function(PaymentMethodDataSepa paymentMethodData)? sepaDebit, + TResult Function(PaymentMethodDataSofort paymentMethodData)? sofort, + TResult Function(PaymentMethodDataAfterPay paymentMethodData)? + afterpayClearpay, + TResult Function(PaymentMethodData paymentMethodData)? oxxo, + TResult Function(PaymentMethodData paymentMethodData)? klarna, + TResult Function(PaymentMethodData paymentMethodData)? payPal, + TResult Function(PaymentMethodDataUsBank paymentMethodData, + PaymentMethodOptions? options)? + usBankAccount, + required TResult orElse(), + }) { + if (affirm != null) { + return affirm(paymentMethodData); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_PaymentMethodParamsCard value) card, + required TResult Function(_PaymentMethodParamsCardWithToken value) + cardFromToken, + required TResult Function(_PaymentMethodParamsCardWithMethodId value) + cardFromMethodId, + required TResult Function(_PaymentMethodParamsAlipay value) alipay, + required TResult Function(_PaymentMethodParamsIdeal value) ideal, + required TResult Function(_PaymentMethodParamsAubecs value) aubecs, + required TResult Function(_PaymentMethodParamsBankContact value) bancontact, + required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, + required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, + required TResult Function(_PaymentMethodParamsPay value) grabPay, + required TResult Function(_PaymentMethodParamsP24 value) p24, + required TResult Function(_PaymentMethodParamsFpx value) fpx, + required TResult Function(_PaymentMethodParamsSepaDebit value) sepaDebit, + required TResult Function(_PaymentMethodParamsSofort value) sofort, + required TResult Function(_PaymentMethodParamsAfterpayClearpay value) + afterpayClearpay, + required TResult Function(_PaymentMethodParamsOxxo value) oxxo, + required TResult Function(_PaymentMethodParamsKlarna value) klarna, + required TResult Function(_PaymentMethodParamsPayPal value) payPal, + required TResult Function(_PaymentMethodParamsUsBankAccount value) + usBankAccount, + }) { + return affirm(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult Function(_PaymentMethodParamsCard value)? card, + TResult Function(_PaymentMethodParamsCardWithToken value)? cardFromToken, + TResult Function(_PaymentMethodParamsCardWithMethodId value)? + cardFromMethodId, + TResult Function(_PaymentMethodParamsAlipay value)? alipay, + TResult Function(_PaymentMethodParamsIdeal value)? ideal, + TResult Function(_PaymentMethodParamsAubecs value)? aubecs, + TResult Function(_PaymentMethodParamsBankContact value)? bancontact, + TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, + TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, + TResult Function(_PaymentMethodParamsPay value)? grabPay, + TResult Function(_PaymentMethodParamsP24 value)? p24, + TResult Function(_PaymentMethodParamsFpx value)? fpx, + TResult Function(_PaymentMethodParamsSepaDebit value)? sepaDebit, + TResult Function(_PaymentMethodParamsSofort value)? sofort, + TResult Function(_PaymentMethodParamsAfterpayClearpay value)? + afterpayClearpay, + TResult Function(_PaymentMethodParamsOxxo value)? oxxo, + TResult Function(_PaymentMethodParamsKlarna value)? klarna, + TResult Function(_PaymentMethodParamsPayPal value)? payPal, + TResult Function(_PaymentMethodParamsUsBankAccount value)? usBankAccount, + }) { + return affirm?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_PaymentMethodParamsCard value)? card, + TResult Function(_PaymentMethodParamsCardWithToken value)? cardFromToken, + TResult Function(_PaymentMethodParamsCardWithMethodId value)? + cardFromMethodId, + TResult Function(_PaymentMethodParamsAlipay value)? alipay, + TResult Function(_PaymentMethodParamsIdeal value)? ideal, + TResult Function(_PaymentMethodParamsAubecs value)? aubecs, + TResult Function(_PaymentMethodParamsBankContact value)? bancontact, + TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, + TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, + TResult Function(_PaymentMethodParamsPay value)? grabPay, + TResult Function(_PaymentMethodParamsP24 value)? p24, + TResult Function(_PaymentMethodParamsFpx value)? fpx, + TResult Function(_PaymentMethodParamsSepaDebit value)? sepaDebit, + TResult Function(_PaymentMethodParamsSofort value)? sofort, + TResult Function(_PaymentMethodParamsAfterpayClearpay value)? + afterpayClearpay, + TResult Function(_PaymentMethodParamsOxxo value)? oxxo, + TResult Function(_PaymentMethodParamsKlarna value)? klarna, + TResult Function(_PaymentMethodParamsPayPal value)? payPal, + TResult Function(_PaymentMethodParamsUsBankAccount value)? usBankAccount, + required TResult orElse(), + }) { + if (affirm != null) { + return affirm(this); + } + return orElse(); + } + + @override + Map toJson() { + return _$$_PaymentMethodParamsAffirmToJson(this); + } +} + +abstract class _PaymentMethodParamsAffirm implements PaymentMethodParams { + const factory _PaymentMethodParamsAffirm( + {required final PaymentMethodData paymentMethodData}) = + _$_PaymentMethodParamsAffirm; + + factory _PaymentMethodParamsAffirm.fromJson(Map json) = + _$_PaymentMethodParamsAffirm.fromJson; + + /// Paymentmethod data for this paymentmethod. + PaymentMethodData get paymentMethodData => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + _$$_PaymentMethodParamsAffirmCopyWith<_$_PaymentMethodParamsAffirm> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc abstract class _$$_PaymentMethodParamsPayCopyWith<$Res> { factory _$$_PaymentMethodParamsPayCopyWith(_$_PaymentMethodParamsPay value, @@ -5903,6 +6279,7 @@ class _$_PaymentMethodParamsPay implements _PaymentMethodParamsPay { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -5939,6 +6316,7 @@ class _$_PaymentMethodParamsPay implements _PaymentMethodParamsPay { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -5974,6 +6352,7 @@ class _$_PaymentMethodParamsPay implements _PaymentMethodParamsPay { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6009,6 +6388,7 @@ class _$_PaymentMethodParamsPay implements _PaymentMethodParamsPay { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -6038,6 +6418,7 @@ class _$_PaymentMethodParamsPay implements _PaymentMethodParamsPay { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6066,6 +6447,7 @@ class _$_PaymentMethodParamsPay implements _PaymentMethodParamsPay { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6209,6 +6591,7 @@ class _$_PaymentMethodParamsP24 implements _PaymentMethodParamsP24 { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -6245,6 +6628,7 @@ class _$_PaymentMethodParamsP24 implements _PaymentMethodParamsP24 { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6280,6 +6664,7 @@ class _$_PaymentMethodParamsP24 implements _PaymentMethodParamsP24 { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6315,6 +6700,7 @@ class _$_PaymentMethodParamsP24 implements _PaymentMethodParamsP24 { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -6344,6 +6730,7 @@ class _$_PaymentMethodParamsP24 implements _PaymentMethodParamsP24 { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6372,6 +6759,7 @@ class _$_PaymentMethodParamsP24 implements _PaymentMethodParamsP24 { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6516,6 +6904,7 @@ class _$_PaymentMethodParamsFpx implements _PaymentMethodParamsFpx { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -6552,6 +6941,7 @@ class _$_PaymentMethodParamsFpx implements _PaymentMethodParamsFpx { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6587,6 +6977,7 @@ class _$_PaymentMethodParamsFpx implements _PaymentMethodParamsFpx { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6622,6 +7013,7 @@ class _$_PaymentMethodParamsFpx implements _PaymentMethodParamsFpx { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -6651,6 +7043,7 @@ class _$_PaymentMethodParamsFpx implements _PaymentMethodParamsFpx { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6679,6 +7072,7 @@ class _$_PaymentMethodParamsFpx implements _PaymentMethodParamsFpx { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6826,6 +7220,7 @@ class _$_PaymentMethodParamsSepaDebit implements _PaymentMethodParamsSepaDebit { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -6862,6 +7257,7 @@ class _$_PaymentMethodParamsSepaDebit implements _PaymentMethodParamsSepaDebit { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6897,6 +7293,7 @@ class _$_PaymentMethodParamsSepaDebit implements _PaymentMethodParamsSepaDebit { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -6932,6 +7329,7 @@ class _$_PaymentMethodParamsSepaDebit implements _PaymentMethodParamsSepaDebit { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -6961,6 +7359,7 @@ class _$_PaymentMethodParamsSepaDebit implements _PaymentMethodParamsSepaDebit { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -6989,6 +7388,7 @@ class _$_PaymentMethodParamsSepaDebit implements _PaymentMethodParamsSepaDebit { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -7135,6 +7535,7 @@ class _$_PaymentMethodParamsSofort implements _PaymentMethodParamsSofort { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -7171,6 +7572,7 @@ class _$_PaymentMethodParamsSofort implements _PaymentMethodParamsSofort { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -7206,6 +7608,7 @@ class _$_PaymentMethodParamsSofort implements _PaymentMethodParamsSofort { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -7241,6 +7644,7 @@ class _$_PaymentMethodParamsSofort implements _PaymentMethodParamsSofort { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -7270,6 +7674,7 @@ class _$_PaymentMethodParamsSofort implements _PaymentMethodParamsSofort { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -7298,6 +7703,7 @@ class _$_PaymentMethodParamsSofort implements _PaymentMethodParamsSofort { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -7447,6 +7853,7 @@ class _$_PaymentMethodParamsAfterpayClearpay required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -7483,6 +7890,7 @@ class _$_PaymentMethodParamsAfterpayClearpay TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -7518,6 +7926,7 @@ class _$_PaymentMethodParamsAfterpayClearpay TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -7553,6 +7962,7 @@ class _$_PaymentMethodParamsAfterpayClearpay required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -7582,6 +7992,7 @@ class _$_PaymentMethodParamsAfterpayClearpay TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -7610,6 +8021,7 @@ class _$_PaymentMethodParamsAfterpayClearpay TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -7757,6 +8169,7 @@ class _$_PaymentMethodParamsOxxo implements _PaymentMethodParamsOxxo { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -7793,6 +8206,7 @@ class _$_PaymentMethodParamsOxxo implements _PaymentMethodParamsOxxo { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -7828,6 +8242,7 @@ class _$_PaymentMethodParamsOxxo implements _PaymentMethodParamsOxxo { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -7863,6 +8278,7 @@ class _$_PaymentMethodParamsOxxo implements _PaymentMethodParamsOxxo { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -7892,6 +8308,7 @@ class _$_PaymentMethodParamsOxxo implements _PaymentMethodParamsOxxo { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -7920,6 +8337,7 @@ class _$_PaymentMethodParamsOxxo implements _PaymentMethodParamsOxxo { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -8068,6 +8486,7 @@ class _$_PaymentMethodParamsKlarna implements _PaymentMethodParamsKlarna { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -8104,6 +8523,7 @@ class _$_PaymentMethodParamsKlarna implements _PaymentMethodParamsKlarna { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -8139,6 +8559,7 @@ class _$_PaymentMethodParamsKlarna implements _PaymentMethodParamsKlarna { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -8174,6 +8595,7 @@ class _$_PaymentMethodParamsKlarna implements _PaymentMethodParamsKlarna { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -8203,6 +8625,7 @@ class _$_PaymentMethodParamsKlarna implements _PaymentMethodParamsKlarna { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -8231,6 +8654,7 @@ class _$_PaymentMethodParamsKlarna implements _PaymentMethodParamsKlarna { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -8382,6 +8806,7 @@ class _$_PaymentMethodParamsPayPal implements _PaymentMethodParamsPayPal { required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -8418,6 +8843,7 @@ class _$_PaymentMethodParamsPayPal implements _PaymentMethodParamsPayPal { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -8453,6 +8879,7 @@ class _$_PaymentMethodParamsPayPal implements _PaymentMethodParamsPayPal { TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -8488,6 +8915,7 @@ class _$_PaymentMethodParamsPayPal implements _PaymentMethodParamsPayPal { required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -8517,6 +8945,7 @@ class _$_PaymentMethodParamsPayPal implements _PaymentMethodParamsPayPal { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -8545,6 +8974,7 @@ class _$_PaymentMethodParamsPayPal implements _PaymentMethodParamsPayPal { TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -8723,6 +9153,7 @@ class _$_PaymentMethodParamsUsBankAccount required TResult Function(PaymentMethodData paymentMethodData) bancontact, required TResult Function(PaymentMethodData paymentMethodData) giroPay, required TResult Function(PaymentMethodData paymentMethodData) eps, + required TResult Function(PaymentMethodData paymentMethodData) affirm, required TResult Function(PaymentMethodData paymentMethodData) grabPay, required TResult Function(PaymentMethodData paymentMethodData) p24, required TResult Function(PaymentMethodDataFpx paymentMethodData) fpx, @@ -8759,6 +9190,7 @@ class _$_PaymentMethodParamsUsBankAccount TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -8794,6 +9226,7 @@ class _$_PaymentMethodParamsUsBankAccount TResult Function(PaymentMethodData paymentMethodData)? bancontact, TResult Function(PaymentMethodData paymentMethodData)? giroPay, TResult Function(PaymentMethodData paymentMethodData)? eps, + TResult Function(PaymentMethodData paymentMethodData)? affirm, TResult Function(PaymentMethodData paymentMethodData)? grabPay, TResult Function(PaymentMethodData paymentMethodData)? p24, TResult Function(PaymentMethodDataFpx paymentMethodData)? fpx, @@ -8829,6 +9262,7 @@ class _$_PaymentMethodParamsUsBankAccount required TResult Function(_PaymentMethodParamsBankContact value) bancontact, required TResult Function(_PaymentMethodParamsGiroPay value) giroPay, required TResult Function(_PaymentMethodParamsEps value) eps, + required TResult Function(_PaymentMethodParamsAffirm value) affirm, required TResult Function(_PaymentMethodParamsPay value) grabPay, required TResult Function(_PaymentMethodParamsP24 value) p24, required TResult Function(_PaymentMethodParamsFpx value) fpx, @@ -8858,6 +9292,7 @@ class _$_PaymentMethodParamsUsBankAccount TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, @@ -8886,6 +9321,7 @@ class _$_PaymentMethodParamsUsBankAccount TResult Function(_PaymentMethodParamsBankContact value)? bancontact, TResult Function(_PaymentMethodParamsGiroPay value)? giroPay, TResult Function(_PaymentMethodParamsEps value)? eps, + TResult Function(_PaymentMethodParamsAffirm value)? affirm, TResult Function(_PaymentMethodParamsPay value)? grabPay, TResult Function(_PaymentMethodParamsP24 value)? p24, TResult Function(_PaymentMethodParamsFpx value)? fpx, diff --git a/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart b/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart index a54940657..a7795bbfb 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart @@ -354,6 +354,21 @@ Map _$$_PaymentMethodParamsEpsToJson( 'paymentMethodType': instance.$type, }; +_$_PaymentMethodParamsAffirm _$$_PaymentMethodParamsAffirmFromJson( + Map json) => + _$_PaymentMethodParamsAffirm( + paymentMethodData: PaymentMethodData.fromJson( + json['paymentMethodData'] as Map), + $type: json['paymentMethodType'] as String?, + ); + +Map _$$_PaymentMethodParamsAffirmToJson( + _$_PaymentMethodParamsAffirm instance) => + { + 'paymentMethodData': instance.paymentMethodData.toJson(), + 'paymentMethodType': instance.$type, + }; + _$_PaymentMethodParamsPay _$$_PaymentMethodParamsPayFromJson( Map json) => _$_PaymentMethodParamsPay( diff --git a/packages/stripe_platform_interface/lib/src/models/payment_sheet.dart b/packages/stripe_platform_interface/lib/src/models/payment_sheet.dart index 82d11ebdd..d120a361e 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_sheet.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_sheet.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:stripe_platform_interface/src/models/color.dart'; -import 'package:stripe_platform_interface/src/models/payment_methods.dart'; +import 'package:stripe_platform_interface/stripe_platform_interface.dart'; part 'payment_sheet.freezed.dart'; part 'payment_sheet.g.dart'; @@ -41,20 +41,9 @@ class SetupPaymentSheetParameters with _$SetupPaymentSheetParameters { /// Display name of the merchant String? merchantDisplayName, - /// ISO country code of the country where the merchant is located - String? merchantCountryCode, - - /// Three letter ISO currency code - /// - /// Must be a supported currency code. See https://stripe.com/docs/currencies for supported currencies. - /// - /// When [setupIntentClientSecret] is not empty it is required to provide a currencyCode. - String? currencyCode, - /// Configuration related to Apple Pay /// If set, PaymentSheet displays Apple Pay as a payment option - /// A merchantCountryCode would then be required - bool? applePay, + PaymentSheetApplePay? applePay, /// Style options for colors in PaymentSheet /// @@ -63,8 +52,7 @@ class SetupPaymentSheetParameters with _$SetupPaymentSheetParameters { /// Configuration related to Google Pay /// If set, PaymentSheet displays Google Pay as a payment option - /// A merchantCountryCode would then be required - bool? googlePay, + PaymentSheetGooglePay? googlePay, /// Flag that allows payment methods that do not move money at the send of the checkout. /// @@ -76,9 +64,6 @@ class SetupPaymentSheetParameters with _$SetupPaymentSheetParameters { /// When no appearance defined it will fallback to [style] or Stripe default. PaymentSheetAppearance? appearance, - /// Flag for using the test environment - @Default(false) bool testEnv, - /// Default billing information of the customer. /// /// Use this field to already prefill the customers billingDetails in the payment sheet. @@ -95,6 +80,48 @@ class SetupPaymentSheetParameters with _$SetupPaymentSheetParameters { _$SetupPaymentSheetParametersFromJson(json); } + +/// Parameters related to the Payment sheet Apple Pay config. +@freezed +class PaymentSheetApplePay with _$PaymentSheetApplePay { + @JsonSerializable(explicitToJson: true) + const factory PaymentSheetApplePay({ + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + required String merchantCountryCode, + + ///An array of CartSummaryItem item objects that summarize the amount of the payment. If you're using a SetupIntent + /// for a recurring payment, you should set this to display the amount you intend to charge. + List? paymentSummaryItems, + + + }) = _PaymentSheetApplePay; + + factory PaymentSheetApplePay.fromJson(Map json) => + _$PaymentSheetApplePayFromJson(json); +} + +/// Parameters related to the Payment sheet Google Pay config. +@freezed +class PaymentSheetGooglePay with _$PaymentSheetGooglePay { + @JsonSerializable(explicitToJson: true) + const factory PaymentSheetGooglePay({ + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + required String merchantCountryCode, + + /// The three-letter ISO 4217 alphabetic currency code, e.g. "USD" or "EUR". Required in order to support Google Pay when processing a Setup Intent. + String? currencyCode, + + /// Whether or not to use the google pay test environment. Set to `true` until you have applied for and been granted access to the Production environment. + @Default(false) bool testEnv, + + + + }) = _PaymentSheetGooglePay; + + factory PaymentSheetGooglePay.fromJson(Map json) => + _$PaymentSheetGooglePayFromJson(json); +} + /// Parameters that change the appearance of the payment sheet. @freezed class PaymentSheetAppearance with _$PaymentSheetAppearance { diff --git a/packages/stripe_platform_interface/lib/src/models/payment_sheet.freezed.dart b/packages/stripe_platform_interface/lib/src/models/payment_sheet.freezed.dart index 828a4b6e1..f2b150241 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_sheet.freezed.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_sheet.freezed.dart @@ -48,20 +48,9 @@ mixin _$SetupPaymentSheetParameters { /// Display name of the merchant String? get merchantDisplayName => throw _privateConstructorUsedError; - /// ISO country code of the country where the merchant is located - String? get merchantCountryCode => throw _privateConstructorUsedError; - - /// Three letter ISO currency code - /// - /// Must be a supported currency code. See https://stripe.com/docs/currencies for supported currencies. - /// - /// When [setupIntentClientSecret] is not empty it is required to provide a currencyCode. - String? get currencyCode => throw _privateConstructorUsedError; - /// Configuration related to Apple Pay /// If set, PaymentSheet displays Apple Pay as a payment option - /// A merchantCountryCode would then be required - bool? get applePay => throw _privateConstructorUsedError; + PaymentSheetApplePay? get applePay => throw _privateConstructorUsedError; /// Style options for colors in PaymentSheet /// @@ -71,8 +60,7 @@ mixin _$SetupPaymentSheetParameters { /// Configuration related to Google Pay /// If set, PaymentSheet displays Google Pay as a payment option - /// A merchantCountryCode would then be required - bool? get googlePay => throw _privateConstructorUsedError; + PaymentSheetGooglePay? get googlePay => throw _privateConstructorUsedError; /// Flag that allows payment methods that do not move money at the send of the checkout. /// @@ -84,9 +72,6 @@ mixin _$SetupPaymentSheetParameters { /// When no appearance defined it will fallback to [style] or Stripe default. PaymentSheetAppearance? get appearance => throw _privateConstructorUsedError; - /// Flag for using the test environment - bool get testEnv => throw _privateConstructorUsedError; - /// Default billing information of the customer. /// /// Use this field to already prefill the customers billingDetails in the payment sheet. @@ -118,17 +103,16 @@ abstract class $SetupPaymentSheetParametersCopyWith<$Res> { String? paymentIntentClientSecret, String? setupIntentClientSecret, String? merchantDisplayName, - String? merchantCountryCode, - String? currencyCode, - bool? applePay, + PaymentSheetApplePay? applePay, @JsonKey(toJson: UserInterfaceStyleKey.toJson) ThemeMode? style, - bool? googlePay, + PaymentSheetGooglePay? googlePay, bool allowsDelayedPaymentMethods, PaymentSheetAppearance? appearance, - bool testEnv, @JsonKey(name: 'defaultBillingDetails') BillingDetails? billingDetails, String? returnURL}); + $PaymentSheetApplePayCopyWith<$Res>? get applePay; + $PaymentSheetGooglePayCopyWith<$Res>? get googlePay; $PaymentSheetAppearanceCopyWith<$Res>? get appearance; $BillingDetailsCopyWith<$Res>? get billingDetails; } @@ -150,14 +134,11 @@ class _$SetupPaymentSheetParametersCopyWithImpl<$Res> Object? paymentIntentClientSecret = freezed, Object? setupIntentClientSecret = freezed, Object? merchantDisplayName = freezed, - Object? merchantCountryCode = freezed, - Object? currencyCode = freezed, Object? applePay = freezed, Object? style = freezed, Object? googlePay = freezed, Object? allowsDelayedPaymentMethods = freezed, Object? appearance = freezed, - Object? testEnv = freezed, Object? billingDetails = freezed, Object? returnURL = freezed, }) { @@ -186,18 +167,10 @@ class _$SetupPaymentSheetParametersCopyWithImpl<$Res> ? _value.merchantDisplayName : merchantDisplayName // ignore: cast_nullable_to_non_nullable as String?, - merchantCountryCode: merchantCountryCode == freezed - ? _value.merchantCountryCode - : merchantCountryCode // ignore: cast_nullable_to_non_nullable - as String?, - currencyCode: currencyCode == freezed - ? _value.currencyCode - : currencyCode // ignore: cast_nullable_to_non_nullable - as String?, applePay: applePay == freezed ? _value.applePay : applePay // ignore: cast_nullable_to_non_nullable - as bool?, + as PaymentSheetApplePay?, style: style == freezed ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -205,7 +178,7 @@ class _$SetupPaymentSheetParametersCopyWithImpl<$Res> googlePay: googlePay == freezed ? _value.googlePay : googlePay // ignore: cast_nullable_to_non_nullable - as bool?, + as PaymentSheetGooglePay?, allowsDelayedPaymentMethods: allowsDelayedPaymentMethods == freezed ? _value.allowsDelayedPaymentMethods : allowsDelayedPaymentMethods // ignore: cast_nullable_to_non_nullable @@ -214,10 +187,6 @@ class _$SetupPaymentSheetParametersCopyWithImpl<$Res> ? _value.appearance : appearance // ignore: cast_nullable_to_non_nullable as PaymentSheetAppearance?, - testEnv: testEnv == freezed - ? _value.testEnv - : testEnv // ignore: cast_nullable_to_non_nullable - as bool, billingDetails: billingDetails == freezed ? _value.billingDetails : billingDetails // ignore: cast_nullable_to_non_nullable @@ -229,6 +198,28 @@ class _$SetupPaymentSheetParametersCopyWithImpl<$Res> )); } + @override + $PaymentSheetApplePayCopyWith<$Res>? get applePay { + if (_value.applePay == null) { + return null; + } + + return $PaymentSheetApplePayCopyWith<$Res>(_value.applePay!, (value) { + return _then(_value.copyWith(applePay: value)); + }); + } + + @override + $PaymentSheetGooglePayCopyWith<$Res>? get googlePay { + if (_value.googlePay == null) { + return null; + } + + return $PaymentSheetGooglePayCopyWith<$Res>(_value.googlePay!, (value) { + return _then(_value.copyWith(googlePay: value)); + }); + } + @override $PaymentSheetAppearanceCopyWith<$Res>? get appearance { if (_value.appearance == null) { @@ -266,17 +257,18 @@ abstract class _$$_SetupParametersCopyWith<$Res> String? paymentIntentClientSecret, String? setupIntentClientSecret, String? merchantDisplayName, - String? merchantCountryCode, - String? currencyCode, - bool? applePay, + PaymentSheetApplePay? applePay, @JsonKey(toJson: UserInterfaceStyleKey.toJson) ThemeMode? style, - bool? googlePay, + PaymentSheetGooglePay? googlePay, bool allowsDelayedPaymentMethods, PaymentSheetAppearance? appearance, - bool testEnv, @JsonKey(name: 'defaultBillingDetails') BillingDetails? billingDetails, String? returnURL}); + @override + $PaymentSheetApplePayCopyWith<$Res>? get applePay; + @override + $PaymentSheetGooglePayCopyWith<$Res>? get googlePay; @override $PaymentSheetAppearanceCopyWith<$Res>? get appearance; @override @@ -302,14 +294,11 @@ class __$$_SetupParametersCopyWithImpl<$Res> Object? paymentIntentClientSecret = freezed, Object? setupIntentClientSecret = freezed, Object? merchantDisplayName = freezed, - Object? merchantCountryCode = freezed, - Object? currencyCode = freezed, Object? applePay = freezed, Object? style = freezed, Object? googlePay = freezed, Object? allowsDelayedPaymentMethods = freezed, Object? appearance = freezed, - Object? testEnv = freezed, Object? billingDetails = freezed, Object? returnURL = freezed, }) { @@ -338,18 +327,10 @@ class __$$_SetupParametersCopyWithImpl<$Res> ? _value.merchantDisplayName : merchantDisplayName // ignore: cast_nullable_to_non_nullable as String?, - merchantCountryCode: merchantCountryCode == freezed - ? _value.merchantCountryCode - : merchantCountryCode // ignore: cast_nullable_to_non_nullable - as String?, - currencyCode: currencyCode == freezed - ? _value.currencyCode - : currencyCode // ignore: cast_nullable_to_non_nullable - as String?, applePay: applePay == freezed ? _value.applePay : applePay // ignore: cast_nullable_to_non_nullable - as bool?, + as PaymentSheetApplePay?, style: style == freezed ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -357,7 +338,7 @@ class __$$_SetupParametersCopyWithImpl<$Res> googlePay: googlePay == freezed ? _value.googlePay : googlePay // ignore: cast_nullable_to_non_nullable - as bool?, + as PaymentSheetGooglePay?, allowsDelayedPaymentMethods: allowsDelayedPaymentMethods == freezed ? _value.allowsDelayedPaymentMethods : allowsDelayedPaymentMethods // ignore: cast_nullable_to_non_nullable @@ -366,10 +347,6 @@ class __$$_SetupParametersCopyWithImpl<$Res> ? _value.appearance : appearance // ignore: cast_nullable_to_non_nullable as PaymentSheetAppearance?, - testEnv: testEnv == freezed - ? _value.testEnv - : testEnv // ignore: cast_nullable_to_non_nullable - as bool, billingDetails: billingDetails == freezed ? _value.billingDetails : billingDetails // ignore: cast_nullable_to_non_nullable @@ -393,14 +370,11 @@ class _$_SetupParameters implements _SetupParameters { this.paymentIntentClientSecret, this.setupIntentClientSecret, this.merchantDisplayName, - this.merchantCountryCode, - this.currencyCode, this.applePay, @JsonKey(toJson: UserInterfaceStyleKey.toJson) this.style, this.googlePay, this.allowsDelayedPaymentMethods = false, this.appearance, - this.testEnv = false, @JsonKey(name: 'defaultBillingDetails') this.billingDetails, this.returnURL}); @@ -441,23 +415,10 @@ class _$_SetupParameters implements _SetupParameters { @override final String? merchantDisplayName; - /// ISO country code of the country where the merchant is located - @override - final String? merchantCountryCode; - - /// Three letter ISO currency code - /// - /// Must be a supported currency code. See https://stripe.com/docs/currencies for supported currencies. - /// - /// When [setupIntentClientSecret] is not empty it is required to provide a currencyCode. - @override - final String? currencyCode; - /// Configuration related to Apple Pay /// If set, PaymentSheet displays Apple Pay as a payment option - /// A merchantCountryCode would then be required @override - final bool? applePay; + final PaymentSheetApplePay? applePay; /// Style options for colors in PaymentSheet /// @@ -468,9 +429,8 @@ class _$_SetupParameters implements _SetupParameters { /// Configuration related to Google Pay /// If set, PaymentSheet displays Google Pay as a payment option - /// A merchantCountryCode would then be required @override - final bool? googlePay; + final PaymentSheetGooglePay? googlePay; /// Flag that allows payment methods that do not move money at the send of the checkout. /// @@ -485,11 +445,6 @@ class _$_SetupParameters implements _SetupParameters { @override final PaymentSheetAppearance? appearance; - /// Flag for using the test environment - @override - @JsonKey() - final bool testEnv; - /// Default billing information of the customer. /// /// Use this field to already prefill the customers billingDetails in the payment sheet. @@ -506,7 +461,7 @@ class _$_SetupParameters implements _SetupParameters { @override String toString() { - return 'SetupPaymentSheetParameters(customFlow: $customFlow, customerId: $customerId, customerEphemeralKeySecret: $customerEphemeralKeySecret, paymentIntentClientSecret: $paymentIntentClientSecret, setupIntentClientSecret: $setupIntentClientSecret, merchantDisplayName: $merchantDisplayName, merchantCountryCode: $merchantCountryCode, currencyCode: $currencyCode, applePay: $applePay, style: $style, googlePay: $googlePay, allowsDelayedPaymentMethods: $allowsDelayedPaymentMethods, appearance: $appearance, testEnv: $testEnv, billingDetails: $billingDetails, returnURL: $returnURL)'; + return 'SetupPaymentSheetParameters(customFlow: $customFlow, customerId: $customerId, customerEphemeralKeySecret: $customerEphemeralKeySecret, paymentIntentClientSecret: $paymentIntentClientSecret, setupIntentClientSecret: $setupIntentClientSecret, merchantDisplayName: $merchantDisplayName, applePay: $applePay, style: $style, googlePay: $googlePay, allowsDelayedPaymentMethods: $allowsDelayedPaymentMethods, appearance: $appearance, billingDetails: $billingDetails, returnURL: $returnURL)'; } @override @@ -526,10 +481,6 @@ class _$_SetupParameters implements _SetupParameters { other.setupIntentClientSecret, setupIntentClientSecret) && const DeepCollectionEquality() .equals(other.merchantDisplayName, merchantDisplayName) && - const DeepCollectionEquality() - .equals(other.merchantCountryCode, merchantCountryCode) && - const DeepCollectionEquality() - .equals(other.currencyCode, currencyCode) && const DeepCollectionEquality().equals(other.applePay, applePay) && const DeepCollectionEquality().equals(other.style, style) && const DeepCollectionEquality().equals(other.googlePay, googlePay) && @@ -538,7 +489,6 @@ class _$_SetupParameters implements _SetupParameters { allowsDelayedPaymentMethods) && const DeepCollectionEquality() .equals(other.appearance, appearance) && - const DeepCollectionEquality().equals(other.testEnv, testEnv) && const DeepCollectionEquality() .equals(other.billingDetails, billingDetails) && const DeepCollectionEquality().equals(other.returnURL, returnURL)); @@ -554,14 +504,11 @@ class _$_SetupParameters implements _SetupParameters { const DeepCollectionEquality().hash(paymentIntentClientSecret), const DeepCollectionEquality().hash(setupIntentClientSecret), const DeepCollectionEquality().hash(merchantDisplayName), - const DeepCollectionEquality().hash(merchantCountryCode), - const DeepCollectionEquality().hash(currencyCode), const DeepCollectionEquality().hash(applePay), const DeepCollectionEquality().hash(style), const DeepCollectionEquality().hash(googlePay), const DeepCollectionEquality().hash(allowsDelayedPaymentMethods), const DeepCollectionEquality().hash(appearance), - const DeepCollectionEquality().hash(testEnv), const DeepCollectionEquality().hash(billingDetails), const DeepCollectionEquality().hash(returnURL)); @@ -584,15 +531,12 @@ abstract class _SetupParameters implements SetupPaymentSheetParameters { final String? paymentIntentClientSecret, final String? setupIntentClientSecret, final String? merchantDisplayName, - final String? merchantCountryCode, - final String? currencyCode, - final bool? applePay, + final PaymentSheetApplePay? applePay, @JsonKey(toJson: UserInterfaceStyleKey.toJson) final ThemeMode? style, - final bool? googlePay, + final PaymentSheetGooglePay? googlePay, final bool allowsDelayedPaymentMethods, final PaymentSheetAppearance? appearance, - final bool testEnv, @JsonKey(name: 'defaultBillingDetails') final BillingDetails? billingDetails, final String? returnURL}) = _$_SetupParameters; @@ -635,22 +579,9 @@ abstract class _SetupParameters implements SetupPaymentSheetParameters { String? get merchantDisplayName => throw _privateConstructorUsedError; @override - /// ISO country code of the country where the merchant is located - String? get merchantCountryCode => throw _privateConstructorUsedError; - @override - - /// Three letter ISO currency code - /// - /// Must be a supported currency code. See https://stripe.com/docs/currencies for supported currencies. - /// - /// When [setupIntentClientSecret] is not empty it is required to provide a currencyCode. - String? get currencyCode => throw _privateConstructorUsedError; - @override - /// Configuration related to Apple Pay /// If set, PaymentSheet displays Apple Pay as a payment option - /// A merchantCountryCode would then be required - bool? get applePay => throw _privateConstructorUsedError; + PaymentSheetApplePay? get applePay => throw _privateConstructorUsedError; @override /// Style options for colors in PaymentSheet @@ -662,8 +593,7 @@ abstract class _SetupParameters implements SetupPaymentSheetParameters { /// Configuration related to Google Pay /// If set, PaymentSheet displays Google Pay as a payment option - /// A merchantCountryCode would then be required - bool? get googlePay => throw _privateConstructorUsedError; + PaymentSheetGooglePay? get googlePay => throw _privateConstructorUsedError; @override /// Flag that allows payment methods that do not move money at the send of the checkout. @@ -678,10 +608,6 @@ abstract class _SetupParameters implements SetupPaymentSheetParameters { PaymentSheetAppearance? get appearance => throw _privateConstructorUsedError; @override - /// Flag for using the test environment - bool get testEnv => throw _privateConstructorUsedError; - @override - /// Default billing information of the customer. /// /// Use this field to already prefill the customers billingDetails in the payment sheet. @@ -700,6 +626,390 @@ abstract class _SetupParameters implements SetupPaymentSheetParameters { throw _privateConstructorUsedError; } +PaymentSheetApplePay _$PaymentSheetApplePayFromJson(Map json) { + return _PaymentSheetApplePay.fromJson(json); +} + +/// @nodoc +mixin _$PaymentSheetApplePay { + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + String get merchantCountryCode => throw _privateConstructorUsedError; + + ///An array of CartSummaryItem item objects that summarize the amount of the payment. If you're using a SetupIntent + /// for a recurring payment, you should set this to display the amount you intend to charge. + List? get paymentSummaryItems => + throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $PaymentSheetApplePayCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $PaymentSheetApplePayCopyWith<$Res> { + factory $PaymentSheetApplePayCopyWith(PaymentSheetApplePay value, + $Res Function(PaymentSheetApplePay) then) = + _$PaymentSheetApplePayCopyWithImpl<$Res>; + $Res call( + {String merchantCountryCode, + List? paymentSummaryItems}); +} + +/// @nodoc +class _$PaymentSheetApplePayCopyWithImpl<$Res> + implements $PaymentSheetApplePayCopyWith<$Res> { + _$PaymentSheetApplePayCopyWithImpl(this._value, this._then); + + final PaymentSheetApplePay _value; + // ignore: unused_field + final $Res Function(PaymentSheetApplePay) _then; + + @override + $Res call({ + Object? merchantCountryCode = freezed, + Object? paymentSummaryItems = freezed, + }) { + return _then(_value.copyWith( + merchantCountryCode: merchantCountryCode == freezed + ? _value.merchantCountryCode + : merchantCountryCode // ignore: cast_nullable_to_non_nullable + as String, + paymentSummaryItems: paymentSummaryItems == freezed + ? _value.paymentSummaryItems + : paymentSummaryItems // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +abstract class _$$_PaymentSheetApplePayCopyWith<$Res> + implements $PaymentSheetApplePayCopyWith<$Res> { + factory _$$_PaymentSheetApplePayCopyWith(_$_PaymentSheetApplePay value, + $Res Function(_$_PaymentSheetApplePay) then) = + __$$_PaymentSheetApplePayCopyWithImpl<$Res>; + @override + $Res call( + {String merchantCountryCode, + List? paymentSummaryItems}); +} + +/// @nodoc +class __$$_PaymentSheetApplePayCopyWithImpl<$Res> + extends _$PaymentSheetApplePayCopyWithImpl<$Res> + implements _$$_PaymentSheetApplePayCopyWith<$Res> { + __$$_PaymentSheetApplePayCopyWithImpl(_$_PaymentSheetApplePay _value, + $Res Function(_$_PaymentSheetApplePay) _then) + : super(_value, (v) => _then(v as _$_PaymentSheetApplePay)); + + @override + _$_PaymentSheetApplePay get _value => super._value as _$_PaymentSheetApplePay; + + @override + $Res call({ + Object? merchantCountryCode = freezed, + Object? paymentSummaryItems = freezed, + }) { + return _then(_$_PaymentSheetApplePay( + merchantCountryCode: merchantCountryCode == freezed + ? _value.merchantCountryCode + : merchantCountryCode // ignore: cast_nullable_to_non_nullable + as String, + paymentSummaryItems: paymentSummaryItems == freezed + ? _value._paymentSummaryItems + : paymentSummaryItems // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _$_PaymentSheetApplePay implements _PaymentSheetApplePay { + const _$_PaymentSheetApplePay( + {required this.merchantCountryCode, + final List? paymentSummaryItems}) + : _paymentSummaryItems = paymentSummaryItems; + + factory _$_PaymentSheetApplePay.fromJson(Map json) => + _$$_PaymentSheetApplePayFromJson(json); + + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + @override + final String merchantCountryCode; + + ///An array of CartSummaryItem item objects that summarize the amount of the payment. If you're using a SetupIntent + /// for a recurring payment, you should set this to display the amount you intend to charge. + final List? _paymentSummaryItems; + + ///An array of CartSummaryItem item objects that summarize the amount of the payment. If you're using a SetupIntent + /// for a recurring payment, you should set this to display the amount you intend to charge. + @override + List? get paymentSummaryItems { + final value = _paymentSummaryItems; + if (value == null) return null; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'PaymentSheetApplePay(merchantCountryCode: $merchantCountryCode, paymentSummaryItems: $paymentSummaryItems)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_PaymentSheetApplePay && + const DeepCollectionEquality() + .equals(other.merchantCountryCode, merchantCountryCode) && + const DeepCollectionEquality() + .equals(other._paymentSummaryItems, _paymentSummaryItems)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(merchantCountryCode), + const DeepCollectionEquality().hash(_paymentSummaryItems)); + + @JsonKey(ignore: true) + @override + _$$_PaymentSheetApplePayCopyWith<_$_PaymentSheetApplePay> get copyWith => + __$$_PaymentSheetApplePayCopyWithImpl<_$_PaymentSheetApplePay>( + this, _$identity); + + @override + Map toJson() { + return _$$_PaymentSheetApplePayToJson(this); + } +} + +abstract class _PaymentSheetApplePay implements PaymentSheetApplePay { + const factory _PaymentSheetApplePay( + {required final String merchantCountryCode, + final List? paymentSummaryItems}) = + _$_PaymentSheetApplePay; + + factory _PaymentSheetApplePay.fromJson(Map json) = + _$_PaymentSheetApplePay.fromJson; + + @override + + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + String get merchantCountryCode => throw _privateConstructorUsedError; + @override + + ///An array of CartSummaryItem item objects that summarize the amount of the payment. If you're using a SetupIntent + /// for a recurring payment, you should set this to display the amount you intend to charge. + List? get paymentSummaryItems => + throw _privateConstructorUsedError; + @override + @JsonKey(ignore: true) + _$$_PaymentSheetApplePayCopyWith<_$_PaymentSheetApplePay> get copyWith => + throw _privateConstructorUsedError; +} + +PaymentSheetGooglePay _$PaymentSheetGooglePayFromJson( + Map json) { + return _PaymentSheetGooglePay.fromJson(json); +} + +/// @nodoc +mixin _$PaymentSheetGooglePay { + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + String get merchantCountryCode => throw _privateConstructorUsedError; + + /// The three-letter ISO 4217 alphabetic currency code, e.g. "USD" or "EUR". Required in order to support Google Pay when processing a Setup Intent. + String? get currencyCode => throw _privateConstructorUsedError; + + /// Whether or not to use the google pay test environment. Set to `true` until you have applied for and been granted access to the Production environment. + bool get testEnv => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $PaymentSheetGooglePayCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $PaymentSheetGooglePayCopyWith<$Res> { + factory $PaymentSheetGooglePayCopyWith(PaymentSheetGooglePay value, + $Res Function(PaymentSheetGooglePay) then) = + _$PaymentSheetGooglePayCopyWithImpl<$Res>; + $Res call({String merchantCountryCode, String? currencyCode, bool testEnv}); +} + +/// @nodoc +class _$PaymentSheetGooglePayCopyWithImpl<$Res> + implements $PaymentSheetGooglePayCopyWith<$Res> { + _$PaymentSheetGooglePayCopyWithImpl(this._value, this._then); + + final PaymentSheetGooglePay _value; + // ignore: unused_field + final $Res Function(PaymentSheetGooglePay) _then; + + @override + $Res call({ + Object? merchantCountryCode = freezed, + Object? currencyCode = freezed, + Object? testEnv = freezed, + }) { + return _then(_value.copyWith( + merchantCountryCode: merchantCountryCode == freezed + ? _value.merchantCountryCode + : merchantCountryCode // ignore: cast_nullable_to_non_nullable + as String, + currencyCode: currencyCode == freezed + ? _value.currencyCode + : currencyCode // ignore: cast_nullable_to_non_nullable + as String?, + testEnv: testEnv == freezed + ? _value.testEnv + : testEnv // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc +abstract class _$$_PaymentSheetGooglePayCopyWith<$Res> + implements $PaymentSheetGooglePayCopyWith<$Res> { + factory _$$_PaymentSheetGooglePayCopyWith(_$_PaymentSheetGooglePay value, + $Res Function(_$_PaymentSheetGooglePay) then) = + __$$_PaymentSheetGooglePayCopyWithImpl<$Res>; + @override + $Res call({String merchantCountryCode, String? currencyCode, bool testEnv}); +} + +/// @nodoc +class __$$_PaymentSheetGooglePayCopyWithImpl<$Res> + extends _$PaymentSheetGooglePayCopyWithImpl<$Res> + implements _$$_PaymentSheetGooglePayCopyWith<$Res> { + __$$_PaymentSheetGooglePayCopyWithImpl(_$_PaymentSheetGooglePay _value, + $Res Function(_$_PaymentSheetGooglePay) _then) + : super(_value, (v) => _then(v as _$_PaymentSheetGooglePay)); + + @override + _$_PaymentSheetGooglePay get _value => + super._value as _$_PaymentSheetGooglePay; + + @override + $Res call({ + Object? merchantCountryCode = freezed, + Object? currencyCode = freezed, + Object? testEnv = freezed, + }) { + return _then(_$_PaymentSheetGooglePay( + merchantCountryCode: merchantCountryCode == freezed + ? _value.merchantCountryCode + : merchantCountryCode // ignore: cast_nullable_to_non_nullable + as String, + currencyCode: currencyCode == freezed + ? _value.currencyCode + : currencyCode // ignore: cast_nullable_to_non_nullable + as String?, + testEnv: testEnv == freezed + ? _value.testEnv + : testEnv // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _$_PaymentSheetGooglePay implements _PaymentSheetGooglePay { + const _$_PaymentSheetGooglePay( + {required this.merchantCountryCode, + this.currencyCode, + this.testEnv = false}); + + factory _$_PaymentSheetGooglePay.fromJson(Map json) => + _$$_PaymentSheetGooglePayFromJson(json); + + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + @override + final String merchantCountryCode; + + /// The three-letter ISO 4217 alphabetic currency code, e.g. "USD" or "EUR". Required in order to support Google Pay when processing a Setup Intent. + @override + final String? currencyCode; + + /// Whether or not to use the google pay test environment. Set to `true` until you have applied for and been granted access to the Production environment. + @override + @JsonKey() + final bool testEnv; + + @override + String toString() { + return 'PaymentSheetGooglePay(merchantCountryCode: $merchantCountryCode, currencyCode: $currencyCode, testEnv: $testEnv)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_PaymentSheetGooglePay && + const DeepCollectionEquality() + .equals(other.merchantCountryCode, merchantCountryCode) && + const DeepCollectionEquality() + .equals(other.currencyCode, currencyCode) && + const DeepCollectionEquality().equals(other.testEnv, testEnv)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(merchantCountryCode), + const DeepCollectionEquality().hash(currencyCode), + const DeepCollectionEquality().hash(testEnv)); + + @JsonKey(ignore: true) + @override + _$$_PaymentSheetGooglePayCopyWith<_$_PaymentSheetGooglePay> get copyWith => + __$$_PaymentSheetGooglePayCopyWithImpl<_$_PaymentSheetGooglePay>( + this, _$identity); + + @override + Map toJson() { + return _$$_PaymentSheetGooglePayToJson(this); + } +} + +abstract class _PaymentSheetGooglePay implements PaymentSheetGooglePay { + const factory _PaymentSheetGooglePay( + {required final String merchantCountryCode, + final String? currencyCode, + final bool testEnv}) = _$_PaymentSheetGooglePay; + + factory _PaymentSheetGooglePay.fromJson(Map json) = + _$_PaymentSheetGooglePay.fromJson; + + @override + + ///The two-letter ISO 3166 code of the country of your business, e.g. "US" + String get merchantCountryCode => throw _privateConstructorUsedError; + @override + + /// The three-letter ISO 4217 alphabetic currency code, e.g. "USD" or "EUR". Required in order to support Google Pay when processing a Setup Intent. + String? get currencyCode => throw _privateConstructorUsedError; + @override + + /// Whether or not to use the google pay test environment. Set to `true` until you have applied for and been granted access to the Production environment. + bool get testEnv => throw _privateConstructorUsedError; + @override + @JsonKey(ignore: true) + _$$_PaymentSheetGooglePayCopyWith<_$_PaymentSheetGooglePay> get copyWith => + throw _privateConstructorUsedError; +} + PaymentSheetAppearance _$PaymentSheetAppearanceFromJson( Map json) { return _PaymentSheetAppearance.fromJson(json); diff --git a/packages/stripe_platform_interface/lib/src/models/payment_sheet.g.dart b/packages/stripe_platform_interface/lib/src/models/payment_sheet.g.dart index b0ff97e18..48826d971 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_sheet.g.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_sheet.g.dart @@ -14,18 +14,21 @@ _$_SetupParameters _$$_SetupParametersFromJson(Map json) => paymentIntentClientSecret: json['paymentIntentClientSecret'] as String?, setupIntentClientSecret: json['setupIntentClientSecret'] as String?, merchantDisplayName: json['merchantDisplayName'] as String?, - merchantCountryCode: json['merchantCountryCode'] as String?, - currencyCode: json['currencyCode'] as String?, - applePay: json['applePay'] as bool?, + applePay: json['applePay'] == null + ? null + : PaymentSheetApplePay.fromJson( + json['applePay'] as Map), style: $enumDecodeNullable(_$ThemeModeEnumMap, json['style']), - googlePay: json['googlePay'] as bool?, + googlePay: json['googlePay'] == null + ? null + : PaymentSheetGooglePay.fromJson( + json['googlePay'] as Map), allowsDelayedPaymentMethods: json['allowsDelayedPaymentMethods'] as bool? ?? false, appearance: json['appearance'] == null ? null : PaymentSheetAppearance.fromJson( json['appearance'] as Map), - testEnv: json['testEnv'] as bool? ?? false, billingDetails: json['defaultBillingDetails'] == null ? null : BillingDetails.fromJson( @@ -41,14 +44,11 @@ Map _$$_SetupParametersToJson(_$_SetupParameters instance) => 'paymentIntentClientSecret': instance.paymentIntentClientSecret, 'setupIntentClientSecret': instance.setupIntentClientSecret, 'merchantDisplayName': instance.merchantDisplayName, - 'merchantCountryCode': instance.merchantCountryCode, - 'currencyCode': instance.currencyCode, - 'applePay': instance.applePay, + 'applePay': instance.applePay?.toJson(), 'style': UserInterfaceStyleKey.toJson(instance.style), - 'googlePay': instance.googlePay, + 'googlePay': instance.googlePay?.toJson(), 'allowsDelayedPaymentMethods': instance.allowsDelayedPaymentMethods, 'appearance': instance.appearance?.toJson(), - 'testEnv': instance.testEnv, 'defaultBillingDetails': instance.billingDetails?.toJson(), 'returnURL': instance.returnURL, }; @@ -59,6 +59,40 @@ const _$ThemeModeEnumMap = { ThemeMode.dark: 'dark', }; +_$_PaymentSheetApplePay _$$_PaymentSheetApplePayFromJson( + Map json) => + _$_PaymentSheetApplePay( + merchantCountryCode: json['merchantCountryCode'] as String, + paymentSummaryItems: (json['paymentSummaryItems'] as List?) + ?.map((e) => + ApplePayCartSummaryItem.fromJson(e as Map)) + .toList(), + ); + +Map _$$_PaymentSheetApplePayToJson( + _$_PaymentSheetApplePay instance) => + { + 'merchantCountryCode': instance.merchantCountryCode, + 'paymentSummaryItems': + instance.paymentSummaryItems?.map((e) => e.toJson()).toList(), + }; + +_$_PaymentSheetGooglePay _$$_PaymentSheetGooglePayFromJson( + Map json) => + _$_PaymentSheetGooglePay( + merchantCountryCode: json['merchantCountryCode'] as String, + currencyCode: json['currencyCode'] as String?, + testEnv: json['testEnv'] as bool? ?? false, + ); + +Map _$$_PaymentSheetGooglePayToJson( + _$_PaymentSheetGooglePay instance) => + { + 'merchantCountryCode': instance.merchantCountryCode, + 'currencyCode': instance.currencyCode, + 'testEnv': instance.testEnv, + }; + _$_PaymentSheetAppearance _$$_PaymentSheetAppearanceFromJson( Map json) => _$_PaymentSheetAppearance( diff --git a/packages/stripe_platform_interface/pubspec.yaml b/packages/stripe_platform_interface/pubspec.yaml index 94ac7342c..5259bfece 100644 --- a/packages/stripe_platform_interface/pubspec.yaml +++ b/packages/stripe_platform_interface/pubspec.yaml @@ -1,6 +1,6 @@ name: stripe_platform_interface description: Platform interface for stripe sdk -version: 3.3.0 +version: 4.0.0 repository: https://github.com/flutter-stripe/flutter_stripe homepage: https://pub.dev/packages/flutter_stripe diff --git a/packages/stripe_platform_interface/test/method_channel_stripe_test.dart b/packages/stripe_platform_interface/test/method_channel_stripe_test.dart index 564ecc70d..3710f0660 100644 --- a/packages/stripe_platform_interface/test/method_channel_stripe_test.dart +++ b/packages/stripe_platform_interface/test/method_channel_stripe_test.dart @@ -324,7 +324,7 @@ void main() { ).methodChannel, ); await sut.updateApplePaySummaryItems(summaryItems: const [ - ApplePayCartSummaryItem(label: '1', amount: '100'), + ApplePayCartSummaryItem.immediate(label: '1', amount: '100'), ], errorAddressFields: const [ ApplePayErrorAddressField( field: ApplePayContactFieldsType.name, @@ -354,7 +354,11 @@ void main() { test('It completes operation', () { expect( () => sut.updateApplePaySummaryItems(summaryItems: const [ - ApplePayCartSummaryItem(label: '1', amount: '100'), + ApplePayCartSummaryItem.deferred( + label: '1', + amount: '100', + deferredDate: 1234, + ), ], errorAddressFields: const [ ApplePayErrorAddressField( field: ApplePayContactFieldsType.name, diff --git a/packages/stripe_web/CHANGELOG.md b/packages/stripe_web/CHANGELOG.md index aac97d443..4b046cf37 100644 --- a/packages/stripe_web/CHANGELOG.md +++ b/packages/stripe_web/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.2.0 +- Several fixes by the Stripe sdk [v.0.15.0](https://github.com/stripe/stripe-react-native/releases/tag/v0.15.0). + ## 1.1.1 - Sdk updates diff --git a/packages/stripe_web/pubspec.yaml b/packages/stripe_web/pubspec.yaml index f64dadf3c..e44841bff 100644 --- a/packages/stripe_web/pubspec.yaml +++ b/packages/stripe_web/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_stripe_web description: Stripe sdk for Flutter web platform. -version: 1.1.1 +version: 1.2.0 homepage: https://github.com/flutter-stripe/flutter_stripe environment: @@ -14,7 +14,7 @@ dependencies: flutter_web_plugins: sdk: flutter freezed_annotation: ^2.0.3 - stripe_platform_interface: ^3.2.0 + stripe_platform_interface: ^4.0.0 js: ^0.6.3