diff --git a/.eslintignore b/.eslintignore index b2a0a21f..9d4401a8 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,6 +6,6 @@ build .vscode coverage patches -test babel.config.js -jest.config.js \ No newline at end of file +jest.config.js +report diff --git a/.eslintrc.json b/.eslintrc.json index 30244e89..d8e9b1a2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,4 +1,35 @@ { + "env": { + "es6": true, + "node": true, + "es2021": true, + // "react-native/react-native": true, + "jest/globals": true + }, + "settings": { + "react": { + "pragma": "React", + "version": "detect" + }, + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + } /* , + "import/resolver": { + /* "typescript": { + "paths": "./tsconfig.json", + "alwaysTryTypes": true + }, + // "typescript": {}, // this loads /tsconfig.json to ESLint + "node": { + "extensions": [ + ".js", + ".jsx", + ".ts", + ".tsx" + ] + } + } */ + }, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", @@ -7,16 +38,29 @@ "plugin:promise/recommended", "plugin:json/recommended", // "plugin:import/recommended", - "plugin:import/typescript" + "plugin:import/typescript", + "plugin:jest/recommended", + // "eslint:recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "plugin:react/jsx-runtime" + // "plugin:import/errors", + // "plugin:import/warnings" + ], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.d.ts"] + } ], "globals": { + "__dirname": true, "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", - "sourceType": "module", + // "sourceType": "module", "ecmaFeatures": { "jsx": true, "globalReturn": true, @@ -25,6 +69,9 @@ "project": "tsconfig.json" }, "plugins": [ + "react", + "react-hooks", + "jest", "es5", "html", "@typescript-eslint", @@ -41,6 +88,8 @@ "jsdoc" ], "rules": { + "react/no-unescaped-entities": "warn", + "no-dupe-class-members": 0, "simple-import-sort/imports": "warn", "simple-import-sort/exports": "warn", "import/first": "warn", @@ -49,25 +98,16 @@ "promise/always-return": ["warn", { "ignoreLastCallback": true }], // to enforce using type for object type definitions, can be type or interface "@typescript-eslint/consistent-type-definitions": ["warn", "interface"], - "@typescript-eslint/array-type": [ - "warn", - { - "default": "array" - } - ], + "@typescript-eslint/array-type": ["warn", { "default": "array" }], "@typescript-eslint/require-await": "warn", "@typescript-eslint/await-thenable": "warn", "@typescript-eslint/consistent-type-exports": "warn", "@typescript-eslint/restrict-template-expressions": [ "warn", - { - "allowNumber": true, - "allowBoolean": true, - "allowNullish": true - } + { "allowNumber": true, "allowBoolean": true, "allowNullish": true } ], "@typescript-eslint/no-explicit-any": 0, - "@typescript-eslint/explicit-module-boundary-types": 0, + // "@typescript-eslint/explicit-module-boundary-types": 0, /* "@typescript-eslint/naming-convention": [ "warn", { @@ -156,7 +196,7 @@ "@getify/proper-arrows/return": ["warn", { "object": true }] */ - "@getify/proper-arrows/where": 0, + // "@getify/proper-arrows/where": 0, "@typescript-eslint/no-unused-vars": [ "warn", { @@ -185,21 +225,7 @@ "no-else-return": "warn", "prefer-const": "warn", "no-console": 1, - "no-unused-vars": [ - "warn", - { - // "varsIgnorePattern": "^_", - // "caughtErrorsIgnorePattern": "^ignore" - "argsIgnorePattern": "^_" - } - ], - "indent": [ - "warn", - "tab", - { - "SwitchCase": 1 - } - ], + "indent": ["warn", "tab", { "SwitchCase": 1 }], "linebreak-style": ["warn", "windows"], "quotes": ["warn", "single"], "semi": ["warn", "never"] diff --git a/.example.env.dev b/.example.env.dev new file mode 100644 index 00000000..c634ce34 --- /dev/null +++ b/.example.env.dev @@ -0,0 +1,7 @@ +BUGSNAG_APIKEY= +BUGSNAG_API_KEY= + +NODE_ENV=development +NODE_ENV_SHORT=dev +APP_VARIANT=dev +DEBUG=dev \ No newline at end of file diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..51178c40 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,21 @@ +changelog: + exclude: + labels: + - ignore-for-release + - bot + categories: + - title: Pull requests + labels: + - release + - title: Breaking Changes 🛠 + labels: + - breaking-change + - title: New Features 🎉 + labels: + - enhancement + - title: Tests + labels: + - "test" + - title: Documentation + labels: + - "documentation" \ No newline at end of file diff --git a/.github/workflows/eas.yml b/.github/workflows/eas.yml index 8b662d33..b7774186 100644 --- a/.github/workflows/eas.yml +++ b/.github/workflows/eas.yml @@ -6,6 +6,8 @@ on: jobs: build: + env: + BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }} runs-on: ubuntu-latest steps: - name: 🏗 Setup repo diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 68a001cf..a2430937 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -7,7 +7,8 @@ on: push: branches: [main, dev] pull_request: - types: [opened, reopened] + # types: [opened, reopened] + # types: [opened, synchronize, edited, ready_for_review] jobs: build: @@ -29,6 +30,7 @@ jobs: - run: npm run lint - run: npm run build --if-present - run: npm run test:coverage + # - run: npm run testtsx:coverage - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 with: diff --git a/.gitignore b/.gitignore index 71d9f76e..3a09a668 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,6 @@ web-build/ # Temporary files created by Metro to check the health of the file watcher .metro-health-check* +.env* +.env +report/ diff --git a/app.config.js b/app.config.js index 14cb548e..496a2c7f 100644 --- a/app.config.js +++ b/app.config.js @@ -1,2 +1,6 @@ + +const configPath = `${__dirname}/config/app.config.ts`; + require('ts-node/register'); -module.exports = require('./config/app.config.ts'); + +module.exports = require(configPath); diff --git a/babel.config.js b/babel.config.js index c6c3f696..936b56d0 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,2 +1,7 @@ + +const configPath = `${__dirname}/config/babel.config.ts`; + require('ts-node/register'); -module.exports = require('./config/babel.config.ts'); + +module.exports = require(configPath); + diff --git a/config/app.config.ts b/config/app.config.ts index 224f9bcb..ba49cdd5 100644 --- a/config/app.config.ts +++ b/config/app.config.ts @@ -1,19 +1,55 @@ -/* eslint-disable no-unused-vars */ -/* eslint-disable @typescript-eslint/no-unused-vars */ +import { config as dotenvConfig } from 'dotenv' import { ExpoConfig } from 'expo/config' import { version } from './../package.json' -const IS_DEV = process.env.APP_VARIANT === 'dev' -const IS_PREVIEW = process.env.APP_VARIANT === 'preview' -const IS_PROD = process.env.APP_VARIANT === 'prod' + + +type AppVariant = 'preview' | 'prod' | 'dev' | undefined + +function nodeEnvShort(): 'test' | AppVariant { + if (!process?.env?.NODE_ENV) { + process.env.NODE_ENV = 'development' + return + } + if (process.env.NODE_ENV === 'production') { return 'prod' } + if (process.env.NODE_ENV === 'development') { return 'dev' } + if (process.env.NODE_ENV === 'test') { return 'test' } + if (process.env.NODE_ENV === 'preview') { return 'preview' } +} +function appVariant(): AppVariant { + if (!process?.env?.APP_VARIANT) { + process.env.APP_VARIANT = 'dev' + return + } + if (process.env.APP_VARIANT === 'prod') { return 'prod' } + if (process.env.APP_VARIANT === 'dev') { return 'dev' } + if (process.env.APP_VARIANT === 'preview') { return 'preview' } +} + + +const _appVariant = appVariant() || process.env.APP_VARIANT || 'dev' + +const _nodeEnvShort = nodeEnvShort() + +try { + dotenvConfig({ path: `.env${_nodeEnvShort === 'prod' ? '' : `.${nodeEnvShort()}`}` }) +} catch (e) { console.log('dotenv error:', e) } // eslint-disable-line no-console + + +// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars +const IS_DEV = _appVariant === 'dev' +// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars +const IS_PREVIEW = _appVariant === 'preview' +const IS_PROD = _appVariant === 'prod' const config: ExpoConfig = { - name: `eNuts${!IS_PROD ? ` (${process.env.APP_VARIANT})` : ''}`, + name: `eNuts${!IS_PROD ? ` (${_appVariant})` : ''}`, slug: 'enuts', - version: `${version}${!IS_PROD ? `-${process.env.APP_VARIANT}` : ''}`, + owner: 'enuts_wallet', + version: `${version}${!IS_PROD ? `-${_appVariant}` : ''}`, scheme: 'cashu', orientation: 'portrait', icon: './assets/icon.png', @@ -25,6 +61,8 @@ const config: ExpoConfig = { }, assetBundlePatterns: ['**/*'], plugins: [ + '@bugsnag/plugin-expo-eas-sourcemaps', + 'expo-localization', [ 'expo-barcode-scanner', { @@ -49,18 +87,20 @@ const config: ExpoConfig = { foregroundImage: './assets/adaptive-icon.png', backgroundColor: '#5DB075' }, - package: `com.agron.enuts${!IS_PROD ? `.${process.env.APP_VARIANT}` : ''}` + package: `com.agron.enuts${!IS_PROD ? `.${_appVariant}` : ''}` }, web: { favicon: './assets/favicon.png' }, extra: { - eas: { - projectId: 'edb75ccd-71ac-4934-9147-baf1c7f2b068' - }, DEBUG: process.env.DEBUG, - APP_VARIANT: process.env.APP_VARIANT, - }, - owner: 'enuts_wallet' + eas: { projectId: 'edb75ccd-71ac-4934-9147-baf1c7f2b068' }, + DEBUG: process.env.DEBUG, + APP_VARIANT: _appVariant, + bugsnag: { 'apiKey': process.env.BUGSNAG_API_KEY, }, + NODE_ENV: process.env.NODE_ENV, + NODE_ENV_SHORT: _nodeEnvShort, + } } + export default config diff --git a/config/babel.config.ts b/config/babel.config.ts index 67345e82..e2a980bd 100644 --- a/config/babel.config.ts +++ b/config/babel.config.ts @@ -23,6 +23,7 @@ const fn: ConfigFunction = (api: ConfigAPI): TransformOptions => { '@util': './src/util', '@modal': './src/components/modal', '@store': './src/storage/store', + '@consts': './src/consts', }, 'extensions': [ '.js', diff --git a/config/cpd.config.ts.json b/config/cpd.config.ts.json new file mode 100644 index 00000000..5c079567 --- /dev/null +++ b/config/cpd.config.ts.json @@ -0,0 +1,17 @@ +{ + "output":"./report/ts/", + "pattern": "**/*.ts", + "format": "typescript", + "silent": true, + "ignoreCase": true, + "max-lines": 10000, + "minTokens": 75, + "max-size": "30mb", + "threshold": 10, + "min-lines": 5, + "mode": "weak", + "gitignore": true, + "reporters": ["html", "console"], + "ignore": ["**/__snapshots__/**", "node_modules", "report", ".git"], + "absolute": true +} diff --git a/config/cpd.config.tsx.json b/config/cpd.config.tsx.json new file mode 100644 index 00000000..505b1f7f --- /dev/null +++ b/config/cpd.config.tsx.json @@ -0,0 +1,17 @@ +{ + "output": "./report/tsx/", + "pattern": "**/*.tsx", + "format": "tsx", + "silent":true, + "ignoreCase": true, + "max-lines": 10000, + "minTokens": 75, + "max-size": "30mb", + "threshold": 10, + "min-lines": 5, + "mode": "weak", + "gitignore": true, + "reporters": ["html", "console"], + "ignore": ["**/__snapshots__/**", "node_modules", "report", ".git"], + "absolute": true +} diff --git a/config/jest.config.ts b/config/jest.config.ts index 34ef2e7a..375bc75e 100644 --- a/config/jest.config.ts +++ b/config/jest.config.ts @@ -1,6 +1,6 @@ // import type { Config } from 'jest' // import { defaults } from 'jest-config' -import { JestConfigWithTsJest,pathsToModuleNameMapper } from 'ts-jest' +import { JestConfigWithTsJest, pathsToModuleNameMapper } from 'ts-jest' import { compilerOptions } from '../tsconfig.json' @@ -36,9 +36,11 @@ export default (): JestConfigWithTsJest => ({ }, collectCoverage: false, collectCoverageFrom: [ - '/src/**/*.{js,jsx,ts}', + '**/src/**/*.{ts,tsx}', '!**/coverage/**', + '!**/report/**', '!**/assets/**', + '!**/test/**', '!**/config/**', '!**/coverage/**', '!node_modules/**', @@ -47,13 +49,19 @@ export default (): JestConfigWithTsJest => ({ '!app.config.js', '!metro.config.js', '!react-native.config.js', - '!/src/styles/**', - '!/src/consts/**', - '!/src/components/**', - '!/src/AppEntry.ts', - '!/src/storage/store/AsyncStore.ts', - '!/src/storage/store/SecureStore.ts', + // '!**/src/styles/**', + '!**/src/consts/**', + // '!**/src/components/**', + '!**/src/AppEntry.ts', + '!**/src/shim.ts', + // '!**/src/storage/store/AsyncStore.ts', + '!**/src/storage/store/SecureStore.ts', + '!**/src/logger/reactotron/**', + '!**/src/util/crashReporting.ts', + '!**/src/storage/db/fs.ts', + //'!**/src/logger/*' ], // verbose: true, + // setupFilesAfterEnv: [ '/node_modules/react-native-gesture-handler/jestSetup.js'], + setupFiles: ['/test/setup.ts'], }) - diff --git a/metro.config.js b/metro.config.js index f091b7fe..b8dda086 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,5 +1,10 @@ // Learn more https://docs.expo.io/guides/customizing-metro + +const configPath = `${__dirname}/config/metro.config.ts`; + require('ts-node/register'); -module.exports = require('./config/metro.config.ts'); + +module.exports = require(configPath); + diff --git a/package-lock.json b/package-lock.json index c51d0a93..435cd227 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "enuts", - "version": "0.0.1-alpha", + "version": "0.0.2-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "enuts", - "version": "0.0.1-alpha", - "hasInstallScript": true, + "version": "0.0.2-alpha", "license": "AGPL-3.0-only", "dependencies": { - "@cashu/cashu-ts": "0.8.0-rc.4", + "@bugsnag/expo": "^48.1.0", + "@cashu/cashu-ts": "^0.8.0-rc.4", "@expo/metro-config": "^0.7.1", "@react-native-async-storage/async-storage": "1.17.11", + "@react-native-community/netinfo": "9.3.7", "@react-native-picker/picker": "2.4.8", "@react-navigation/core": "^6.4.8", "@react-navigation/drawer": "^6.6.2", @@ -21,19 +22,22 @@ "@shopify/flash-list": "1.4.0", "axios": "^1.4.0", "expo": "^48.0.19", - "expo-asset": "~8.9.1", - "expo-barcode-scanner": "~12.3.2", - "expo-camera": "~13.2.1", - "expo-clipboard": "~4.1.2", - "expo-constants": "~14.2.1", + "expo-application": "^5.1.1", + "expo-asset": "^8.9.1", + "expo-barcode-scanner": "^12.3.2", + "expo-camera": "^13.2.1", + "expo-clipboard": "^4.1.2", + "expo-constants": "^14.2.1", "expo-crypto": "^12.2.2", - "expo-file-system": "~15.2.2", + "expo-device": "^5.2.1", + "expo-file-system": "^15.2.2", + "expo-localization": "^14.1.1", "expo-secure-store": "^12.1.1", "expo-splash-screen": "^0.18.2", "expo-sqlite": "^11.1.1", "expo-status-bar": "^1.4.4", - "react": "18.2.0", - "react-native": "^0.71.8", + "react": "^18.2.0", + "react-native": "0.71.8", "react-native-gesture-handler": "~2.9.0", "react-native-qrcode-svg": "^6.2.0", "react-native-reanimated": "~2.14.4", @@ -45,14 +49,18 @@ }, "devDependencies": { "@babel/plugin-proposal-private-methods": "^7.18.6", + "@bugsnag/plugin-expo-eas-sourcemaps": "^48.1.0", + "@bugsnag/source-maps": "^2.3.1", "@getify/eslint-plugin-proper-arrows": "^11.0.3", + "@testing-library/react-native": "^12.1.2", "@types/babel__core": "^7.20.1", "@types/jest": "^29.5.2", - "@types/node": "^20.2.5", + "@types/node": "^20.3.0", "@types/react": "~18.0.27", "@types/sqlite3": "^3.1.8", - "@typescript-eslint/eslint-plugin": "^5.59.8", - "@typescript-eslint/parser": "^5.59.8", + "@typescript-eslint/eslint-plugin": "^5.59.9", + "@typescript-eslint/parser": "^5.59.9", + "dotenv": "^16.1.4", "eslint": "^8.42.0", "eslint-plugin-compat": "^4.1.4", "eslint-plugin-deprecate": "^0.7.0", @@ -60,17 +68,20 @@ "eslint-plugin-eslint-plugin": "^5.1.0", "eslint-plugin-html": "^7.1.0", "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jsdoc": "^46.2.3", + "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-jsdoc": "^46.2.6", "eslint-plugin-json": "^3.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-tsdoc": "^0.2.17", "expo-dev-client": "^2.2.1", "jest": "^29.5.0", "jest-expo": "^48.0.2", - "patch-package": "^7.0.0", "prettier": "^2.8.8", + "reactotron-react-native": "^5.0.3", "ts-jest": "^29.1.0", "ts-jest-resolver": "^2.0.1", "ts-node": "^10.9.1", @@ -1868,6 +1879,195 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@bugsnag/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", + "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/cuid": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", + "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" + }, + "node_modules/@bugsnag/expo": { + "version": "48.1.0", + "resolved": "https://registry.npmjs.org/@bugsnag/expo/-/expo-48.1.0.tgz", + "integrity": "sha512-J6kvGzdZjY8tED6EvayiDTlP4LLpDYmfyt3chok3oB+kdalqrUgXAB7bIWLEyRSdPFIJWpwMqfUnVWwlEEJ7qg==", + "dependencies": { + "@bugsnag/core": "^7.16.0", + "@bugsnag/delivery-expo": "^48.0.0", + "@bugsnag/plugin-browser-session": "^7.16.0", + "@bugsnag/plugin-console-breadcrumbs": "^7.16.0", + "@bugsnag/plugin-expo-app": "^48.0.0", + "@bugsnag/plugin-expo-app-state-breadcrumbs": "^48.0.0", + "@bugsnag/plugin-expo-connectivity-breadcrumbs": "^48.0.0", + "@bugsnag/plugin-expo-device": "^48.1.0", + "@bugsnag/plugin-network-breadcrumbs": "^7.16.0", + "@bugsnag/plugin-react": "^7.16.0", + "@bugsnag/plugin-react-native-global-error-handler": "^7.16.0", + "@bugsnag/plugin-react-native-orientation-breadcrumbs": "^7.16.0", + "@bugsnag/plugin-react-native-unhandled-rejection": "^7.16.0", + "@bugsnag/source-maps": "^2.3.0", + "bugsnag-build-reporter": "^1.0.1" + }, + "peerDependencies": { + "expo": "^48.0.0", + "expo-constants": "~14.2.1", + "promise": "^8.3.0", + "react": "*" + } + }, + "node_modules/@bugsnag/expo/node_modules/@bugsnag/delivery-expo": { + "version": "48.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/delivery-expo/-/delivery-expo-48.0.0.tgz", + "integrity": "sha512-om9DsOY6lPJJEfO/2dqxe/x++ukqV6leKmSS128XB/WtXDRA3at2md5VXXUYwm3tHDG89/ktAv/LkBEHlUcaMw==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0", + "@react-native-community/netinfo": "9.3.7", + "expo-crypto": "~12.2.1", + "expo-file-system": "~15.2.2" + } + }, + "node_modules/@bugsnag/expo/node_modules/@bugsnag/plugin-expo-connectivity-breadcrumbs": { + "version": "48.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-expo-connectivity-breadcrumbs/-/plugin-expo-connectivity-breadcrumbs-48.0.0.tgz", + "integrity": "sha512-TO71fw50gGYIs+564NQUOJKy9dmgik9g/K9TZU9mfh1F2FV98oVt+ERc+TllqvOFr4/zhNgNz3JR3GCzXET3vw==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0", + "@react-native-community/netinfo": "9.3.7" + } + }, + "node_modules/@bugsnag/plugin-browser-session": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-browser-session/-/plugin-browser-session-7.19.0.tgz", + "integrity": "sha512-AdgKF9lnavWFSOVbldrTfE59vorcfUlxECorHucjZ5/Az9ctJxDWC1HceAT+diEMcdFgVmivKiiqegEcyCsDdw==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-console-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-console-breadcrumbs/-/plugin-console-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-ZHqPAK0WpbvWjj2wwSV8+C8+K9TOyQsfZnRJ7lIadbeUUJORmFRnG0vUHKBvwxMP7bqCj8fOe/S0kKF3dfMMKA==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-expo-app": { + "version": "48.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-expo-app/-/plugin-expo-app-48.0.0.tgz", + "integrity": "sha512-NWCTMxQCqirmbjoMQFfqNp9uK1vuDlzklweElNsuKau0XdjY2EiP5q9mKrYH7alTGM2EDVPHcCvnhsQPPer05w==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0", + "expo-application": "~5.1.1", + "expo-constants": "~14.2.1" + } + }, + "node_modules/@bugsnag/plugin-expo-app-state-breadcrumbs": { + "version": "48.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-expo-app-state-breadcrumbs/-/plugin-expo-app-state-breadcrumbs-48.0.0.tgz", + "integrity": "sha512-AQnLdPmf+UwNnlwLodwS1vNSP8JzEC+YdKLMQOAVPV1pRth25ku+xsIgi82YV2/1jLZlgznoLMgOxUAVUWUQDg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-expo-device": { + "version": "48.1.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-expo-device/-/plugin-expo-device-48.1.0.tgz", + "integrity": "sha512-SnLXEpDLXOlURWs0EEOZDXzjPBx7AnXA0JB6sdMa7tTE//Ek3S8by5PWPMtBt19Bo9mC3wkkz3P7nAPANrUMKg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0", + "expo-constants": "~14.2.1", + "expo-device": "~5.2.1" + } + }, + "node_modules/@bugsnag/plugin-expo-eas-sourcemaps": { + "version": "48.1.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-expo-eas-sourcemaps/-/plugin-expo-eas-sourcemaps-48.1.0.tgz", + "integrity": "sha512-dKBy1NZvcVLzRXR3/nNJEFOEsUl7vlfTggJGxyCnXv8wkd+NYxBJvy9rL41RdJ+AhJ3FDpyg73hJ8DsyPwEa+Q==", + "dev": true, + "bin": { + "bugsnag-eas-build-on-success": "lib/eas-build-on-success.js" + }, + "peerDependencies": { + "@bugsnag/source-maps": "^2.3.1", + "@expo/config": "^8.0.2" + } + }, + "node_modules/@bugsnag/plugin-network-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-network-breadcrumbs/-/plugin-network-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-Farc0XuUoxv10kJE65zfgZlqujR7TDu8QjwxA4YDxEE41kFM8TAw0CAK15WkQK1UTsNACiiAETZGyU279eB65Q==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz", + "integrity": "sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + }, + "peerDependenciesMeta": { + "@bugsnag/core": { + "optional": true + } + } + }, + "node_modules/@bugsnag/plugin-react-native-global-error-handler": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-global-error-handler/-/plugin-react-native-global-error-handler-7.19.0.tgz", + "integrity": "sha512-zf+KIHqGEAs2ekAzJCTS0rM1nKrmpIfznBhn72xZJwyfYrh0wbvjZjClDEwxDZ24uNVUUHrIymzdqxpHqVb0lg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-orientation-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-orientation-breadcrumbs/-/plugin-react-native-orientation-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-CvICiyKr5nSiKXtF7acyVGM/1BqX7BDP2FOCtmuJxKFYjfiVOtCFAQXk4jnPJG+UEZvY+vtoRlR2EnLhXDdTRA==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-unhandled-rejection": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-unhandled-rejection/-/plugin-react-native-unhandled-rejection-7.19.0.tgz", + "integrity": "sha512-+XDk0OoeM6MZhBh7kEalbRwFuhCZST6Y1jOostfz0fhrmT4FdgQYi1FWcPNsUTcjqv7M48pOFZNx8yWI0lGaYg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + }, + "node_modules/@bugsnag/source-maps": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz", + "integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==", + "dependencies": { + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "concat-stream": "^2.0.0", + "consola": "^2.15.0", + "form-data": "^3.0.0", + "glob": "^7.1.6", + "read-pkg-up": "^7.0.1" + }, + "bin": { + "bugsnag-source-maps": "bin/cli" + } + }, "node_modules/@cashu/cashu-ts": { "version": "0.8.0-rc.4", "resolved": "https://registry.npmjs.org/@cashu/cashu-ts/-/cashu-ts-0.8.0-rc.4.tgz", @@ -5715,6 +5915,14 @@ "node": ">=8" } }, + "node_modules/@react-native-community/netinfo": { + "version": "9.3.7", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-9.3.7.tgz", + "integrity": "sha512-+taWmE5WpBp0uS6kf+bouCx/sn89G9EpR4s2M/ReLvctVIFL2Qh8WnWfBxqK9qwgmFha/uqjSr2Gq03OOtiDcw==", + "peerDependencies": { + "react-native": ">=0.59" + } + }, "node_modules/@react-native-picker/picker": { "version": "2.4.8", "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.8.tgz", @@ -5918,6 +6126,58 @@ "@sinonjs/commons": "^2.0.0" } }, + "node_modules/@testing-library/react-native": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.1.2.tgz", + "integrity": "sha512-5rQMQpbSQAuJc4TxjTt1IoeT1a5eVXaa61hf/YcjV2QtGqCoyhuW8DvhTowrL7y2Ds4NzuYBmbVxjNPR6GIblw==", + "dev": true, + "dependencies": { + "pretty-format": "^29.0.0" + }, + "peerDependencies": { + "jest": ">=28.0.0", + "react": ">=16.8.0", + "react-native": ">=0.59", + "react-test-renderer": ">=16.8.0" + }, + "peerDependenciesMeta": { + "jest": { + "optional": true + } + } + }, + "node_modules/@testing-library/react-native/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/react-native/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@testing-library/react-native/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -6093,9 +6353,14 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -6166,15 +6431,15 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz", - "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz", + "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/type-utils": "5.59.8", - "@typescript-eslint/utils": "5.59.8", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/type-utils": "5.59.9", + "@typescript-eslint/utils": "5.59.9", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -6233,14 +6498,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz", - "integrity": "sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz", + "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", "debug": "^4.3.4" }, "engines": { @@ -6260,13 +6525,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz", - "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz", + "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8" + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6277,13 +6542,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz", - "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz", + "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.8", - "@typescript-eslint/utils": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.9", + "@typescript-eslint/utils": "5.59.9", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -6304,9 +6569,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz", - "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz", + "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6317,13 +6582,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz", - "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz", + "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6377,17 +6642,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz", - "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz", + "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -6436,12 +6701,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz", - "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==", + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz", + "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/types": "5.59.9", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6484,12 +6749,6 @@ "node": ">=10.0.0" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -6780,6 +7039,14 @@ "node": ">=0.10.0" } }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -6793,6 +7060,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", @@ -6864,6 +7139,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -7561,6 +7857,50 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/bugsnag-build-reporter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bugsnag-build-reporter/-/bugsnag-build-reporter-1.0.3.tgz", + "integrity": "sha512-LErEX255NUXc7N4wf/soalOKjsQRzyA/63ZXEGWAbfs0K+NMFWqoAkoeIuJo3Qvi6Y6brpldhclkxc9AjPXMTg==", + "dependencies": { + "chalk": "^2.3.0", + "concat-stream": "^1.6.0", + "find-nearest-file": "^1.1.0", + "meow": "^4.0.0", + "minimist": "^1.2.0", + "once": "^1.4.0", + "pino": "^4.10.3", + "run-parallel": "^1.1.6" + }, + "bin": { + "bugsnag-build-reporter": "bin/cli.js" + } + }, + "node_modules/bugsnag-build-reporter/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", @@ -7715,6 +8055,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "engines": { + "node": ">=4" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001481", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", @@ -8106,6 +8467,50 @@ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -8197,6 +8602,33 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -8224,6 +8656,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -8416,6 +8853,17 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "dev": true }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/dag-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", @@ -8498,6 +8946,29 @@ "node": ">=0.10.0" } }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -8794,6 +9265,18 @@ "node": ">=12" } }, + "node_modules/dotenv": { + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", + "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -9508,10 +9991,34 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-jest": { + "version": "27.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.1.tgz", + "integrity": "sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, "node_modules/eslint-plugin-jsdoc": { - "version": "46.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.2.3.tgz", - "integrity": "sha512-06s2RmIyichD2+CYQzSq4DH5YAaXdYm6WPe6C8daf7vr6MxzJiYJYOKxNYLDdQRTRE2JAW1kfU1OYRxvAxDzjA==", + "version": "46.2.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.2.6.tgz", + "integrity": "sha512-zIaK3zbSrKuH12bP+SPybPgcHSM6MFzh3HFeaODzmsF1N8C1l8dzJ22cW1aq4g0+nayU1VMjmNf7hg0dpShLrA==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "~0.39.4", @@ -9520,6 +10027,7 @@ "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", "semver": "^7.5.1", "spdx-expression-parse": "^3.0.1" }, @@ -9644,6 +10152,85 @@ "eslint": "^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-simple-import-sort": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", @@ -10546,6 +11133,17 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/expo-device": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/expo-device/-/expo-device-5.2.1.tgz", + "integrity": "sha512-ZWGph+fGQPxo9v2e0YygPb45Hl+ZR3mh4tpLY5AOYK/sNjQy+Lu3T/sLGIdi2TOcYNL2oZwzZ6eGvwVYmdIfLg==", + "dependencies": { + "ua-parser-js": "^0.7.33" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-file-system": { "version": "15.2.2", "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-15.2.2.tgz", @@ -10590,6 +11188,17 @@ "expo": "*" } }, + "node_modules/expo-localization": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/expo-localization/-/expo-localization-14.1.1.tgz", + "integrity": "sha512-wmozyF82i6muCBWTX+atzqQv9JUjSbEQ0QKYg1Th4QX/qcVd+ajVjFUytSMzg/ME1vGUP1s+LN+SiZ98YokWWw==", + "dependencies": { + "rtl-detect": "^1.0.2" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-manifests": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-0.5.2.tgz", @@ -10845,6 +11454,11 @@ "node": ">=8.6.0" } }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -10857,10 +11471,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-safe-stringify": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz", + "integrity": "sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw==" + }, "node_modules/fast-xml-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.2.tgz", - "integrity": "sha512-DLzIPtQqmvmdq3VUKR7T6omPK/VCRNqgFlGtbESfyhcH2R4I8EzK1/K6E8PkRCK2EabWrUHK32NjYRbEFnnz0Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz", + "integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==", "funding": [ { "type": "paypal", @@ -10921,6 +11540,14 @@ "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, + "node_modules/fbjs/node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, "node_modules/fetch-retry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", @@ -11031,6 +11658,22 @@ "node": ">=6" } }, + "node_modules/find-nearest-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-nearest-file/-/find-nearest-file-1.1.0.tgz", + "integrity": "sha512-NMsS0ITOwpBPrHOyO7YUtDhaVEGUKS0kBJDVaWZPuCzO7JMW+uzFQQVts/gPyIV9ioyNWDb5LjhHWXVf1OnBDA==" + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -11090,6 +11733,11 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", @@ -12129,6 +12777,21 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -12532,6 +13195,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "node_modules/iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -15818,8 +16486,7 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-deref-sync": { "version": "0.13.0", @@ -15886,6 +16553,19 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -15894,15 +16574,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -15937,6 +16608,36 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -15956,6 +16657,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -16018,6 +16724,18 @@ "loose-envify": "cli.js" } }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16141,6 +16859,14 @@ "node": ">=0.10.0" } }, + "node_modules/map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -16204,6 +16930,122 @@ "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" }, + "node_modules/meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/merge-options": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", @@ -17035,6 +17877,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/minipass": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", @@ -17132,6 +17994,12 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/mitt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", + "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", + "dev": true + }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -17561,12 +18429,36 @@ "node": ">=6" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/npm-package-arg": { @@ -17771,6 +18663,50 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -18050,243 +18986,6 @@ "cross-spawn": "^6.0.5" } }, - "node_modules/patch-package": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.0.tgz", - "integrity": "sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ==", - "dev": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^2.2.2" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=14", - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/patch-package/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/patch-package/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/patch-package/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/patch-package/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/patch-package/node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -18353,6 +19052,29 @@ "node": ">=6" } }, + "node_modules/pino": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/pino/-/pino-4.17.6.tgz", + "integrity": "sha512-LFDwmhyWLBnmwO/2UFbWu1jEGVDzaPupaVdx0XcZ3tIAx1EDEBauzxXf2S0UcFK7oe+X9MApjH0hx9U1XMgfCA==", + "dependencies": { + "chalk": "^2.4.1", + "fast-json-parse": "^1.0.3", + "fast-safe-stringify": "^1.2.3", + "flatstr": "^1.0.5", + "pino-std-serializers": "^2.0.0", + "pump": "^3.0.0", + "quick-format-unescaped": "^1.1.2", + "split2": "^2.2.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==" + }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -18670,11 +19392,11 @@ } }, "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dependencies": { - "asap": "~2.0.3" + "asap": "~2.0.6" } }, "node_modules/promise-inflight": { @@ -18855,6 +19577,22 @@ } ] }, + "node_modules/quick-format-unescaped": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz", + "integrity": "sha512-lli1svZnGwCLiDydlAN2bmSiEeThfI5gnqWsv0cFRiRbzXsRuzoPldK+BY5TM/i+koLoZ8dmZA6uPEBGTpaZqw==", + "dependencies": { + "fast-safe-stringify": "^1.0.8" + } + }, + "node_modules/quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", + "engines": { + "node": ">=4" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -19008,6 +19746,17 @@ "nullthrows": "^1.1.1" } }, + "node_modules/react-native-flipper": { + "version": "0.164.0", + "resolved": "https://registry.npmjs.org/react-native-flipper/-/react-native-flipper-0.164.0.tgz", + "integrity": "sha512-iJhIe3rqx6okuzBp4AJsTa2b8VRAOGzoLRFx/4HGbaGvu8AurZjz8TTQkhJsRma8dsHN2b6KKZPvGGW3wdWzvA==", + "dev": true, + "optional": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": ">0.62.0" + } + }, "node_modules/react-native-gesture-handler": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.9.0.tgz", @@ -19025,9 +19774,9 @@ } }, "node_modules/react-native-gradle-plugin": { - "version": "0.71.18", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.18.tgz", - "integrity": "sha512-7F6bD7B8Xsn3JllxcwHhFcsl9aHIig47+3eN4IHFNqfLhZr++3ElDrcqfMzugM+niWbaMi7bJ0kAkAL8eCpdWg==" + "version": "0.71.19", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.19.tgz", + "integrity": "sha512-1dVk9NwhoyKHCSxcrM6vY6cxmojeATsBobDicX0ZKr7DgUF2cBQRTKsimQFvzH8XhOVXyH8p4HyDSZNIFI8OlQ==" }, "node_modules/react-native-qrcode-svg": { "version": "6.2.0", @@ -19163,14 +19912,6 @@ "react-native": "*" } }, - "node_modules/react-native/node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, "node_modules/react-native/node_modules/ws": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", @@ -19219,6 +19960,166 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/reactotron-core-client": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/reactotron-core-client/-/reactotron-core-client-2.8.10.tgz", + "integrity": "sha512-SYRO4OCutJzfWMnaULUGVyETZnMDCU5ECNflXyM3Z5Gnfxp/wV6d7jYonhfxHdpU/aGb4Eg15C22myOCXSu6HQ==", + "dev": true + }, + "node_modules/reactotron-react-native": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/reactotron-react-native/-/reactotron-react-native-5.0.3.tgz", + "integrity": "sha512-uUQ074uw3I9X/pc7FBgrrwrFzfwXDKlxzuekNjzspZz9Y0qVLX1cAm9GTC0ZPsZRvY5wDPY/Il7XfV1YeVSDxA==", + "dev": true, + "dependencies": { + "mitt": "1.1.3", + "query-string": "6.10.1", + "reactotron-core-client": "2.8.10", + "rn-host-detect": "1.2.0" + }, + "optionalDependencies": { + "react-native-flipper": "^0.164.0" + }, + "peerDependencies": { + "react-native": ">=0.40.0" + } + }, + "node_modules/reactotron-react-native/node_modules/query-string": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.10.1.tgz", + "integrity": "sha512-SHTUV6gDlgMXg/AQUuLpTiBtW/etZ9JT6k6RCtCyqADquApLX0Aq5oK/s5UeTUAWBG50IExjIr587GqfXRfM4A==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -19274,6 +20175,34 @@ "react-native": ">= 0.30.0" } }, + "node_modules/redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "engines": { + "node": ">=6" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -19553,6 +20482,17 @@ "rimraf": "bin.js" } }, + "node_modules/rn-host-detect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rn-host-detect/-/rn-host-detect-1.2.0.tgz", + "integrity": "sha512-btNg5kzHcjZZ7t7mvvV/4wNJ9e3MPgrWivkRgWURzXL0JJ0pwWlU4zrbmdlz3HHzHOxhBhHB4D+/dbMFfu4/4A==", + "dev": true + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -20178,17 +21118,24 @@ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -20197,8 +21144,7 @@ "node_modules/spdx-license-ids": { "version": "3.0.13", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" }, "node_modules/split": { "version": "1.0.1", @@ -20230,6 +21176,14 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dependencies": { + "through2": "^2.0.2" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -20270,6 +21224,14 @@ "node": ">= 8" } }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -20495,6 +21457,25 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", @@ -20585,6 +21566,14 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -20696,6 +21685,36 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, "node_modules/tar": { "version": "6.1.13", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", @@ -21049,6 +22068,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -21312,6 +22339,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -21325,6 +22357,14 @@ "node": ">=4.2.0" } }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + }, "node_modules/ua-parser-js": { "version": "0.7.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", @@ -21661,6 +22701,15 @@ "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", @@ -21939,6 +22988,26 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 77bc3f01..3b91730b 100644 --- a/package.json +++ b/package.json @@ -2,42 +2,6 @@ "name": "enuts", "description": "A cashu wallet for Android and IOS", "author": "Agron Kadriaj (https://agron.dev)", - "homepage": ".", - "contributors": [ - { - "name": "BilligsterUser", - "email": "billigsteruser@protonmail.com", - "url": "https://github.com/BilligsterUser" - } - ], - "repository": { - "type": "git", - "url": "git+https://github.com/cashubtc/eNuts/issues" - }, - "keywords": [ - "cashu", - "ecash", - "micropayments", - "payments", - "android", - "ios", - "privacy", - "lightning", - "bitcoin", - "enuts", - "nuts", - "chaumian", - "cashubtc", - "secp256k1", - "blind-signatures", - "lightning-network" - ], - "version": "0.0.1-alpha", - "license": "AGPL-3.0-only", - "bugs": { - "url": "https://github.com/cashubtc/eNuts/issues" - }, - "main": "src/AppEntry.ts", "scripts": { "s:debug:full": "npx -y cross-env@latest DEBUG=full expo start -c", "s:c:dev": "expo start -c --dev-client", @@ -45,7 +9,7 @@ "start": "expo start", "lint": "npx eslint . --ext .tsx,.jsx,.ts --fix && npx tsc && npm run fmtJson", "ts:check": "npx tsc", - "dep:update": "npx -y npm-check-updates --pre -u -u && npm i && npx expo install --fix && npm run lint", + "dep:update": "npx -y npm-check-updates --pre -u -u && npm i && npm audit fix || true && npx expo install --fix && npm run lint", "dep:check": "npx -y depcheck@latest", "fmtJson": "npx prettier *.json .github/workflows/*.yml --write --use-tabs --tab-width 4", "expo:i:check": "npx expo install --check", @@ -54,58 +18,75 @@ "build:dev": "npx -y eas-cli@latest build -e development -p android -m devWithDevClient --no-wait", "build:preview": "npx -y eas-cli@latest build -e preview -p android -m previewNoDevClient --no-wait", "build:ci": "npx -y eas-cli@latest build --non-interactive -e development -p android -m ciDevBuild --no-wait", + "eas-build-on-success": "npx bugsnag-eas-build-on-success", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web", "test": "npx jest -c config/jest.config.ts --passWithNoTests ", "test:coverage": "npm run test -- --collectCoverage", + "test:ts": "npm run test --testPathIgnorePatterns=tsx$", + "test:ts:coverage": "npm run test:ts -- --collectCoverageFrom=src/**/*.ts", + "test:tsx": "npm run test --testPathIgnorePatterns=ts$", + "test:tsx:coverage": "npm run test:tsx -- --collectCoverageFrom=components/**/*.tsx", "test:dev": "npm run test -- --detectOpenHandles", - "postinstall": "patch-package && npm run fmtJson" + "cpd:ts": "npx -y jscpd -c config/cpd.config.ts.json src config", + "cpd:tsx": "npx -y jscpd -c config/cpd.config.tsx.json src", + "cpd": "npm run cpd:ts && npm run cpd:tsx", + "deps:c": "npx -y madge --circular --ts-config tsconfig.json --extensions ts,tsx ." }, "dependencies": { - "@cashu/cashu-ts": "0.8.0-rc.4", + "@bugsnag/expo": "^48.1.0", + "@cashu/cashu-ts": "^0.8.0-rc.4", "@expo/metro-config": "^0.7.1", - "@react-native-async-storage/async-storage": "1.17.11", - "@react-native-picker/picker": "2.4.8", + "@react-native-async-storage/async-storage": "^1.17.11", + "@react-native-community/netinfo": "^9.3.7", + "@react-native-picker/picker": "^2.4.8", "@react-navigation/core": "^6.4.8", "@react-navigation/drawer": "^6.6.2", "@react-navigation/native": "^6.1.6", "@react-navigation/native-stack": "^6.9.12", - "@shopify/flash-list": "1.4.0", + "@shopify/flash-list": "^1.4.0", "axios": "^1.4.0", "expo": "^48.0.19", - "expo-asset": "~8.9.1", - "expo-barcode-scanner": "~12.3.2", - "expo-camera": "~13.2.1", - "expo-clipboard": "~4.1.2", - "expo-constants": "~14.2.1", + "expo-application": "^5.1.1", + "expo-asset": "^8.9.1", + "expo-barcode-scanner": "^12.3.2", + "expo-camera": "^13.2.1", + "expo-clipboard": "^4.1.2", + "expo-constants": "^14.2.1", "expo-crypto": "^12.2.2", - "expo-file-system": "~15.2.2", + "expo-device": "^5.2.1", + "expo-file-system": "^15.2.2", + "expo-localization": "^14.1.1", "expo-secure-store": "^12.1.1", "expo-splash-screen": "^0.18.2", "expo-sqlite": "^11.1.1", "expo-status-bar": "^1.4.4", - "react": "18.2.0", + "react": "^18.2.0", "react-native": "^0.71.8", - "react-native-gesture-handler": "~2.9.0", + "react-native-gesture-handler": "^2.9.0", "react-native-qrcode-svg": "^6.2.0", - "react-native-reanimated": "~2.14.4", - "react-native-safe-area-context": "4.5.0", + "react-native-reanimated": "^2.14.4", + "react-native-safe-area-context": "^4.5.0", "react-native-screens": "^3.20.0", - "react-native-svg": "13.4.0", + "react-native-svg": "^13.4.0", "react-native-url-polyfill": "^1.3.0", "text-encoding-polyfill": "^0.6.7" }, "devDependencies": { "@babel/plugin-proposal-private-methods": "^7.18.6", + "@bugsnag/plugin-expo-eas-sourcemaps": "^48.1.0", + "@bugsnag/source-maps": "^2.3.1", "@getify/eslint-plugin-proper-arrows": "^11.0.3", + "@testing-library/react-native": "^12.1.2", "@types/babel__core": "^7.20.1", "@types/jest": "^29.5.2", - "@types/node": "^20.2.5", - "@types/react": "~18.0.27", + "@types/node": "^20.3.0", + "@types/react": "^18.0.27", "@types/sqlite3": "^3.1.8", - "@typescript-eslint/eslint-plugin": "^5.59.8", - "@typescript-eslint/parser": "^5.59.8", + "@typescript-eslint/eslint-plugin": "^5.59.9", + "@typescript-eslint/parser": "^5.59.9", + "dotenv": "^16.1.4", "eslint": "^8.42.0", "eslint-plugin-compat": "^4.1.4", "eslint-plugin-deprecate": "^0.7.0", @@ -113,22 +94,61 @@ "eslint-plugin-eslint-plugin": "^5.1.0", "eslint-plugin-html": "^7.1.0", "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jsdoc": "^46.2.3", + "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-jsdoc": "^46.2.6", "eslint-plugin-json": "^3.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-tsdoc": "^0.2.17", "expo-dev-client": "^2.2.1", "jest": "^29.5.0", "jest-expo": "^48.0.2", - "patch-package": "^7.0.0", "prettier": "^2.8.8", + "reactotron-react-native": "^5.0.3", "ts-jest": "^29.1.0", "ts-jest-resolver": "^2.0.1", "ts-node": "^10.9.1", "typescript": "^4.9.4", "websql": "^2.0.3" }, + "homepage": ".", + "contributors": [ + { + "name": "BilligsterUser", + "email": "billigsteruser@protonmail.com", + "url": "https://github.com/BilligsterUser" + } + ], + "repository": { + "type": "git", + "url": "git+https://github.com/cashubtc/eNuts/issues" + }, + "keywords": [ + "cashu", + "ecash", + "micropayments", + "payments", + "android", + "ios", + "privacy", + "lightning", + "bitcoin", + "enuts", + "nuts", + "chaumian", + "cashubtc", + "secp256k1", + "blind-signatures", + "lightning-network" + ], + "version": "0.0.2-alpha", + "license": "AGPL-3.0-only", + "bugs": { + "url": "https://github.com/cashubtc/eNuts/issues" + }, + "main": "src/AppEntry.ts", "private": true -} +} \ No newline at end of file diff --git a/patches/@noble+hashes+1.3.0.patch b/patches/@noble+hashes+1.3.0.patch deleted file mode 100644 index e760d4b3..00000000 --- a/patches/@noble+hashes+1.3.0.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/node_modules/@noble/hashes/utils.js b/node_modules/@noble/hashes/utils.js -index c0519ac..4580d7e 100644 ---- a/node_modules/@noble/hashes/utils.js -+++ b/node_modules/@noble/hashes/utils.js -@@ -154,8 +154,14 @@ exports.wrapConstructorWithOpts = wrapConstructorWithOpts; - function randomBytes(bytesLength = 32) { - if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') { - return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength)); -+ } -+ try { -+ const randomBytes = require('expo-crypto').getRandomBytes; -+ return randomBytes(bytesLength); -+ } catch (e) { -+ throw new Error("The environment doesn't have randomBytes function and we couldn't use expo-crypto"); - } -- throw new Error('crypto.getRandomValues must be defined'); -+ // throw new Error('crypto.getRandomValues must be defined'); - } - exports.randomBytes = randomBytes; - //# sourceMappingURL=utils.js.map -\ No newline at end of file diff --git a/react-native.config.js b/react-native.config.js index 75e12735..ed8e7916 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -1,7 +1,7 @@ // File created by expo-dev-client/app.plugin.js module.exports = { - dependencies: { - ...require('expo-dev-client/dependencies'), - }, + dependencies: { + ...require('expo-dev-client/dependencies'), + }, }; diff --git a/src/AppEntry.ts b/src/AppEntry.ts index 65431a96..a1c47740 100644 --- a/src/AppEntry.ts +++ b/src/AppEntry.ts @@ -1,16 +1,43 @@ +// dont touch this import 'expo-dev-client' +import './shim' import App from '@comps/App' +import { isReactNativeDevMode } from '@consts' import { l } from '@log' -import type { IInitialProps } from '@model' +import { setupReactotron } from '@log/reactotron' import { registerRootComponent } from 'expo' + +// Set up Reactotron, which is a free desktop app for inspecting and debugging +// React Native apps. Learn more here: https://github.com/infinitered/reactotron +if (isReactNativeDevMode) { + setupReactotron({ + // clear the Reactotron window when the app loads/reloads + clearOnLoad: true, + // generally going to be localhost + // host: hostname, + // Reactotron can monitor AsyncStorage for you + useAsyncStorage: false, + // log the initial restored state from AsyncStorage + logInitialState: true, + // log out any snapshots as they happen (this is useful for debugging but slow) + logSnapshots: false, + }) +} + + +// Bugsnag.notify(new Error('Test error from AppEntry')) + l('AppEntryPoint') -const x: IInitialProps = { + + +/* const x: IInitialProps = { + // expo?:, exp: {}, mode: '\nDEV MODE\n' -} +} */ // eslint-disable-next-line new-cap -registerRootComponent(() => App(x)) +registerRootComponent(App) diff --git a/src/components/App.tsx b/src/components/App.tsx index 5bad0352..5e307a66 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1,11 +1,9 @@ -// dont touch this -import 'react-native-url-polyfill/auto' -import 'text-encoding-polyfill' - +import Bugsnag from '@bugsnag/expo' import { getEncodedToken } from '@cashu/cashu-ts' import Button from '@comps/Button' import useLoading from '@comps/hooks/Loading' import usePrompt from '@comps/hooks/Prompt' +import { env } from '@consts' import { addAllMintIds, getBalance, getContacts, getMintsBalances, getMintsUrls, getPreferences, initDb, setPreferences } from '@db' import { fsInfo } from '@db/fs' import { l } from '@log' @@ -14,14 +12,14 @@ import { PromptModal } from '@modal/Prompt' import { IInitialProps, IPreferences, ITokenInfo } from '@model' import { DrawerNav } from '@nav/Navigator' import { NavigationContainer } from '@react-navigation/native' -import { ContactsContext, IContact } from '@src/context/Contacts' +import { ContactsContext, type IContact } from '@src/context/Contacts' import { FocusClaimCtx } from '@src/context/FocusClaim' import { KeyboardProvider } from '@src/context/Keyboard' import { ThemeContext } from '@src/context/Theme' import { addToHistory } from '@store/HistoryStore' -import { dark, light } from '@styles/colors' -import { globals } from '@styles/globals' -import { formatInt, isCashuToken, isTrustedMint, sleep } from '@util' +import { dark, globals, light } from '@styles' +import { formatInt, hasTrustedMint, isCashuToken, sleep } from '@util' +import { initCrashReporting } from '@util/crashReporting' import { claimToken, isTokenSpendable, runRequestTokenLoop } from '@wallet' import { getTokenInfo } from '@wallet/proofs' import * as Clipboard from 'expo-clipboard' @@ -30,41 +28,12 @@ import { StatusBar } from 'expo-status-bar' import React, { useEffect, useRef, useState } from 'react' import { AppState, Text, View } from 'react-native' -/* import * as DevMenu from 'expo-dev-menu' -import { StyleSheet } from 'react-native' - +import { CustomErrorBoundary } from './ErrorScreen/ErrorBoundary' +import { ErrorDetails } from './ErrorScreen/ErrorDetails' +import Txt from './Txt' -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - alignItems: 'center', - justifyContent: 'center', - }, - buttonContainer: { - backgroundColor: '#4630eb', - borderRadius: 4, - padding: 12, - marginVertical: 10, - justifyContent: 'center', - alignItems: 'center', - }, - buttonText: { - color: '#ffffff', - fontSize: 16, - }, -}) +initCrashReporting() -function Button({ label, onPress }: { - onPress: (event: GestureResponderEvent) => void, - label: string -}){ - return ( - - {label} - - ) -} */ const defaultPref: IPreferences = { id: 1, darkmode: false, @@ -75,7 +44,6 @@ const defaultPref: IPreferences = { void SplashScreen.preventAutoHideAsync() export default function App(_initialProps: IInitialProps) { - // eslint-disable-next-line @typescript-eslint/naming-convention const [isRdy, setIsRdy] = useState(false) const [claimed, setClaimed] = useState(false) @@ -114,7 +82,7 @@ export default function App(_initialProps: IInitialProps) { const userMints = await getMintsUrls() // do not claim from clipboard when app comes to the foreground if mint from token is not trusted // TODO token can belong to multiple mints - if (!isTrustedMint(userMints, info?.mints || [])) { return false } + if (!hasTrustedMint(userMints, info?.mints || [])) { return false } // check if token is spendable const isSpendable = await isTokenSpendable(clipboard) isSpent = !isSpendable @@ -136,7 +104,6 @@ export default function App(_initialProps: IInitialProps) { if (!tokenInfo) { return } const encoded = getEncodedToken(tokenInfo.decoded) const success = await claimToken(encoded).catch(l) - stopLoading() if (!success) { alert('Token invalid or already claimed') setClaimOpen(false) @@ -154,8 +121,9 @@ export default function App(_initialProps: IInitialProps) { value: encoded, mints: info.mints, }) - openPrompt(`Successfully claimed ${formatInt(info.value, 'en', 'standard')} Satoshi!`) + openPrompt(`Successfully claimed ${formatInt(info.value)} Satoshi!`) setClaimed(true) + stopLoading() setClaimOpen(false) } @@ -167,6 +135,7 @@ export default function App(_initialProps: IInitialProps) { setPref({ ...pref, darkmode: theme === 'Dark' }) // update DB void setPreferences({ ...pref, darkmode: theme === 'Dark' }) + // eslint-disable-next-line react-hooks/exhaustive-deps }, [theme]) // update highlighting color useEffect(() => { @@ -175,6 +144,7 @@ export default function App(_initialProps: IInitialProps) { setPref({ ...pref, theme: highlight }) // update DB void setPreferences({ ...pref, theme: highlight }) + // eslint-disable-next-line react-hooks/exhaustive-deps }, [highlight]) useEffect(() => { @@ -203,7 +173,6 @@ export default function App(_initialProps: IInitialProps) { setPref(defaultPref) } finally { await SplashScreen.hideAsync() - setIsRdy(true) } } async function initContacts() { @@ -218,12 +187,20 @@ export default function App(_initialProps: IInitialProps) { await initDB() await initContacts() await initPreferences() + // await dropTable('proofs') + // await dropTable('proofsUsed') + // await dropTable('keysetIds') + // await dropTable('mintKeys') + // await dropTable('invoices') + // await dropTable('preferences') + // await dropTable('contacts') const mintBalsTotal = (await getMintsBalances()).reduce((acc, cur) => acc + cur.amount, 0) const bal = await getBalance() l({ bal, mintBalsTotal }) if (mintBalsTotal !== bal) { await addAllMintIds() } + setIsRdy(true) } void init().then(fsInfo) // eslint-disable-next-line @typescript-eslint/no-misused-promises @@ -246,79 +223,73 @@ export default function App(_initialProps: IInitialProps) { if (!isRdy) { return null } + // Bugsnag Error boundary. docs: https://docs.bugsnag.com/platforms/javascript/react/ + const BugSnagErrorBoundary = ({ children }: { children: React.ReactNode }) => { + if (env.BUGSNAG_API_KEY) { + // Create the error boundary... + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const ErrorBoundary = Bugsnag.getPlugin('react').createErrorBoundary(React) + // Uses the bugsnack error boundary component which posts the errors to our bugsnag account + return ( + + {children} + + ) + } + return ( + + {children} + + ) + } + return ( - - - - - - - {/* claim token if app comes to foreground and clipboard has valid cashu token */} - {claimOpen && - - - Found a cashu token in your clipboard - - - - {formatInt(tokenInfo?.value || 0, 'en', 'standard')} + + + + + + + + {/* claim token if app comes to foreground and clipboard has valid cashu token */} + {claimOpen && + + + Found a cashu token in your clipboard - {' '}Satoshi from the following mint:{' '} - {tokenInfo?.mints.map(m => m)} - -