this repo has no description

lint/prettier

+2 -5
.eslintrc.js
···
-
module.exports = {
-
root: true,
-
extends: ['universe/native', 'universe/web'],
-
ignorePatterns: ['build'],
-
};
+
// @generated by expo-module-scripts
+
module.exports = require('expo-module-scripts/eslintrc.base.js')
+8
babel.config.js
···
+
module.exports = {
+
overrides: [
+
{
+
include: /\/node_modules\//,
+
presets: ['module:@react-native/babel-preset'],
+
},
+
],
+
}
+39
eslint.config.mjs
···
+
import { fixupConfigRules } from '@eslint/compat'
+
import babelParser from '@babel/eslint-parser'
+
import { FlatCompat } from '@eslint/eslintrc'
+
import js from '@eslint/js'
+
import prettier from 'eslint-plugin-prettier'
+
import { defineConfig } from 'eslint/config'
+
import path from 'node:path'
+
import { fileURLToPath } from 'node:url'
+
+
const __filename = fileURLToPath(import.meta.url)
+
const __dirname = path.dirname(__filename)
+
const compat = new FlatCompat({
+
baseDirectory: __dirname,
+
recommendedConfig: js.configs.recommended,
+
allConfig: js.configs.all,
+
})
+
+
export default defineConfig([
+
{
+
extends: fixupConfigRules(compat.extends('@react-native', 'prettier')),
+
plugins: { prettier },
+
rules: {
+
'react/react-in-jsx-scope': 'off',
+
'prettier/prettier': [
+
'error',
+
{
+
quoteProps: 'consistent',
+
singleQuote: true,
+
tabWidth: 2,
+
trailingComma: 'es5',
+
useTabs: false,
+
},
+
],
+
},
+
},
+
{
+
ignores: ['node_modules/', 'lib/'],
+
},
+
])
+78 -78
example/App.tsx
···
-
import React from "react";
-
import { Text, View, StyleSheet, Button, Alert, TextInput } from "react-native";
+
import React from 'react'
+
import { Text, View, StyleSheet, Button, Alert, TextInput } from 'react-native'
import {
digest,
getRandomValues,
createJwt,
generateJwk,
ReactNativeOAuthClient,
-
} from "expo-atproto-auth";
-
import { OAuthSession } from "@atproto/oauth-client";
-
import { Agent } from "@atproto/api";
-
import type { ReactNativeKey } from "expo-atproto-auth";
-
import * as Browser from "expo-web-browser";
+
} from 'expo-atproto-auth'
+
import { OAuthSession } from '@atproto/oauth-client'
+
import { Agent } from '@atproto/api'
+
import type { ReactNativeKey } from 'expo-atproto-auth'
+
import * as Browser from 'expo-web-browser'
const client = new ReactNativeOAuthClient({
clientMetadata: {
-
client_id: "https://hailey.at/oauth-client-metadata.json",
-
client_name: "React Native OAuth Client Demo",
-
client_uri: "https://hailey.at",
-
redirect_uris: ["at.hailey:/auth/callback"],
-
scope: "atproto transition:generic",
-
token_endpoint_auth_method: "none",
-
response_types: ["code"],
-
grant_types: ["authorization_code", "refresh_token"],
-
application_type: "native",
+
client_id: 'https://hailey.at/oauth-client-metadata.json',
+
client_name: 'React Native OAuth Client Demo',
+
client_uri: 'https://hailey.at',
+
redirect_uris: ['at.hailey:/auth/callback'],
+
scope: 'atproto transition:generic',
+
token_endpoint_auth_method: 'none',
+
response_types: ['code'],
+
grant_types: ['authorization_code', 'refresh_token'],
+
application_type: 'native',
dpop_bound_access_tokens: true,
},
-
handleResolver: "https://bsky.social",
-
});
+
handleResolver: 'https://bsky.social',
+
})
export default function App() {
-
const [values, setValues] = React.useState<Uint8Array>();
-
const [sha, setSha] = React.useState<Uint8Array>();
-
const [jwt, setJwt] = React.useState<string>();
+
const [values, setValues] = React.useState<Uint8Array>()
+
const [sha, setSha] = React.useState<Uint8Array>()
+
const [jwt, setJwt] = React.useState<string>()
const [privateJwk, setPrivateJwk] = React.useState<
ReactNativeKey | undefined
-
>();
-
const [session, setSession] = React.useState<OAuthSession>();
-
const [input, setInput] = React.useState<string>();
-
const [agent, setAgent] = React.useState<Agent>();
+
>()
+
const [session, setSession] = React.useState<OAuthSession>()
+
const [input, setInput] = React.useState<string>()
+
const [agent, setAgent] = React.useState<Agent>()
return (
<View style={styles.container}>
-
<Text>Current Account: {session ? session.did : "No Account"}</Text>
+
<Text>Current Account: {session ? session.did : 'No Account'}</Text>
<Text>Values: {values}</Text>
<Button
title="Generate Random Values"
onPress={() => {
-
const newValues = getRandomValues(400);
-
setValues(newValues);
+
const newValues = getRandomValues(400)
+
setValues(newValues)
}}
/>
<Text>SHA: {sha}</Text>
···
title="SHA from values"
onPress={() => {
if (!values) {
-
return;
+
return
}
-
let newSha: Uint8Array | undefined;
+
let newSha: Uint8Array | undefined
try {
-
newSha = digest(values, "sha256");
+
newSha = digest(values, 'sha256')
} catch (e: any) {
-
Alert.alert("Error", e.toString());
-
return;
+
Alert.alert('Error', e.toString())
+
return
}
-
setSha(newSha);
+
setSha(newSha)
}}
/>
<Text>JWT: {jwt}</Text>
···
title="Create JWT"
onPress={() => {
if (!privateJwk) {
-
return;
+
return
}
-
let newJwt: string | undefined;
+
let newJwt: string | undefined
try {
-
newJwt = createJwt("", "", privateJwk);
+
newJwt = createJwt('', '', privateJwk)
} catch (e: any) {
-
Alert.alert("Error", e.toString());
-
return;
+
Alert.alert('Error', e.toString())
+
return
}
-
setJwt(newJwt);
+
setJwt(newJwt)
}}
/>
<Text>Priv Key: {privateJwk?.kid}</Text>
<Button
title="Create JWK"
onPress={() => {
-
let newJwk: ReactNativeKey | undefined;
+
let newJwk: ReactNativeKey | undefined
try {
-
newJwk = generateJwk("ES256");
+
newJwk = generateJwk('ES256')
} catch (e: any) {
-
Alert.alert("Error", e.toString());
-
return;
+
Alert.alert('Error', e.toString())
+
return
}
-
setPrivateJwk(newJwk);
+
setPrivateJwk(newJwk)
}}
/>
···
<Button
title="Open Sign In"
onPress={async () => {
-
let url: URL;
+
let url: URL
try {
-
url = await client.authorize(input ?? "");
+
url = await client.authorize(input ?? '')
} catch (e: any) {
-
Alert.alert("Error", e.toString());
-
return;
+
Alert.alert('Error', e.toString())
+
return
}
const res = await Browser.openAuthSessionAsync(
url.toString(),
-
"at.hailey://auth/callback",
-
);
+
'at.hailey://auth/callback'
+
)
-
if (res.type === "success") {
-
const resUrl = new URL(res.url);
+
if (res.type === 'success') {
+
const resUrl = new URL(res.url)
try {
-
const params = new URLSearchParams(resUrl.hash.substring(1));
-
const callbackRes = await client.callback(params);
-
setSession(callbackRes.session);
+
const params = new URLSearchParams(resUrl.hash.substring(1))
+
const callbackRes = await client.callback(params)
+
setSession(callbackRes.session)
-
const agent = new Agent(callbackRes.session);
-
setAgent(agent);
+
const newAgent = new Agent(callbackRes.session)
+
setAgent(newAgent)
} catch (e: any) {
-
Alert.alert("Error", e.toString());
+
Alert.alert('Error', e.toString())
}
} else {
-
Alert.alert("Error", `Received non-success status: ${res.type}`);
+
Alert.alert('Error', `Received non-success status: ${res.type}`)
}
}}
/>
···
title="Restore from DID"
onPress={async () => {
try {
-
const restoreRes = await client.restore(input ?? "");
-
setSession(restoreRes);
+
const restoreRes = await client.restore(input ?? '')
+
setSession(restoreRes)
-
const agent = new Agent(restoreRes);
-
setAgent(agent);
+
const newAgent = new Agent(restoreRes)
+
setAgent(newAgent)
} catch (e: any) {
-
Alert.alert("Error", e.toString());
+
Alert.alert('Error', e.toString())
}
}}
/>
···
onPress={async () => {
try {
const res = await agent?.getProfile({
-
actor: session?.did ?? "",
-
});
+
actor: session?.did ?? '',
+
})
Alert.alert(
-
"Profile",
-
`Display Name: ${res?.data.displayName}, Bio: ${res?.data.description}`,
-
);
+
'Profile',
+
`Display Name: ${res?.data.displayName}, Bio: ${res?.data.description}`
+
)
} catch (e: any) {
-
Alert.alert("Error", e.toString());
+
Alert.alert('Error', e.toString())
}
}}
disabled={!agent}
···
onPress={async () => {
try {
await agent?.post({
-
text: "Test post from Expo Atproto Auth example",
-
});
+
text: 'Test post from Expo Atproto Auth example',
+
})
} catch (e: any) {
-
Alert.alert("Error", e.toString());
+
Alert.alert('Error', e.toString())
}
}}
disabled={!agent}
/>
</View>
-
);
+
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
-
alignItems: "center",
-
justifyContent: "center",
+
alignItems: 'center',
+
justifyContent: 'center',
},
-
});
+
})
+3 -3
example/babel.config.js
···
module.exports = function (api) {
-
api.cache(true);
+
api.cache(true)
return {
presets: ['babel-preset-expo'],
-
};
-
};
+
}
+
}
+4 -4
example/index.ts
···
-
import "./polyfill";
+
import './polyfill'
-
import { registerRootComponent } from "expo";
+
import { registerRootComponent } from 'expo'
-
import App from "./App";
+
import App from './App'
// const App = require("./App").default;
// registerRootComponent calls AppRegistry.registerComponent('main', () => App);
// It also ensures that whether you load the app in Expo Go or in a native build,
// the environment is set up appropriately
-
registerRootComponent(App);
+
registerRootComponent(App)
+14 -14
example/metro.config.js
···
// Learn more https://docs.expo.io/guides/customizing-metro
-
const { getDefaultConfig } = require("expo/metro-config");
-
const path = require("path");
+
const { getDefaultConfig } = require('expo/metro-config')
+
const path = require('path')
-
const config = getDefaultConfig(__dirname);
+
const config = getDefaultConfig(__dirname)
// npm v7+ will install ../node_modules/react and ../node_modules/react-native because of peerDependencies.
// To prevent the incompatible react-native between ./node_modules/react-native and ../node_modules/react-native,
// excludes the one from the parent folder when bundling.
config.resolver.blockList = [
...Array.from(config.resolver.blockList ?? []),
-
new RegExp(path.resolve("..", "node_modules", "react")),
-
new RegExp(path.resolve("..", "node_modules", "react-native")),
-
];
+
new RegExp(path.resolve('..', 'node_modules', 'react')),
+
new RegExp(path.resolve('..', 'node_modules', 'react-native')),
+
]
config.resolver.nodeModulesPaths = [
-
path.resolve(__dirname, "./node_modules"),
-
path.resolve(__dirname, "../node_modules"),
-
];
+
path.resolve(__dirname, './node_modules'),
+
path.resolve(__dirname, '../node_modules'),
+
]
config.resolver.extraNodeModules = {
-
"expo-atproto-auth": "..",
-
};
+
'expo-atproto-auth': '..',
+
}
-
config.watchFolders = [path.resolve(__dirname, "..")];
+
config.watchFolders = [path.resolve(__dirname, '..')]
config.transformer.getTransformOptions = async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
-
});
+
})
-
module.exports = config;
+
module.exports = config
+17 -17
example/polyfill.ts
···
-
import "react-native-url-polyfill/auto";
-
import "event-target-polyfill";
-
import "abortcontroller-polyfill/dist/polyfill-patch-fetch";
-
export {};
+
import 'react-native-url-polyfill/auto'
+
import 'event-target-polyfill'
+
import 'abortcontroller-polyfill/dist/polyfill-patch-fetch'
+
export {}
/**
https://github.com/MaxArt2501/base64-js
···
Copyright (c) 2014 MaxArt2501
*/
-
const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
// Regular expression to check formal correctness of base64 encoded strings
const b64re =
-
/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
+
/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/
globalThis.atob = (str: string): string => {
// atob can work with strings with whitespaces, even inside the encoded part,
// but only \t, \n, \f, \r and ' ', which can be stripped.
-
str = String(str).replace(/[\t\n\f\r ]+/g, "");
+
str = String(str).replace(/[\t\n\f\r ]+/g, '')
if (!b64re.test(str)) {
throw new TypeError(
-
"Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.",
-
);
+
"Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded."
+
)
}
// Adding the padding if missing, for simplicity
-
str += "==".slice(2 - (str.length & 3));
+
str += '=='.slice(2 - (str.length & 3))
var bitmap,
-
result = "",
+
result = '',
r1,
r2,
-
i = 0;
+
i = 0
for (; i < str.length; ) {
bitmap =
(b64.indexOf(str.charAt(i++)) << 18) |
(b64.indexOf(str.charAt(i++)) << 12) |
((r1 = b64.indexOf(str.charAt(i++))) << 6) |
-
(r2 = b64.indexOf(str.charAt(i++)));
+
(r2 = b64.indexOf(str.charAt(i++)))
result +=
r1 === 64
···
: String.fromCharCode(
(bitmap >> 16) & 255,
(bitmap >> 8) & 255,
-
bitmap & 255,
-
);
+
bitmap & 255
+
)
}
-
return result;
-
};
+
return result
+
}
+6 -6
example/webpack.config.js
···
-
const createConfigAsync = require('@expo/webpack-config');
-
const path = require('path');
+
const createConfigAsync = require('@expo/webpack-config')
+
const path = require('path')
module.exports = async (env, argv) => {
const config = await createConfigAsync(
···
},
},
argv
-
);
+
)
config.resolve.modules = [
path.resolve(__dirname, './node_modules'),
path.resolve(__dirname, '../node_modules'),
-
];
+
]
-
return config;
-
};
+
return config
+
}
+22 -4
package.json
···
"scripts": {
"build": "expo-module build",
"clean": "expo-module clean",
-
"lint": "expo-module lint",
+
"typecheck": "tsc",
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
"test": "expo-module test",
"prepare": "expo-module prepare",
"prepublishOnly": "expo-module prepublishOnly",
···
"homepage": "https://github.com/haileyok/expo-atproto-auth#readme",
"devDependencies": {
"@atproto/oauth-client": "^0.5.1",
+
"@eslint/compat": "^1.2.7",
+
"@eslint/eslintrc": "^3.3.0",
+
"@eslint/js": "^9.22.0",
+
"@react-native/eslint-config": "^0.78.0",
"@types/react": "~19.0.0",
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
+
"@typescript-eslint/parser": "^7.18.0",
+
"eslint": "^9.22.0",
+
"eslint-config-prettier": "^10.1.1",
+
"eslint-plugin-prettier": "^5.2.3",
"expo": "~53.0.0",
"expo-module-scripts": "^4.1.9",
+
"jest": "^29.7.0",
+
"patch-package": "^8.0.0",
+
"postinstall-postinstall": "^2.1.0",
+
"prettier": "^3.0.3",
"react-native": "0.79.1",
"react-native-mmkv": "^3.3.0"
},
···
"react-native": "*",
"react-native-mmkv": "*"
},
-
"dependencies": {
-
"patch-package": "^8.0.0",
-
"postinstall-postinstall": "^2.1.0"
+
"prettier": {
+
"quoteProps": "consistent",
+
"singleQuote": true,
+
"tabWidth": 2,
+
"trailingComma": "es5",
+
"useTabs": false,
+
"semi": false
}
}
+33 -33
src/ExpoAtprotoAuth.types.ts
···
-
import { JwtHeader } from "@atproto/oauth-client";
-
import type { StyleProp, ViewStyle } from "react-native";
+
import { JwtHeader } from '@atproto/oauth-client'
+
import type { StyleProp, ViewStyle } from 'react-native'
export type JWK = {
-
kty: string;
-
use: "sig" | "enc" | undefined;
-
crv: "P-256";
-
kid: string;
-
x: string;
-
y: string;
-
d: string | undefined;
-
alg: string;
-
};
+
kty: string
+
use: 'sig' | 'enc' | undefined
+
crv: 'P-256'
+
kid: string
+
x: string
+
y: string
+
d: string | undefined
+
alg: string
+
}
export type VerifyOptions = {
-
audience?: string;
-
clockTolerance?: number;
-
issuer?: string;
-
maxTokenAge?: number;
-
subject?: string;
-
typ?: string;
-
currentDate?: Date;
-
requiredClaims?: string[];
-
};
+
audience?: string
+
clockTolerance?: number
+
issuer?: string
+
maxTokenAge?: number
+
subject?: string
+
typ?: string
+
currentDate?: Date
+
requiredClaims?: string[]
+
}
export type VerifyResponse = {
-
payload: string;
-
protectedHeader: JwtHeader;
-
};
+
payload: string
+
protectedHeader: JwtHeader
+
}
export type OnLoadEventPayload = {
-
url: string;
-
};
+
url: string
+
}
export type ExpoAtprotoAuthModuleEvents = {
-
onChange: (params: ChangeEventPayload) => void;
-
};
+
onChange: (params: ChangeEventPayload) => void
+
}
export type ChangeEventPayload = {
-
value: string;
-
};
+
value: string
+
}
export type ExpoAtprotoAuthViewProps = {
-
url: string;
-
onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void;
-
style?: StyleProp<ViewStyle>;
-
};
+
url: string
+
onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void
+
style?: StyleProp<ViewStyle>
+
}
+9 -9
src/ExpoAtprotoAuthModule.ts
···
-
import { NativeModule, requireNativeModule } from "expo";
+
import { NativeModule, requireNativeModule } from 'expo'
-
import { ExpoAtprotoAuthModuleEvents, JWK } from "./ExpoAtprotoAuth.types";
-
import { VerifyOptions, VerifyResult } from "@atproto/oauth-client";
+
import { ExpoAtprotoAuthModuleEvents, JWK } from './ExpoAtprotoAuth.types'
+
import { VerifyOptions, VerifyResult } from '@atproto/oauth-client'
declare class ExpoAtprotoAuthModule extends NativeModule<ExpoAtprotoAuthModuleEvents> {
-
digest(data: Uint8Array, algo: string): Uint8Array;
-
getRandomValues(byteLength: number): Uint8Array;
-
generatePrivateJwk(algorithim: string): JWK;
-
createJwt(header: string, payload: string, jwk: JWK): string;
-
verifyJwt(token: string, jwk: JWK, options: VerifyOptions): VerifyResult;
+
digest(data: Uint8Array, algo: string): Uint8Array
+
getRandomValues(byteLength: number): Uint8Array
+
generatePrivateJwk(algorithim: string): JWK
+
createJwt(header: string, payload: string, jwk: JWK): string
+
verifyJwt(token: string, jwk: JWK, options: VerifyOptions): VerifyResult
}
// This call loads the native module object from the JSI.
-
export default requireNativeModule<ExpoAtprotoAuthModule>("ExpoAtprotoAuth");
+
export default requireNativeModule<ExpoAtprotoAuthModule>('ExpoAtprotoAuth')
+4 -4
src/index.ts
···
-
export { default as NativeModule } from "./ExpoAtprotoAuthModule";
-
export * from "./ExpoAtprotoAuth.types";
+
export { default as NativeModule } from './ExpoAtprotoAuthModule'
+
export * from './ExpoAtprotoAuth.types'
export {
generateJwk,
digest,
···
getRandomValues,
verifyJwt,
ReactNativeKey,
-
} from "./react-native-key";
-
export { ReactNativeOAuthClient } from "./react-native-oauth-client";
+
} from './react-native-key'
+
export { ReactNativeOAuthClient } from './react-native-oauth-client'
+36 -37
src/react-native-key.ts
···
type SignedJwt,
type VerifyOptions,
type VerifyResult,
-
} from "@atproto/oauth-client";
-
import type { JWK } from "./ExpoAtprotoAuth.types";
-
import { default as NativeModule } from "./ExpoAtprotoAuthModule";
+
} from '@atproto/oauth-client'
+
import type { JWK } from './ExpoAtprotoAuth.types'
+
import { default as NativeModule } from './ExpoAtprotoAuthModule'
export function getRandomValues(byteLength: number): Uint8Array {
-
return NativeModule.getRandomValues(byteLength);
+
return NativeModule.getRandomValues(byteLength)
}
export function digest(data: Uint8Array, algorithim: string): Uint8Array {
-
return NativeModule.digest(data, algorithim);
+
return NativeModule.digest(data, algorithim)
}
export function isECKey(jwk: any): jwk is JWK {
-
return jwk?.kty === "EC" && jwk.crv && jwk.y;
+
return jwk?.kty === 'EC' && jwk.crv && jwk.y
}
export function createJwt(
header: string,
payload: string,
-
key: ReactNativeKey,
+
key: ReactNativeKey
): string {
if (!key.privateJwk || !isECKey(key.privateJwk)) {
-
throw new Error("Invalid key");
+
throw new Error('Invalid key')
}
-
return NativeModule.createJwt(header, payload, key.privateJwk);
+
return NativeModule.createJwt(header, payload, key.privateJwk)
}
export function verifyJwt(
token: string,
jwk: JWK,
-
options: VerifyOptions,
+
options: VerifyOptions
): VerifyResult {
-
return NativeModule.verifyJwt(token, jwk, options);
+
return NativeModule.verifyJwt(token, jwk, options)
}
// @ts-expect-error
export class ReactNativeKey implements Key {
-
#jwk: Readonly<JWK>;
+
#jwk: Readonly<JWK>
constructor(jwk: Readonly<JWK>) {
-
this.#jwk = jwk;
+
this.#jwk = jwk
if (!isECKey(jwk)) {
-
throw new Error("Invalid key type");
+
throw new Error('Invalid key type')
}
if (!jwk.use) {
-
throw new Error(`Missing "use" parameter value`);
+
throw new Error(`Missing "use" parameter value`)
}
}
get jwk(): Readonly<JWK> {
-
return this.#jwk;
+
return this.#jwk
}
get isPrivate() {
-
return this.jwk.d !== undefined;
+
return this.jwk.d !== undefined
}
get privateJwk(): JWK {
-
return this.jwk;
+
return this.jwk
}
get publicJwk() {
-
if (this.isSymetric) return undefined;
-
const { d, ...publicKey } = this.jwk;
-
return publicKey as Readonly<JWK & { d?: never }>;
+
if (this.isSymetric) return undefined
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
+
const { d, ...publicKey } = this.jwk
+
return publicKey as Readonly<JWK & { d?: never }>
}
get use() {
-
return this.jwk.use as NonNullable<"sig" | "enc" | undefined>;
+
return this.jwk.use as NonNullable<'sig' | 'enc' | undefined>
}
get alg() {
-
return this.jwk.alg;
+
return this.jwk.alg
}
get kid() {
-
return this.jwk.kid;
+
return this.jwk.kid
}
get crv() {
-
return this.jwk.crv;
+
return this.jwk.crv
}
get algorithms() {
-
return [this.jwk.alg];
+
return [this.jwk.alg]
}
get bareJwk() {
···
crv: this.jwk.crv,
x: this.jwk.x,
y: this.jwk.y,
-
};
+
}
}
get isSymetric() {
-
return (
-
this.jwk.kty === "oct" && "k" in this.jwk && this.jwk.k !== undefined
-
);
+
return this.jwk.kty === 'oct' && 'k' in this.jwk && this.jwk.k !== undefined
}
async createJwt(header: JwtHeader, payload: JwtPayload): Promise<SignedJwt> {
return createJwt(
JSON.stringify(header),
JSON.stringify(payload),
-
this,
-
) as "${string}.${string}.${string}";
+
this
+
) as '${string}.${string}.${string}'
}
async verifyJwt<C extends string = never>(
token: SignedJwt,
-
options?: VerifyOptions<C>,
+
options?: VerifyOptions<C>
): Promise<VerifyResult<C>> {
return verifyJwt(
token,
this.jwk,
-
(options ?? {}) as VerifyOptions,
-
) as VerifyResult<C>;
+
(options ?? {}) as VerifyOptions
+
) as VerifyResult<C>
}
}
export function generateJwk(algoritihim: string): ReactNativeKey {
-
const privJwk = NativeModule.generatePrivateJwk(algoritihim);
-
return new ReactNativeKey(privJwk);
+
const privJwk = NativeModule.generatePrivateJwk(algoritihim)
+
return new ReactNativeKey(privJwk)
}
+27 -27
src/react-native-oauth-client.ts
···
type OAuthResponseMode,
atprotoLoopbackClientMetadata,
OAuthClient,
-
} from "@atproto/oauth-client";
-
import { ReactNativeRuntimeImplementation } from "./react-native-runtime-implementation";
-
import { ReactNativeOAuthDatabase } from "./react-native-oauth-database";
+
} from '@atproto/oauth-client'
+
import { ReactNativeRuntimeImplementation } from './react-native-runtime-implementation'
+
import { ReactNativeOAuthDatabase } from './react-native-oauth-database'
-
export type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>;
+
export type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>
export type ReactNativeOAuthClientOptions = Simplify<
{
-
clientMetadata?: Readonly<OAuthClientMetadataInput>;
-
responseMode?: Exclude<OAuthResponseMode, "form_post">;
-
fetch?: Fetch;
+
clientMetadata?: Readonly<OAuthClientMetadataInput>
+
responseMode?: Exclude<OAuthResponseMode, 'form_post'>
+
fetch?: Fetch
} & Omit<
OAuthClientOptions,
-
| "clientMetadata"
-
| "responseMode"
-
| "keyset"
-
| "fetch"
-
| "runtimeImplementation"
-
| "sessionStore"
-
| "stateStore"
-
| "didCache"
-
| "handleCache"
-
| "dpopNonceCache"
-
| "authorizationServerMetadataCache"
-
| "protectedResourceMetadataCache"
+
| 'clientMetadata'
+
| 'responseMode'
+
| 'keyset'
+
| 'fetch'
+
| 'runtimeImplementation'
+
| 'sessionStore'
+
| 'stateStore'
+
| 'didCache'
+
| 'handleCache'
+
| 'dpopNonceCache'
+
| 'authorizationServerMetadataCache'
+
| 'protectedResourceMetadataCache'
>
-
>;
+
>
export class ReactNativeOAuthClient extends OAuthClient {
constructor({
-
responseMode = "fragment",
+
responseMode = 'fragment',
...options
}: ReactNativeOAuthClientOptions) {
-
const database = new ReactNativeOAuthDatabase();
+
const database = new ReactNativeOAuthDatabase()
-
if (!["query", "fragment"].includes(responseMode)) {
-
throw new TypeError(`Invalid response mode: ${responseMode}`);
+
if (!['query', 'fragment'].includes(responseMode)) {
+
throw new TypeError(`Invalid response mode: ${responseMode}`)
}
if (!options.clientMetadata) {
-
throw new TypeError(`No client metadata provided`);
+
throw new TypeError(`No client metadata provided`)
}
super({
...options,
clientMetadata:
-
options.clientMetadata ?? atprotoLoopbackClientMetadata("localhost"), // HACK: this fixes a type error for now, look into it later
+
options.clientMetadata ?? atprotoLoopbackClientMetadata('localhost'), // HACK: this fixes a type error for now, look into it later
responseMode,
keyset: undefined,
runtimeImplementation: new ReactNativeRuntimeImplementation(),
···
database.getAuthorizationServerMetadataCache(),
protectedResourceMetadataCache:
database.getProtectedResourceMetadataCache(),
-
});
+
})
}
}
+99 -99
src/react-native-oauth-database.ts
···
Session,
TokenSet,
Key,
-
} from "@atproto/oauth-client";
-
import { type SimpleStore, type Value } from "@atproto-labs/simple-store";
-
import { MMKV } from "react-native-mmkv";
-
import { JWK } from "./ExpoAtprotoAuth.types";
-
import { ReactNativeKey } from "./react-native-key";
+
} from '@atproto/oauth-client'
+
import { type SimpleStore, type Value } from '@atproto-labs/simple-store'
+
import { MMKV } from 'react-native-mmkv'
+
import { JWK } from './ExpoAtprotoAuth.types'
+
import { ReactNativeKey } from './react-native-key'
type Item<V> = {
-
value: V;
-
expiresAt: null | number;
-
};
+
value: V
+
expiresAt: null | number
+
}
type CryptoKeyPair = {
-
publicKey: JWK;
-
privateKey: JWK;
-
};
+
publicKey: JWK
+
privateKey: JWK
+
}
type EncodedKey = {
-
keyId: string;
-
keyPair: CryptoKeyPair;
-
};
+
keyId: string
+
keyPair: CryptoKeyPair
+
}
function encodeKey(key: Key): EncodedKey {
if (!key.privateJwk || !key.publicJwk || !key.kid) {
-
throw new Error("Invalid key object");
+
throw new Error('Invalid key object')
}
const encodedKey = {
···
publicKey: key.publicJwk,
privateKey: key.privateJwk,
},
-
};
+
}
// @ts-expect-error
-
return encodedKey;
+
return encodedKey
}
async function decodeKey(encoded: EncodedKey): Promise<ReactNativeKey> {
-
console.log(encoded);
-
return new ReactNativeKey(encoded.keyPair.privateKey);
+
console.log(encoded)
+
return new ReactNativeKey(encoded.keyPair.privateKey)
}
export type Schema = {
state: Item<{
-
dpopKey: EncodedKey;
-
iss: string;
-
verifier?: string;
-
appState?: string;
-
}>;
+
dpopKey: EncodedKey
+
iss: string
+
verifier?: string
+
appState?: string
+
}>
session: Item<{
-
dpopKey: EncodedKey;
-
tokenSet: TokenSet;
-
}>;
-
didCache: Item<DidDocument>;
-
dpopNonceCache: Item<string>;
-
handleCache: Item<ResolvedHandle>;
-
authorizationServerMetadataCache: Item<OAuthAuthorizationServerMetadata>;
-
protectedResourceMetadataCache: Item<OAuthProtectedResourceMetadata>;
-
};
+
dpopKey: EncodedKey
+
tokenSet: TokenSet
+
}>
+
didCache: Item<DidDocument>
+
dpopNonceCache: Item<string>
+
handleCache: Item<ResolvedHandle>
+
authorizationServerMetadataCache: Item<OAuthAuthorizationServerMetadata>
+
protectedResourceMetadataCache: Item<OAuthProtectedResourceMetadata>
+
}
export type DatabaseStore<V extends Value> = SimpleStore<string, V> & {
-
getKeys: () => Promise<string[]>;
-
};
+
getKeys: () => Promise<string[]>
+
}
const STORES = [
-
"state",
-
"session",
-
"didCache",
-
"dpopNonceCache",
-
"handleCache",
-
"authorizationServerMetadataCaache",
-
"protectedResourceMetadataCache",
-
];
+
'state',
+
'session',
+
'didCache',
+
'dpopNonceCache',
+
'handleCache',
+
'authorizationServerMetadataCaache',
+
'protectedResourceMetadataCache',
+
]
export type ReactNativeOAuthDatabaseOptions = {
-
name?: string;
-
durability?: "strict" | "relaxed";
-
cleanupInterval?: number;
-
};
+
name?: string
+
durability?: 'strict' | 'relaxed'
+
cleanupInterval?: number
+
}
export class ReactNativeOAuthDatabase {
-
#cleanupInterval?: ReturnType<typeof setInterval>;
-
#mmkv?: MMKV;
+
#cleanupInterval?: ReturnType<typeof setInterval>
+
#mmkv?: MMKV
constructor(options?: ReactNativeOAuthDatabaseOptions) {
this.#cleanupInterval = setInterval(() => {
-
void this.cleanup();
-
}, options?.cleanupInterval ?? 30e3);
-
this.#mmkv = new MMKV({ id: "react-native-oauth-client" });
+
this.cleanup()
+
}, options?.cleanupInterval ?? 30e3)
+
this.#mmkv = new MMKV({ id: 'react-native-oauth-client' })
}
delete = async (key: string) => {
-
this.#mmkv?.delete(key);
-
this.#mmkv?.delete(`${key}.expiresAt`);
-
};
+
this.#mmkv?.delete(key)
+
this.#mmkv?.delete(`${key}.expiresAt`)
+
}
protected createStore<N extends keyof Schema, V extends Value>(
name: N,
···
decode,
expiresAt,
}: {
-
encode: (
-
value: V,
-
) => Schema[N]["value"] | PromiseLike<Schema[N]["value"]>;
-
decode: (encoded: Schema[N]["value"]) => V | PromiseLike<V>;
-
expiresAt: (value: V) => null | number;
-
},
+
encode: (value: V) => Schema[N]['value'] | PromiseLike<Schema[N]['value']>
+
decode: (encoded: Schema[N]['value']) => V | PromiseLike<V>
+
expiresAt: (value: V) => null | number
+
}
): DatabaseStore<V> {
return {
get: async (key) => {
-
console.log(`getting ${name}.${key}`);
-
const item = this.#mmkv?.getString(`${name}.${key}`);
+
console.log(`getting ${name}.${key}`)
+
const item = this.#mmkv?.getString(`${name}.${key}`)
-
if (item === undefined) return undefined;
+
if (item === undefined) return undefined
-
const expiresAt = this.#mmkv?.getNumber(`${name}.${key}.expiresAt`);
-
if (expiresAt && expiresAt < Date.now()) {
-
await this.delete(`${name}.${key}`);
-
return undefined;
+
const storedExpiresAt = this.#mmkv?.getNumber(
+
`${name}.${key}.expiresAt`
+
)
+
if (storedExpiresAt && storedExpiresAt < Date.now()) {
+
await this.delete(`${name}.${key}`)
+
return undefined
}
-
const res = decode(JSON.parse(item));
-
console.log(res);
-
return res;
+
const res = decode(JSON.parse(item))
+
console.log(res)
+
return res
},
getKeys: async () => {
-
const keys = this.#mmkv?.getAllKeys() ?? [];
-
return keys.filter((key) => key.startsWith(`${name}.`));
+
const keys = this.#mmkv?.getAllKeys() ?? []
+
return keys.filter((key) => key.startsWith(`${name}.`))
},
set: async (key, value) => {
-
let encoded = await encode(value);
-
encoded = JSON.stringify(encoded);
+
let encoded = await encode(value)
+
encoded = JSON.stringify(encoded)
-
const _expiresAt = expiresAt(value);
+
const _expiresAt = expiresAt(value)
-
this.#mmkv?.set(`${name}.${key}`, encoded);
+
this.#mmkv?.set(`${name}.${key}`, encoded)
if (_expiresAt) {
-
this.#mmkv?.set(`${name}.${key}.expiresAt`, _expiresAt);
+
this.#mmkv?.set(`${name}.${key}.expiresAt`, _expiresAt)
}
},
del: async (key) => {
-
await this.delete(`${name}.${key}`);
+
await this.delete(`${name}.${key}`)
},
-
};
+
}
}
getSessionStore(): DatabaseStore<Session> {
-
return this.createStore("session", {
+
return this.createStore('session', {
expiresAt: ({ tokenSet }) =>
tokenSet.refresh_token || tokenSet.expires_at == null
? null
···
...encoded,
dpopKey: await decodeKey(dpopKey),
}),
-
});
+
})
}
getStateStore(): DatabaseStore<InternalStateData> {
-
return this.createStore("state", {
+
return this.createStore('state', {
expiresAt: (_value) => Date.now() + 10 * 60e3,
encode: ({ dpopKey, ...session }) => ({
...session,
···
...encoded,
dpopKey: await decodeKey(dpopKey),
}),
-
});
+
})
}
getDpopNonceCache(): undefined | DatabaseStore<string> {
-
return this.createStore("dpopNonceCache", {
+
return this.createStore('dpopNonceCache', {
expiresAt: (_value) => Date.now() + 600e3,
encode: (value) => value,
decode: (encoded) => encoded,
-
});
+
})
}
getDidCache(): undefined | DatabaseStore<DidDocument> {
-
return this.createStore("didCache", {
+
return this.createStore('didCache', {
expiresAt: (_value) => Date.now() + 60e3,
encode: (value) => value,
decode: (encoded) => encoded,
-
});
+
})
}
getHandleCache(): undefined | DatabaseStore<ResolvedHandle> {
-
return this.createStore("handleCache", {
+
return this.createStore('handleCache', {
expiresAt: (_value) => Date.now() + 60e3,
encode: (value) => value,
decode: (encoded) => encoded,
-
});
+
})
}
getAuthorizationServerMetadataCache():
| undefined
| DatabaseStore<OAuthAuthorizationServerMetadata> {
-
return this.createStore("authorizationServerMetadataCache", {
+
return this.createStore('authorizationServerMetadataCache', {
expiresAt: (_value) => Date.now() + 60e3,
encode: (value) => value,
decode: (encoded) => encoded,
-
});
+
})
}
getProtectedResourceMetadataCache():
| undefined
| DatabaseStore<OAuthProtectedResourceMetadata> {
-
return this.createStore("protectedResourceMetadataCache", {
+
return this.createStore('protectedResourceMetadataCache', {
expiresAt: (_value) => Date.now() + 60e3,
encode: (value) => value,
decode: (encoded) => encoded,
-
});
+
})
}
async cleanup() {
for (const name of STORES) {
-
const keys = this.#mmkv?.getAllKeys() ?? [];
+
const keys = this.#mmkv?.getAllKeys() ?? []
for (const key of keys) {
if (key.startsWith(`${name}.`)) {
-
const expiresAt = this.#mmkv?.getNumber(`${name}.${key}.expiresAt`);
+
const expiresAt = this.#mmkv?.getNumber(`${name}.${key}.expiresAt`)
if (expiresAt && Number(expiresAt) < Date.now()) {
-
this.#mmkv?.delete(key);
-
this.#mmkv?.delete(`${name}.${key}.expiresAt`);
+
this.#mmkv?.delete(key)
+
this.#mmkv?.delete(`${name}.${key}.expiresAt`)
}
}
}
···
}
async [Symbol.asyncDispose]() {
-
clearInterval(this.#cleanupInterval);
+
clearInterval(this.#cleanupInterval)
}
}
+11 -11
src/react-native-runtime-implementation.ts
···
-
import type { Key, RuntimeImplementation } from "@atproto/oauth-client";
-
import { default as NativeModule } from "./ExpoAtprotoAuthModule";
-
import { generateJwk } from "./react-native-key";
+
import type { Key, RuntimeImplementation } from '@atproto/oauth-client'
+
import { default as NativeModule } from './ExpoAtprotoAuthModule'
+
import { generateJwk } from './react-native-key'
export class ReactNativeRuntimeImplementation implements RuntimeImplementation {
async createKey(algs: string[]): Promise<Key> {
-
if (!algs.includes("ES256")) {
-
throw TypeError("ES256 is the only supported algo");
+
if (!algs.includes('ES256')) {
+
throw TypeError('ES256 is the only supported algo')
}
// @ts-expect-error TODO:
-
return generateJwk("ES256");
+
return generateJwk('ES256')
}
getRandomValues(length: number): Uint8Array | PromiseLike<Uint8Array> {
-
return NativeModule.getRandomValues(length);
+
return NativeModule.getRandomValues(length)
}
digest(
bytes: Uint8Array,
-
algorithim: { name: string },
+
algorithim: { name: string }
): Uint8Array | PromiseLike<Uint8Array> {
-
if (algorithim.name == "sha256") {
-
return NativeModule.digest(bytes, algorithim.name);
+
if (algorithim.name === 'sha256') {
+
return NativeModule.digest(bytes, algorithim.name)
}
-
throw new TypeError(`Unsupported algorithim: ${algorithim.name}`);
+
throw new TypeError(`Unsupported algorithim: ${algorithim.name}`)
}
}
+1159 -33
yarn.lock
···
dependencies:
"@babel/highlight" "^7.10.4"
-
"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.27.1":
+
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
···
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790"
integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==
-
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.25.2":
+
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.23.9", "@babel/core@^7.25.2":
version "7.28.0"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4"
integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==
···
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
+
semver "^6.3.1"
+
+
"@babel/eslint-parser@^7.25.1":
+
version "7.28.0"
+
resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.28.0.tgz#c1b3fbba070f5bac32e3d02f244201add4afdd6e"
+
integrity sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==
+
dependencies:
+
"@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
+
eslint-visitor-keys "^2.1.0"
semver "^6.3.1"
"@babel/generator@^7.20.5", "@babel/generator@^7.25.0", "@babel/generator@^7.28.0", "@babel/generator@^7.7.2":
···
js-tokens "^4.0.0"
picocolors "^1.0.0"
-
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.27.2", "@babel/parser@^7.28.0":
+
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.3", "@babel/parser@^7.27.2", "@babel/parser@^7.28.0":
version "7.28.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e"
integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==
···
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
-
"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.5.0", "@eslint-community/eslint-utils@^4.7.0":
+
"@bcoe/v8-coverage@^0.2.3":
+
version "0.2.3"
+
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+
"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.5.0", "@eslint-community/eslint-utils@^4.7.0":
version "4.7.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a"
integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==
dependencies:
eslint-visitor-keys "^3.4.3"
-
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0":
+
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.12.1":
version "4.12.1"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
+
+
"@eslint/compat@^1.2.7":
+
version "1.3.1"
+
resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.3.1.tgz#19f62ee48896d38f8eab591bee2a25dd69abc273"
+
integrity sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==
+
+
"@eslint/config-array@^0.21.0":
+
version "0.21.0"
+
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636"
+
integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==
+
dependencies:
+
"@eslint/object-schema" "^2.1.6"
+
debug "^4.3.1"
+
minimatch "^3.1.2"
+
+
"@eslint/config-helpers@^0.3.0":
+
version "0.3.0"
+
resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286"
+
integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==
+
+
"@eslint/core@^0.15.0", "@eslint/core@^0.15.1":
+
version "0.15.1"
+
resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.1.tgz#d530d44209cbfe2f82ef86d6ba08760196dd3b60"
+
integrity sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==
+
dependencies:
+
"@types/json-schema" "^7.0.15"
+
+
"@eslint/eslintrc@^3.3.0", "@eslint/eslintrc@^3.3.1":
+
version "3.3.1"
+
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964"
+
integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==
+
dependencies:
+
ajv "^6.12.4"
+
debug "^4.3.2"
+
espree "^10.0.1"
+
globals "^14.0.0"
+
ignore "^5.2.0"
+
import-fresh "^3.2.1"
+
js-yaml "^4.1.0"
+
minimatch "^3.1.2"
+
strip-json-comments "^3.1.1"
+
+
"@eslint/js@9.31.0", "@eslint/js@^9.22.0":
+
version "9.31.0"
+
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.31.0.tgz#adb1f39953d8c475c4384b67b67541b0d7206ed8"
+
integrity sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==
+
+
"@eslint/object-schema@^2.1.6":
+
version "2.1.6"
+
resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f"
+
integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==
+
+
"@eslint/plugin-kit@^0.3.1":
+
version "0.3.3"
+
resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz#32926b59bd407d58d817941e48b2a7049359b1fd"
+
integrity sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==
+
dependencies:
+
"@eslint/core" "^0.15.1"
+
levn "^0.4.1"
"@expo/cli@0.24.20":
version "0.24.20"
···
find-up "^5.0.0"
js-yaml "^4.1.0"
+
"@humanfs/core@^0.19.1":
+
version "0.19.1"
+
resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
+
integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==
+
+
"@humanfs/node@^0.16.6":
+
version "0.16.6"
+
resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e"
+
integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==
+
dependencies:
+
"@humanfs/core" "^0.19.1"
+
"@humanwhocodes/retry" "^0.3.0"
+
+
"@humanwhocodes/module-importer@^1.0.1":
+
version "1.0.1"
+
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+
"@humanwhocodes/retry@^0.3.0":
+
version "0.3.1"
+
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a"
+
integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
+
+
"@humanwhocodes/retry@^0.4.2":
+
version "0.4.3"
+
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba"
+
integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
···
js-yaml "^3.13.1"
resolve-from "^5.0.0"
-
"@istanbuljs/schema@^0.1.2":
+
"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
···
jest-util "^29.7.0"
slash "^3.0.0"
+
"@jest/core@^29.7.0":
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f"
+
integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==
+
dependencies:
+
"@jest/console" "^29.7.0"
+
"@jest/reporters" "^29.7.0"
+
"@jest/test-result" "^29.7.0"
+
"@jest/transform" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
"@types/node" "*"
+
ansi-escapes "^4.2.1"
+
chalk "^4.0.0"
+
ci-info "^3.2.0"
+
exit "^0.1.2"
+
graceful-fs "^4.2.9"
+
jest-changed-files "^29.7.0"
+
jest-config "^29.7.0"
+
jest-haste-map "^29.7.0"
+
jest-message-util "^29.7.0"
+
jest-regex-util "^29.6.3"
+
jest-resolve "^29.7.0"
+
jest-resolve-dependencies "^29.7.0"
+
jest-runner "^29.7.0"
+
jest-runtime "^29.7.0"
+
jest-snapshot "^29.7.0"
+
jest-util "^29.7.0"
+
jest-validate "^29.7.0"
+
jest-watcher "^29.7.0"
+
micromatch "^4.0.4"
+
pretty-format "^29.7.0"
+
slash "^3.0.0"
+
strip-ansi "^6.0.0"
+
"@jest/create-cache-key-function@^29.2.1", "@jest/create-cache-key-function@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0"
···
jest-mock "^29.7.0"
jest-util "^29.7.0"
-
"@jest/globals@^29.2.1":
+
"@jest/globals@^29.2.1", "@jest/globals@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d"
integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==
···
"@jest/types" "^29.6.3"
jest-mock "^29.7.0"
+
"@jest/reporters@^29.7.0":
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7"
+
integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==
+
dependencies:
+
"@bcoe/v8-coverage" "^0.2.3"
+
"@jest/console" "^29.7.0"
+
"@jest/test-result" "^29.7.0"
+
"@jest/transform" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
"@jridgewell/trace-mapping" "^0.3.18"
+
"@types/node" "*"
+
chalk "^4.0.0"
+
collect-v8-coverage "^1.0.0"
+
exit "^0.1.2"
+
glob "^7.1.3"
+
graceful-fs "^4.2.9"
+
istanbul-lib-coverage "^3.0.0"
+
istanbul-lib-instrument "^6.0.0"
+
istanbul-lib-report "^3.0.0"
+
istanbul-lib-source-maps "^4.0.0"
+
istanbul-reports "^3.1.3"
+
jest-message-util "^29.7.0"
+
jest-util "^29.7.0"
+
jest-worker "^29.7.0"
+
slash "^3.0.0"
+
string-length "^4.0.1"
+
strip-ansi "^6.0.0"
+
v8-to-istanbul "^9.0.1"
+
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
dependencies:
"@sinclair/typebox" "^0.27.8"
+
+
"@jest/source-map@^29.6.3":
+
version "29.6.3"
+
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4"
+
integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==
+
dependencies:
+
"@jridgewell/trace-mapping" "^0.3.18"
+
callsites "^3.0.0"
+
graceful-fs "^4.2.9"
"@jest/test-result@^29.7.0":
version "29.7.0"
···
"@jest/types" "^29.6.3"
"@types/istanbul-lib-coverage" "^2.0.0"
collect-v8-coverage "^1.0.0"
+
+
"@jest/test-sequencer@^29.7.0":
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce"
+
integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==
+
dependencies:
+
"@jest/test-result" "^29.7.0"
+
graceful-fs "^4.2.9"
+
jest-haste-map "^29.7.0"
+
slash "^3.0.0"
"@jest/transform@^29.7.0":
version "29.7.0"
···
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7"
integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==
-
"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28":
+
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28":
version "0.3.29"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz#a58d31eaadaf92c6695680b2e1d464a9b8fbf7fc"
integrity sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==
···
version "2.1.8-no-fsevents.3"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"
integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==
+
+
"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1":
+
version "5.1.1-v1"
+
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129"
+
integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==
+
dependencies:
+
eslint-scope "5.1.1"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
···
serve-static "^1.16.2"
ws "^6.2.3"
+
"@react-native/eslint-config@^0.78.0":
+
version "0.78.3"
+
resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.78.3.tgz#281b09c3519b444cca40e8d54da11afef2d70ca9"
+
integrity sha512-YcJsVfOHLgA9OXTfHPV0dSSVhk9Ceu+WzNl8m3mBB8oejEdkjM9VBDrArg64AGCzdRLAMbgiUrWy7vI47yNbmQ==
+
dependencies:
+
"@babel/core" "^7.25.2"
+
"@babel/eslint-parser" "^7.25.1"
+
"@react-native/eslint-plugin" "0.78.3"
+
"@typescript-eslint/eslint-plugin" "^7.1.1"
+
"@typescript-eslint/parser" "^7.1.1"
+
eslint-config-prettier "^8.5.0"
+
eslint-plugin-eslint-comments "^3.2.0"
+
eslint-plugin-ft-flow "^2.0.1"
+
eslint-plugin-jest "^27.9.0"
+
eslint-plugin-react "^7.30.1"
+
eslint-plugin-react-hooks "^4.6.0"
+
eslint-plugin-react-native "^4.0.0"
+
+
"@react-native/eslint-plugin@0.78.3":
+
version "0.78.3"
+
resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.78.3.tgz#2ccfecc2d9d56d718dea74585107dda16017d442"
+
integrity sha512-PvFAL9J/Jk93K5ibr5Cj5RfiYdMJNqPej6NcDoOSj1kalM6fE22dHxnxF9A1/YApN1F972n+tW16T1+c4F9opw==
+
"@react-native/gradle-plugin@0.79.1":
version "0.79.1"
resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.1.tgz#b533024ac1930a826b225fed8fbf94d7f768afe9"
···
dependencies:
"@babel/types" "^7.20.7"
+
"@types/estree@^1.0.6":
+
version "1.0.8"
+
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
+
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
+
"@types/graceful-fs@^4.1.3":
version "4.1.9"
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
···
dependencies:
"@types/node" "*"
-
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
···
"@types/tough-cookie" "*"
parse5 "^7.0.0"
+
"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9":
+
version "7.0.15"
+
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
+
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
···
dependencies:
csstype "^3.0.2"
+
"@types/semver@^7.3.12":
+
version "7.7.0"
+
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e"
+
integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==
+
"@types/stack-utils@^2.0.0":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
···
dependencies:
"@types/yargs-parser" "*"
+
"@typescript-eslint/eslint-plugin@^7.1.1", "@typescript-eslint/eslint-plugin@^7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3"
+
integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==
+
dependencies:
+
"@eslint-community/regexpp" "^4.10.0"
+
"@typescript-eslint/scope-manager" "7.18.0"
+
"@typescript-eslint/type-utils" "7.18.0"
+
"@typescript-eslint/utils" "7.18.0"
+
"@typescript-eslint/visitor-keys" "7.18.0"
+
graphemer "^1.4.0"
+
ignore "^5.3.1"
+
natural-compare "^1.4.0"
+
ts-api-utils "^1.3.0"
+
"@typescript-eslint/eslint-plugin@^8.29.1":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.37.0.tgz#332392883f936137cd6252c8eb236d298e514e70"
···
natural-compare "^1.4.0"
ts-api-utils "^2.1.0"
+
"@typescript-eslint/parser@^7.1.1", "@typescript-eslint/parser@^7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0"
+
integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==
+
dependencies:
+
"@typescript-eslint/scope-manager" "7.18.0"
+
"@typescript-eslint/types" "7.18.0"
+
"@typescript-eslint/typescript-estree" "7.18.0"
+
"@typescript-eslint/visitor-keys" "7.18.0"
+
debug "^4.3.4"
+
"@typescript-eslint/parser@^8.29.1":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.37.0.tgz#b87f6b61e25ad5cc5bbf8baf809b8da889c89804"
···
"@typescript-eslint/types" "^8.37.0"
debug "^4.3.4"
+
"@typescript-eslint/scope-manager@5.62.0":
+
version "5.62.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
+
integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
+
dependencies:
+
"@typescript-eslint/types" "5.62.0"
+
"@typescript-eslint/visitor-keys" "5.62.0"
+
+
"@typescript-eslint/scope-manager@7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83"
+
integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==
+
dependencies:
+
"@typescript-eslint/types" "7.18.0"
+
"@typescript-eslint/visitor-keys" "7.18.0"
+
"@typescript-eslint/scope-manager@8.37.0":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.37.0.tgz#a31a3c80ca2ef4ed58de13742debb692e7d4c0a4"
···
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.37.0.tgz#47a2760d265c6125f8e7864bc5c8537cad2bd053"
integrity sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==
+
"@typescript-eslint/type-utils@7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b"
+
integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==
+
dependencies:
+
"@typescript-eslint/typescript-estree" "7.18.0"
+
"@typescript-eslint/utils" "7.18.0"
+
debug "^4.3.4"
+
ts-api-utils "^1.3.0"
+
"@typescript-eslint/type-utils@8.37.0":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.37.0.tgz#2a682e4c6ff5886712dad57e9787b5e417124507"
···
debug "^4.3.4"
ts-api-utils "^2.1.0"
+
"@typescript-eslint/types@5.62.0":
+
version "5.62.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
+
integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+
+
"@typescript-eslint/types@7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9"
+
integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
+
"@typescript-eslint/types@8.37.0", "@typescript-eslint/types@^8.37.0":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.37.0.tgz#09517aa9625eb3c68941dde3ac8835740587b6ff"
integrity sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==
+
+
"@typescript-eslint/typescript-estree@5.62.0":
+
version "5.62.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
+
integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
+
dependencies:
+
"@typescript-eslint/types" "5.62.0"
+
"@typescript-eslint/visitor-keys" "5.62.0"
+
debug "^4.3.4"
+
globby "^11.1.0"
+
is-glob "^4.0.3"
+
semver "^7.3.7"
+
tsutils "^3.21.0"
+
+
"@typescript-eslint/typescript-estree@7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931"
+
integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==
+
dependencies:
+
"@typescript-eslint/types" "7.18.0"
+
"@typescript-eslint/visitor-keys" "7.18.0"
+
debug "^4.3.4"
+
globby "^11.1.0"
+
is-glob "^4.0.3"
+
minimatch "^9.0.4"
+
semver "^7.6.0"
+
ts-api-utils "^1.3.0"
"@typescript-eslint/typescript-estree@8.37.0":
version "8.37.0"
···
semver "^7.6.0"
ts-api-utils "^2.1.0"
+
"@typescript-eslint/utils@7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f"
+
integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==
+
dependencies:
+
"@eslint-community/eslint-utils" "^4.4.0"
+
"@typescript-eslint/scope-manager" "7.18.0"
+
"@typescript-eslint/types" "7.18.0"
+
"@typescript-eslint/typescript-estree" "7.18.0"
+
"@typescript-eslint/utils@8.37.0":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.37.0.tgz#189ea59b2709f5d898614611f091a776751ee335"
···
"@typescript-eslint/types" "8.37.0"
"@typescript-eslint/typescript-estree" "8.37.0"
+
"@typescript-eslint/utils@^5.10.0":
+
version "5.62.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
+
integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
+
dependencies:
+
"@eslint-community/eslint-utils" "^4.2.0"
+
"@types/json-schema" "^7.0.9"
+
"@types/semver" "^7.3.12"
+
"@typescript-eslint/scope-manager" "5.62.0"
+
"@typescript-eslint/types" "5.62.0"
+
"@typescript-eslint/typescript-estree" "5.62.0"
+
eslint-scope "^5.1.1"
+
semver "^7.3.7"
+
+
"@typescript-eslint/visitor-keys@5.62.0":
+
version "5.62.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
+
integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
+
dependencies:
+
"@typescript-eslint/types" "5.62.0"
+
eslint-visitor-keys "^3.3.0"
+
+
"@typescript-eslint/visitor-keys@7.18.0":
+
version "7.18.0"
+
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7"
+
integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==
+
dependencies:
+
"@typescript-eslint/types" "7.18.0"
+
eslint-visitor-keys "^3.4.3"
+
"@typescript-eslint/visitor-keys@8.37.0":
version "8.37.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.37.0.tgz#cdb6a6bd3e8d6dd69bd70c1bdda36e2d18737455"
···
acorn "^8.1.0"
acorn-walk "^8.0.2"
+
acorn-jsx@^5.3.2:
+
version "5.3.2"
+
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
acorn-loose@^8.3.0:
version "8.5.2"
resolved "https://registry.yarnpkg.com/acorn-loose/-/acorn-loose-8.5.2.tgz#a7cc7dfbb7c8f3c2e55b055db640dc657e278d26"
···
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
+
ajv@^6.12.4:
+
version "6.12.6"
+
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+
dependencies:
+
fast-deep-equal "^3.1.1"
+
fast-json-stable-stringify "^2.0.0"
+
json-schema-traverse "^0.4.1"
+
uri-js "^4.2.2"
+
anser@^1.4.9:
version "1.4.10"
resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b"
···
get-intrinsic "^1.3.0"
is-string "^1.1.1"
math-intrinsics "^1.1.0"
+
+
array-union@^2.1.0:
+
version "2.1.0"
+
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
array.prototype.findlast@^1.2.5:
version "1.2.5"
···
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==
+
callsites@^3.0.0:
+
version "3.1.0"
+
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
···
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
cjs-module-lexer@^1.0.0:
+
version "1.4.3"
+
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d"
+
integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==
+
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
···
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
co@^4.6.0:
+
version "4.6.0"
+
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
collect-v8-coverage@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
···
js-yaml "^3.13.1"
parse-json "^4.0.0"
+
create-jest@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320"
+
integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==
+
dependencies:
+
"@jest/types" "^29.6.3"
+
chalk "^4.0.0"
+
exit "^0.1.2"
+
graceful-fs "^4.2.9"
+
jest-config "^29.7.0"
+
jest-util "^29.7.0"
+
prompts "^2.0.1"
+
cross-spawn@^7.0.3, cross-spawn@^7.0.6:
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
···
dependencies:
ms "2.0.0"
-
debug@4, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1:
+
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1:
version "4.4.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
···
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a"
integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==
+
dedent@^1.0.0:
+
version "1.6.0"
+
resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2"
+
integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==
+
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
deepmerge@^4.3.1:
+
deep-is@^0.1.3:
+
version "0.1.4"
+
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+
deepmerge@^4.2.2, deepmerge@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
···
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
+
detect-newline@^3.0.0:
+
version "3.1.0"
+
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
diff-sequences@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
+
dir-glob@^3.0.1:
+
version "3.0.1"
+
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+
integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+
dependencies:
+
path-type "^4.0.0"
+
doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
···
dependencies:
semver "^7.5.4"
+
eslint-config-prettier@^10.1.1:
+
version "10.1.5"
+
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782"
+
integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==
+
+
eslint-config-prettier@^8.5.0:
+
version "8.10.0"
+
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11"
+
integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==
+
eslint-config-prettier@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
···
eslint-utils "^2.0.0"
regexpp "^3.0.0"
+
eslint-plugin-eslint-comments@^3.2.0:
+
version "3.2.0"
+
resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa"
+
integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
+
dependencies:
+
escape-string-regexp "^1.0.5"
+
ignore "^5.0.5"
+
+
eslint-plugin-ft-flow@^2.0.1:
+
version "2.0.3"
+
resolved "https://registry.yarnpkg.com/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz#3b3c113c41902bcbacf0e22b536debcfc3c819e8"
+
integrity sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg==
+
dependencies:
+
lodash "^4.17.21"
+
string-natural-compare "^3.0.1"
+
eslint-plugin-import@^2.31.0:
version "2.32.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980"
···
string.prototype.trimend "^1.0.9"
tsconfig-paths "^3.15.0"
+
eslint-plugin-jest@^27.9.0:
+
version "27.9.0"
+
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b"
+
integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==
+
dependencies:
+
"@typescript-eslint/utils" "^5.10.0"
+
eslint-plugin-n@^17.17.0:
version "17.21.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-17.21.0.tgz#6b1833e5e8fd07a69bbab2be429771ff2309db5e"
···
resolve "^1.10.1"
semver "^6.1.0"
-
eslint-plugin-prettier@^5.2.6:
+
eslint-plugin-prettier@^5.2.3, eslint-plugin-prettier@^5.2.6:
version "5.5.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz#470820964de9aedb37e9ce62c3266d2d26d08d15"
integrity sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==
···
prettier-linter-helpers "^1.0.0"
synckit "^0.11.7"
+
eslint-plugin-react-hooks@^4.6.0:
+
version "4.6.2"
+
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596"
+
integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==
+
eslint-plugin-react-hooks@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3"
integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==
-
eslint-plugin-react@^7.37.5:
+
eslint-plugin-react-native-globals@^0.1.1:
+
version "0.1.2"
+
resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2"
+
integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==
+
+
eslint-plugin-react-native@^4.0.0:
+
version "4.1.0"
+
resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz#5343acd3b2246bc1b857ac38be708f070d18809f"
+
integrity sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==
+
dependencies:
+
eslint-plugin-react-native-globals "^0.1.1"
+
+
eslint-plugin-react@^7.30.1, eslint-plugin-react@^7.37.5:
version "7.37.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065"
integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==
···
string.prototype.matchall "^4.0.12"
string.prototype.repeat "^1.0.0"
+
eslint-scope@5.1.1, eslint-scope@^5.1.1:
+
version "5.1.1"
+
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+
dependencies:
+
esrecurse "^4.3.0"
+
estraverse "^4.1.1"
+
+
eslint-scope@^8.4.0:
+
version "8.4.0"
+
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82"
+
integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==
+
dependencies:
+
esrecurse "^4.3.0"
+
estraverse "^5.2.0"
+
eslint-utils@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
···
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
-
eslint-visitor-keys@^3.4.3:
+
eslint-visitor-keys@^2.1.0:
+
version "2.1.0"
+
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
···
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
+
eslint@^9.22.0:
+
version "9.31.0"
+
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.31.0.tgz#9a488e6da75bbe05785cd62e43c5ea99356d21ba"
+
integrity sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==
+
dependencies:
+
"@eslint-community/eslint-utils" "^4.2.0"
+
"@eslint-community/regexpp" "^4.12.1"
+
"@eslint/config-array" "^0.21.0"
+
"@eslint/config-helpers" "^0.3.0"
+
"@eslint/core" "^0.15.0"
+
"@eslint/eslintrc" "^3.3.1"
+
"@eslint/js" "9.31.0"
+
"@eslint/plugin-kit" "^0.3.1"
+
"@humanfs/node" "^0.16.6"
+
"@humanwhocodes/module-importer" "^1.0.1"
+
"@humanwhocodes/retry" "^0.4.2"
+
"@types/estree" "^1.0.6"
+
"@types/json-schema" "^7.0.15"
+
ajv "^6.12.4"
+
chalk "^4.0.0"
+
cross-spawn "^7.0.6"
+
debug "^4.3.2"
+
escape-string-regexp "^4.0.0"
+
eslint-scope "^8.4.0"
+
eslint-visitor-keys "^4.2.1"
+
espree "^10.4.0"
+
esquery "^1.5.0"
+
esutils "^2.0.2"
+
fast-deep-equal "^3.1.3"
+
file-entry-cache "^8.0.0"
+
find-up "^5.0.0"
+
glob-parent "^6.0.2"
+
ignore "^5.2.0"
+
imurmurhash "^0.1.4"
+
is-glob "^4.0.0"
+
json-stable-stringify-without-jsonify "^1.0.1"
+
lodash.merge "^4.6.2"
+
minimatch "^3.1.2"
+
natural-compare "^1.4.0"
+
optionator "^0.9.3"
+
+
espree@^10.0.1, espree@^10.4.0:
+
version "10.4.0"
+
resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837"
+
integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==
+
dependencies:
+
acorn "^8.15.0"
+
acorn-jsx "^5.3.2"
+
eslint-visitor-keys "^4.2.1"
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
estraverse@^5.2.0, estraverse@^5.3.0:
+
esquery@^1.5.0:
+
version "1.6.0"
+
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
+
integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
+
dependencies:
+
estraverse "^5.1.0"
+
+
esrecurse@^4.3.0:
+
version "4.3.0"
+
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+
integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+
dependencies:
+
estraverse "^5.2.0"
+
+
estraverse@^4.1.1:
+
version "4.3.0"
+
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+
estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
···
version "2.2.0"
resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301"
integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==
+
+
execa@^5.0.0:
+
version "5.1.1"
+
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+
dependencies:
+
cross-spawn "^7.0.3"
+
get-stream "^6.0.0"
+
human-signals "^2.1.0"
+
is-stream "^2.0.0"
+
merge-stream "^2.0.0"
+
npm-run-path "^4.0.1"
+
onetime "^5.1.2"
+
signal-exit "^3.0.3"
+
strip-final-newline "^2.0.0"
+
+
exit@^0.1.2:
+
version "0.1.2"
+
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
expect@^29.0.0, expect@^29.7.0:
version "29.7.0"
···
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91"
integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+
version "3.1.3"
+
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
fast-diff@^1.1.2:
version "1.3.0"
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0"
integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
-
fast-glob@^3.3.2:
+
fast-glob@^3.2.9, fast-glob@^3.3.2:
version "3.3.3"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
···
merge2 "^1.3.0"
micromatch "^4.0.8"
-
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0:
+
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+
fast-levenshtein@^2.0.6:
+
version "2.0.6"
+
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fastq@^1.6.0:
version "1.19.1"
···
dependencies:
bser "2.1.1"
+
file-entry-cache@^8.0.0:
+
version "8.0.0"
+
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+
integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
+
dependencies:
+
flat-cache "^4.0.0"
+
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
···
statuses "~1.5.0"
unpipe "~1.0.0"
-
find-up@^4.1.0:
+
find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
···
integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==
dependencies:
micromatch "^4.0.2"
+
+
flat-cache@^4.0.0:
+
version "4.0.1"
+
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
+
integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
+
dependencies:
+
flatted "^3.2.9"
+
keyv "^4.5.4"
+
+
flatted@^3.2.9:
+
version "3.3.3"
+
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"
+
integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
flow-enums-runtime@^0.0.6:
version "0.0.6"
···
dunder-proto "^1.0.1"
es-object-atoms "^1.0.0"
+
get-stream@^6.0.0:
+
version "6.0.1"
+
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
get-symbol-description@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee"
···
dependencies:
is-glob "^4.0.1"
+
glob-parent@^6.0.2:
+
version "6.0.2"
+
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+
integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+
dependencies:
+
is-glob "^4.0.3"
+
glob@^10.3.10, glob@^10.4.2:
version "10.4.5"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
···
minimatch "^3.1.1"
once "^1.3.0"
path-is-absolute "^1.0.0"
+
+
globals@^14.0.0:
+
version "14.0.0"
+
resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
+
integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
globals@^15.11.0:
version "15.15.0"
···
define-properties "^1.2.1"
gopd "^1.0.1"
+
globby@^11.1.0:
+
version "11.1.0"
+
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+
dependencies:
+
array-union "^2.1.0"
+
dir-glob "^3.0.1"
+
fast-glob "^3.2.9"
+
ignore "^5.2.0"
+
merge2 "^1.4.1"
+
slash "^3.0.0"
+
gopd@^1.0.1, gopd@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
···
dependencies:
whatwg-encoding "^2.0.0"
+
html-escaper@^2.0.0:
+
version "2.0.2"
+
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
http-errors@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
···
agent-base "^7.1.2"
debug "4"
+
human-signals@^2.1.0:
+
version "2.1.0"
+
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
iconv-lite@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
···
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
ignore@^5.1.1, ignore@^5.3.1, ignore@^5.3.2:
+
ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1, ignore@^5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
···
caller-path "^2.0.0"
resolve-from "^3.0.0"
+
import-fresh@^3.2.1:
+
version "3.3.1"
+
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+
integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+
dependencies:
+
parent-module "^1.0.0"
+
resolve-from "^4.0.0"
+
+
import-local@^3.0.2:
+
version "3.2.0"
+
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260"
+
integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==
+
dependencies:
+
pkg-dir "^4.2.0"
+
resolve-cwd "^3.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
···
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
is-generator-fn@^2.0.0:
+
version "2.1.0"
+
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
is-generator-function@^1.0.10:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca"
···
has-tostringtag "^1.0.2"
safe-regex-test "^1.1.0"
-
is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
···
dependencies:
call-bound "^1.0.3"
+
is-stream@^2.0.0:
+
version "2.0.1"
+
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
is-string@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9"
···
resolved "https://registry.yarnpkg.com/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz#2daa80d2900b7a954f9f731d42f96ee0c19a6895"
integrity sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==
-
istanbul-lib-coverage@^3.2.0:
+
istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
···
istanbul-lib-coverage "^3.2.0"
semver "^6.3.0"
+
istanbul-lib-instrument@^6.0.0:
+
version "6.0.3"
+
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765"
+
integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==
+
dependencies:
+
"@babel/core" "^7.23.9"
+
"@babel/parser" "^7.23.9"
+
"@istanbuljs/schema" "^0.1.3"
+
istanbul-lib-coverage "^3.2.0"
+
semver "^7.5.4"
+
+
istanbul-lib-report@^3.0.0:
+
version "3.0.1"
+
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
+
integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+
dependencies:
+
istanbul-lib-coverage "^3.0.0"
+
make-dir "^4.0.0"
+
supports-color "^7.1.0"
+
+
istanbul-lib-source-maps@^4.0.0:
+
version "4.0.1"
+
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+
integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+
dependencies:
+
debug "^4.1.1"
+
istanbul-lib-coverage "^3.0.0"
+
source-map "^0.6.1"
+
+
istanbul-reports@^3.1.3:
+
version "3.1.7"
+
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
+
integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
+
dependencies:
+
html-escaper "^2.0.0"
+
istanbul-lib-report "^3.0.0"
+
iterator.prototype@^1.1.4:
version "1.1.5"
resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39"
···
optionalDependencies:
"@pkgjs/parseargs" "^0.11.0"
+
jest-changed-files@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
+
integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==
+
dependencies:
+
execa "^5.0.0"
+
jest-util "^29.7.0"
+
p-limit "^3.1.0"
+
+
jest-circus@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a"
+
integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==
+
dependencies:
+
"@jest/environment" "^29.7.0"
+
"@jest/expect" "^29.7.0"
+
"@jest/test-result" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
"@types/node" "*"
+
chalk "^4.0.0"
+
co "^4.6.0"
+
dedent "^1.0.0"
+
is-generator-fn "^2.0.0"
+
jest-each "^29.7.0"
+
jest-matcher-utils "^29.7.0"
+
jest-message-util "^29.7.0"
+
jest-runtime "^29.7.0"
+
jest-snapshot "^29.7.0"
+
jest-util "^29.7.0"
+
p-limit "^3.1.0"
+
pretty-format "^29.7.0"
+
pure-rand "^6.0.0"
+
slash "^3.0.0"
+
stack-utils "^2.0.3"
+
+
jest-cli@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995"
+
integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==
+
dependencies:
+
"@jest/core" "^29.7.0"
+
"@jest/test-result" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
chalk "^4.0.0"
+
create-jest "^29.7.0"
+
exit "^0.1.2"
+
import-local "^3.0.2"
+
jest-config "^29.7.0"
+
jest-util "^29.7.0"
+
jest-validate "^29.7.0"
+
yargs "^17.3.1"
+
+
jest-config@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f"
+
integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==
+
dependencies:
+
"@babel/core" "^7.11.6"
+
"@jest/test-sequencer" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
babel-jest "^29.7.0"
+
chalk "^4.0.0"
+
ci-info "^3.2.0"
+
deepmerge "^4.2.2"
+
glob "^7.1.3"
+
graceful-fs "^4.2.9"
+
jest-circus "^29.7.0"
+
jest-environment-node "^29.7.0"
+
jest-get-type "^29.6.3"
+
jest-regex-util "^29.6.3"
+
jest-resolve "^29.7.0"
+
jest-runner "^29.7.0"
+
jest-util "^29.7.0"
+
jest-validate "^29.7.0"
+
micromatch "^4.0.4"
+
parse-json "^5.2.0"
+
pretty-format "^29.7.0"
+
slash "^3.0.0"
+
strip-json-comments "^3.1.1"
+
jest-diff@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
···
jest-get-type "^29.6.3"
pretty-format "^29.7.0"
+
jest-docblock@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a"
+
integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==
+
dependencies:
+
detect-newline "^3.0.0"
+
+
jest-each@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1"
+
integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==
+
dependencies:
+
"@jest/types" "^29.6.3"
+
chalk "^4.0.0"
+
jest-get-type "^29.6.3"
+
jest-util "^29.7.0"
+
pretty-format "^29.7.0"
+
jest-environment-jsdom@^29.2.1:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f"
···
optionalDependencies:
fsevents "^2.3.2"
+
jest-leak-detector@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728"
+
integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==
+
dependencies:
+
jest-get-type "^29.6.3"
+
pretty-format "^29.7.0"
+
jest-matcher-utils@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12"
···
"@types/node" "*"
jest-util "^29.7.0"
+
jest-pnp-resolver@^1.2.2:
+
version "1.2.3"
+
resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
+
integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
+
jest-regex-util@^29.0.0, jest-regex-util@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52"
integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
+
jest-resolve-dependencies@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428"
+
integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==
+
dependencies:
+
jest-regex-util "^29.6.3"
+
jest-snapshot "^29.7.0"
+
+
jest-resolve@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30"
+
integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==
+
dependencies:
+
chalk "^4.0.0"
+
graceful-fs "^4.2.9"
+
jest-haste-map "^29.7.0"
+
jest-pnp-resolver "^1.2.2"
+
jest-util "^29.7.0"
+
jest-validate "^29.7.0"
+
resolve "^1.20.0"
+
resolve.exports "^2.0.0"
+
slash "^3.0.0"
+
+
jest-runner@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e"
+
integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==
+
dependencies:
+
"@jest/console" "^29.7.0"
+
"@jest/environment" "^29.7.0"
+
"@jest/test-result" "^29.7.0"
+
"@jest/transform" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
"@types/node" "*"
+
chalk "^4.0.0"
+
emittery "^0.13.1"
+
graceful-fs "^4.2.9"
+
jest-docblock "^29.7.0"
+
jest-environment-node "^29.7.0"
+
jest-haste-map "^29.7.0"
+
jest-leak-detector "^29.7.0"
+
jest-message-util "^29.7.0"
+
jest-resolve "^29.7.0"
+
jest-runtime "^29.7.0"
+
jest-util "^29.7.0"
+
jest-watcher "^29.7.0"
+
jest-worker "^29.7.0"
+
p-limit "^3.1.0"
+
source-map-support "0.5.13"
+
+
jest-runtime@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817"
+
integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==
+
dependencies:
+
"@jest/environment" "^29.7.0"
+
"@jest/fake-timers" "^29.7.0"
+
"@jest/globals" "^29.7.0"
+
"@jest/source-map" "^29.6.3"
+
"@jest/test-result" "^29.7.0"
+
"@jest/transform" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
"@types/node" "*"
+
chalk "^4.0.0"
+
cjs-module-lexer "^1.0.0"
+
collect-v8-coverage "^1.0.0"
+
glob "^7.1.3"
+
graceful-fs "^4.2.9"
+
jest-haste-map "^29.7.0"
+
jest-message-util "^29.7.0"
+
jest-mock "^29.7.0"
+
jest-regex-util "^29.6.3"
+
jest-resolve "^29.7.0"
+
jest-snapshot "^29.7.0"
+
jest-util "^29.7.0"
+
slash "^3.0.0"
+
strip-bom "^4.0.0"
+
"jest-snapshot-prettier@npm:prettier@^2":
version "2.8.8"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
···
string-length "^5.0.1"
strip-ansi "^7.0.1"
-
jest-watcher@^29.0.0:
+
jest-watcher@^29.0.0, jest-watcher@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2"
integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==
···
jest-util "^29.7.0"
merge-stream "^2.0.0"
supports-color "^8.0.0"
+
+
jest@^29.7.0:
+
version "29.7.0"
+
resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613"
+
integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
+
dependencies:
+
"@jest/core" "^29.7.0"
+
"@jest/types" "^29.6.3"
+
import-local "^3.0.2"
+
jest-cli "^29.7.0"
jimp-compact@0.16.1:
version "0.16.1"
···
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
+
json-buffer@3.0.1:
+
version "3.0.1"
+
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
json-parse-even-better-errors@^2.3.0:
+
version "2.3.1"
+
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+
json-schema-traverse@^0.4.1:
+
version "0.4.1"
+
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+
json-stable-stringify-without-jsonify@^1.0.1:
+
version "1.0.1"
+
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
json-stable-stringify@^1.0.2:
version "1.3.0"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz#8903cfac42ea1a0f97f35d63a4ce0518f0cc6a70"
···
object.assign "^4.1.4"
object.values "^1.1.6"
+
keyv@^4.5.4:
+
version "4.5.4"
+
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+
dependencies:
+
json-buffer "3.0.1"
+
klaw-sync@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
···
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+
levn@^0.4.1:
+
version "0.4.1"
+
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+
integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+
dependencies:
+
prelude-ls "^1.2.1"
+
type-check "~0.4.0"
lighthouse-logger@^1.0.0:
version "1.4.2"
···
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
lodash.merge@^4.6.2:
+
version "4.6.2"
+
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
-
lodash@^4.17.19:
+
lodash@^4.17.19, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
···
pify "^4.0.1"
semver "^5.6.0"
+
make-dir@^4.0.0:
+
version "4.0.0"
+
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
+
integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+
dependencies:
+
semver "^7.5.3"
+
make-error@1.x:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
···
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
merge2@^1.3.0:
+
merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
···
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
mimic-fn@^2.1.0:
+
version "2.1.0"
+
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
min-indent@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
···
semver "^7.3.5"
validate-npm-package-name "^5.0.0"
+
npm-run-path@^4.0.1:
+
version "4.0.1"
+
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+
dependencies:
+
path-key "^3.0.0"
+
nullthrows@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
···
dependencies:
mimic-fn "^1.0.0"
+
onetime@^5.1.2:
+
version "5.1.2"
+
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+
dependencies:
+
mimic-fn "^2.1.0"
+
open@^7.0.3, open@^7.4.2:
version "7.4.2"
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
···
is-docker "^2.1.1"
is-wsl "^2.2.0"
+
optionator@^0.9.3:
+
version "0.9.4"
+
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
+
integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+
dependencies:
+
deep-is "^0.1.3"
+
fast-levenshtein "^2.0.6"
+
levn "^0.4.1"
+
prelude-ls "^1.2.1"
+
type-check "^0.4.0"
+
word-wrap "^1.2.5"
+
ora@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
···
resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
+
parent-module@^1.0.0:
+
version "1.0.1"
+
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+
integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+
dependencies:
+
callsites "^3.0.0"
+
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
···
dependencies:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
+
+
parse-json@^5.2.0:
+
version "5.2.0"
+
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+
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"
parse-png@^2.1.0:
version "2.1.0"
···
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
path-key@^3.1.0:
+
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
···
dependencies:
lru-cache "^10.2.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+
path-type@^4.0.0:
+
version "4.0.0"
+
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
picocolors@^1.0.0, picocolors@^1.1.1:
version "1.1.1"
···
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
+
pkg-dir@^4.2.0:
+
version "4.2.0"
+
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+
dependencies:
+
find-up "^4.0.0"
+
plist@^3.0.5:
version "3.1.0"
resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
···
version "2.1.0"
resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3"
integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==
+
+
prelude-ls@^1.2.1:
+
version "1.2.1"
+
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
prettier-linter-helpers@^1.0.0:
version "1.0.0"
···
dependencies:
fast-diff "^1.1.2"
+
prettier@^3.0.3:
+
version "3.6.2"
+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
+
integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
+
pretty-bytes@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
···
dependencies:
asap "~2.0.6"
-
prompts@^2.2.1, prompts@^2.3.2:
+
prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
···
dependencies:
punycode "^2.3.1"
-
punycode@^2.1.1, punycode@^2.3.1:
+
punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+
pure-rand@^6.0.0:
+
version "6.1.0"
+
resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2"
+
integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==
qrcode-terminal@0.11.0:
version "0.11.0"
···
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
resolve-cwd@^3.0.0:
+
version "3.0.0"
+
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+
integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+
dependencies:
+
resolve-from "^5.0.0"
+
resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
+
+
resolve-from@^4.0.0:
+
version "4.0.0"
+
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
resolve-from@^5.0.0:
version "5.0.0"
···
resolved "https://registry.yarnpkg.com/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz#a0098daa0067cd0efa6eb525c57c8fb4a61e78f8"
integrity sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==
-
resolve.exports@^2.0.3:
+
resolve.exports@^2.0.0, resolve.exports@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f"
integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==
-
resolve@^1.10.1, resolve@^1.22.10, resolve@^1.22.2, resolve@^1.22.4:
+
resolve@^1.10.1, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.2, resolve@^1.22.4:
version "1.22.10"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
···
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
-
semver@7.x, semver@^7.1.3, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3:
+
semver@7.x, semver@^7.1.3, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3:
version "7.7.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
···
side-channel-map "^1.0.1"
side-channel-weakmap "^1.0.2"
-
signal-exit@^3.0.2, signal-exit@^3.0.7:
+
signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
···
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
source-map-support@0.5.13:
+
version "0.5.13"
+
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+
integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+
dependencies:
+
buffer-from "^1.0.0"
+
source-map "^0.6.0"
+
source-map-support@~0.5.20, source-map-support@~0.5.21:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
···
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-
source-map@^0.6.0, source-map@~0.6.1:
+
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
···
char-regex "^2.0.0"
strip-ansi "^7.0.1"
+
string-natural-compare@^3.0.1:
+
version "3.0.1"
+
resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
+
integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
+
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
···
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
strip-bom@^4.0.0:
+
version "4.0.0"
+
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+
integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+
strip-final-newline@^2.0.0:
+
version "2.0.0"
+
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
strip-indent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
dependencies:
min-indent "^1.0.0"
+
+
strip-json-comments@^3.1.1:
+
version "3.1.1"
+
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
strip-json-comments@~2.0.1:
version "2.0.1"
···
dependencies:
punycode "^2.1.1"
+
ts-api-utils@^1.3.0:
+
version "1.4.3"
+
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
+
integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
+
ts-api-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
···
minimist "^1.2.6"
strip-bom "^3.0.0"
+
tslib@^1.8.1:
+
version "1.14.1"
+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+
tsutils@^3.21.0:
+
version "3.21.0"
+
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+
integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+
dependencies:
+
tslib "^1.8.1"
+
+
type-check@^0.4.0, type-check@~0.4.0:
+
version "0.4.0"
+
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+
integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+
dependencies:
+
prelude-ls "^1.2.1"
+
type-detect@4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
···
escalade "^3.2.0"
picocolors "^1.1.1"
+
uri-js@^4.2.2:
+
version "4.4.1"
+
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+
dependencies:
+
punycode "^2.1.0"
+
url-parse@^1.5.3:
version "1.5.10"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
···
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+
v8-to-istanbul@^9.0.1:
+
version "9.3.0"
+
resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175"
+
integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==
+
dependencies:
+
"@jridgewell/trace-mapping" "^0.3.12"
+
"@types/istanbul-lib-coverage" "^2.0.1"
+
convert-source-map "^2.0.0"
+
validate-npm-package-name@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
···
resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.5.tgz#33fa54ea700ff3e87b56fe32202112a9e8fea1a2"
integrity sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==
+
word-wrap@^1.2.5:
+
version "1.2.5"
+
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
···
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-
yargs@^17.6.2:
+
yargs@^17.3.1, yargs@^17.6.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==