diff --git a/experimental/instrumentation-otel-axios/.browserslistrc b/experimental/instrumentation-otel-axios/.browserslistrc new file mode 100644 index 000000000..8528fd685 --- /dev/null +++ b/experimental/instrumentation-otel-axios/.browserslistrc @@ -0,0 +1 @@ +supports es6-module \ No newline at end of file diff --git a/experimental/instrumentation-otel-axios/README.md b/experimental/instrumentation-otel-axios/README.md new file mode 100644 index 000000000..de1855ade --- /dev/null +++ b/experimental/instrumentation-otel-axios/README.md @@ -0,0 +1,52 @@ +# @grafana/instrumentation-fetch + +Faro instrumentation of the JavaScript [Fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) API. + +❗️*Warning*: this package is experimental and may be subject to frequent and breaking changes. +Use at your own risk.❗️ + +## Installation and Usage + +❗️*Warning*: This package is not interoperable with `@opentelemetry/instrumentation-fetch`. +Use one or the other❗️ + +Add the instrumentation as outlined below. +The instrumentation send the following events alongside respective request/response data like HTTP +headers and other response properties like status codes the requests url and more. + +Event names are: + +- `faro.fetch.resolved` for resolved requests. +- `faro.fetch.rejected` for rejected requests. + +```ts +// index.ts +import { FetchInstrumentation } from '@grafana/faro-instrumentation-fetch'; +import { getWebInstrumentations, initializeFaro } from '@grafana/faro-react'; + +initializeFaro({ + // ... + instrumentations: [ + // Load the default Web instrumentations + ...getWebInstrumentations(), + // Add fetch instrumentation + new FetchInstrumentation(), + ], +}); + + +// myApi.ts +fetch(...) // Use fetch as normal - telemetry data is sent to your Faro endpoint +``` + +## Backend correlation + +In order to prepare backend correlation, this instrumentation adds the following headers to each +request that server-side instrumentation can use as context: + +- `x-faro-session` - the client-side session id + +## Planned Development + +- Additional functionality to correlate frontend requests with backend actions +- Event attributes with end-to-end timing details diff --git a/experimental/instrumentation-otel-axios/jest.config.js b/experimental/instrumentation-otel-axios/jest.config.js new file mode 100644 index 000000000..bfeb62baa --- /dev/null +++ b/experimental/instrumentation-otel-axios/jest.config.js @@ -0,0 +1,16 @@ +const { jestBaseConfig } = require('../../jest.config.base.js'); + +module.exports = { + ...jestBaseConfig, + roots: ['experimental/instrumentation-fetch/src'], + testEnvironment: 'jsdom', + setupFiles: ['/experimental/instrumentation-fetch/src/setupTests.ts'], + moduleNameMapper: { + '^@remix-run/router$': '/index.ts', + '^@remix-run/web-blob$': require.resolve('@remix-run/web-blob'), + '^@remix-run/web-fetch$': require.resolve('@remix-run/web-fetch'), + '^@remix-run/web-form-data$': require.resolve('@remix-run/web-form-data'), + '^@remix-run/web-stream$': require.resolve('@remix-run/web-stream'), + '^@web3-storage/multipart-parser$': require.resolve('@web3-storage/multipart-parser'), + }, +}; diff --git a/experimental/instrumentation-otel-axios/package.json b/experimental/instrumentation-otel-axios/package.json new file mode 100644 index 000000000..02a1c8f76 --- /dev/null +++ b/experimental/instrumentation-otel-axios/package.json @@ -0,0 +1,66 @@ +{ + "name": "@grafana/faro-instrumentation-otel-axios", + "version": "1.12.2", + "description": "Faro axios open telemetry auto-instrumentation package", + "keywords": [ + "observability", + "apm", + "rum", + "logs", + "traces", + "metrics", + "fetch" + ], + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "scripts": { + "test": "jest", + "start": "yarn watch", + "build": "run-s 'build:*'", + "build:compile": "run-p 'build:compile:*'", + "build:compile:cjs": "tsc --build tsconfig.cjs.json", + "build:compile:esm": "tsc --build tsconfig.esm.json", + "build:compile:bundle": "run-s 'build:compile:bundle:*'", + "build:compile:bundle:create": "rollup -c ./rollup.config.js", + "build:compile:bundle:remove-extras": "rimraf dist/bundle/dist", + "watch": "run-s watch:compile", + "watch:compile": "yarn build:compile:cjs -w", + "clean": "rimraf dist/ yarn-error.log", + "quality": "run-s 'quality:*'", + "quality:test": "jest", + "quality:format": "prettier --cache --cache-location=../../.cache/prettier/instrumentationOtelAxios --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint": "run-s 'quality:lint:*'", + "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/instrumentationOtelAxios --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"", + "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/instrumentationOtelAxios --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint:md": "markdownlint README.md", + "quality:circular-deps": "madge --circular ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/grafana/faro-web-sdk.git", + "directory": "experimental/instrumentation-fetch" + }, + "author": "Grafana Labs", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/grafana/faro-web-sdk/issues" + }, + "homepage": "https://github.com/grafana/faro-web-sdk", + "dependencies": { + "@grafana/faro-core": "^1.12.2", + "@opentelemetry/api": "^1.9.0" + }, + "peerDependencies": { + "axios": "*" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + ".browserslistrc", + "dist", + "README.md", + "LICENSE" + ] +} diff --git a/experimental/instrumentation-otel-axios/rollup.config.js b/experimental/instrumentation-otel-axios/rollup.config.js new file mode 100644 index 000000000..c329a1c0a --- /dev/null +++ b/experimental/instrumentation-otel-axios/rollup.config.js @@ -0,0 +1,3 @@ +const { getRollupConfigBase } = require('../../rollup.config.base.js'); + +module.exports = getRollupConfigBase('instrumentationOtelAxios'); diff --git a/experimental/instrumentation-otel-axios/src/constants.ts b/experimental/instrumentation-otel-axios/src/constants.ts new file mode 100644 index 000000000..f28ac6d93 --- /dev/null +++ b/experimental/instrumentation-otel-axios/src/constants.ts @@ -0,0 +1,5 @@ +export enum AttributeNames { + COMPONENT = 'component', + HTTP_ERROR_NAME = 'http.error_name', + HTTP_STATUS_TEXT = 'http.status_text', +} diff --git a/experimental/instrumentation-otel-axios/src/index.ts b/experimental/instrumentation-otel-axios/src/index.ts new file mode 100644 index 000000000..2914f398b --- /dev/null +++ b/experimental/instrumentation-otel-axios/src/index.ts @@ -0,0 +1 @@ +export { AxiosInstrumentation } from './instrumentation'; diff --git a/experimental/instrumentation-otel-axios/src/instrumentation.ts b/experimental/instrumentation-otel-axios/src/instrumentation.ts new file mode 100644 index 000000000..32b56f725 --- /dev/null +++ b/experimental/instrumentation-otel-axios/src/instrumentation.ts @@ -0,0 +1,180 @@ +import * as api from '@opentelemetry/api'; +import * as core from '@opentelemetry/core'; +import { InstrumentationBase, isWrapped } from '@opentelemetry/instrumentation'; +import * as web from '@opentelemetry/sdk-trace-web'; +import { + SEMATTRS_HTTP_HOST, + SEMATTRS_HTTP_METHOD, + SEMATTRS_HTTP_SCHEME, + SEMATTRS_HTTP_STATUS_CODE, + SEMATTRS_HTTP_URL, + SEMATTRS_HTTP_USER_AGENT, +} from '@opentelemetry/semantic-conventions'; +import { Axios, type AxiosInstance, type AxiosRequestConfig, type AxiosResponse } from 'axios'; + +import { AttributeNames } from './constants'; +import type { AxiosInstrumentationOptions } from './types'; + +/** + * Additional custom attribute names + */ + +export const VERSION = '1.12.3'; + +/** + * Configuration interface for the AxiosInstrumentation + */ + +export class AxiosInstrumentation extends InstrumentationBase { + readonly component: string = 'axios'; + + readonly version: string = VERSION; + + moduleName = this.component; + + constructor(config: AxiosInstrumentationOptions = {}) { + super('@grafana/instrumentation-axios', VERSION, config); + this.enable = this.enable.bind(this); + this.disable = this.disable.bind(this); + } + + init(): void { + // no-op + } + + private _addFinalSpanAttributes(span: api.Span, response: AxiosResponse) { + const responseUrl = `${response.config.baseURL ?? ''}/${response.config.url}`; + const parsedUrl = web.parseUrl(responseUrl); + + span.updateName(`${response.config.method?.toUpperCase()}`); + span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, response.status); + if (response.statusText != null) { + span.setAttribute(AttributeNames.HTTP_STATUS_TEXT, response.statusText); + } + span.setAttribute(SEMATTRS_HTTP_HOST, parsedUrl.host); + span.setAttribute(SEMATTRS_HTTP_SCHEME, parsedUrl.protocol.replace(':', '')); + if (typeof navigator !== 'undefined') { + span.setAttribute(SEMATTRS_HTTP_USER_AGENT, navigator.userAgent); + } + + try { + this._config.applyCustomAttributesOnSpan?.(span as web.Span, response); + } catch (e) { + this._diag.error('Error applying custom attributes', e); + } + } + + private _addAxiosHeaders(config: AxiosRequestConfig): void { + const headers: Record = config.headers || {}; + api.propagation.inject(api.context.active(), headers); + // @ts-ignore + config.headers = headers; + } + + private createSpan(url: string, options: Partial = {}): api.Span | undefined { + if (core.isUrlIgnored(url, this.getConfig().ignoreUrls)) { + this._diag.debug('ignoring span as url matches ignored url'); + return; + } + + const method = (options.method || 'GET').toUpperCase(); + const spanName = `HTTP ${method}`; + + return this.tracer.startSpan(spanName, { + kind: api.SpanKind.CLIENT, + attributes: { + [AttributeNames.COMPONENT]: this.moduleName, + [SEMATTRS_HTTP_METHOD]: method, + [SEMATTRS_HTTP_URL]: url, + }, + }); + } + + private _endSpan(span: api.Span, response?: AxiosResponse, error?: Error) { + if (response) { + // It's an AxiosResponse + this._addFinalSpanAttributes(span, response); + + if (response.status >= 400) { + span.setStatus({ code: api.SpanStatusCode.ERROR }); + } else { + span.setStatus({ code: api.SpanStatusCode.OK }); + } + } else if (error) { + // It's an error object + span.setStatus({ code: api.SpanStatusCode.ERROR, message: error.message }); + if (error.name) { + span.setAttribute(AttributeNames.HTTP_ERROR_NAME, error.name); + } + } + + span.end(); + } + + private _patchAxios() { + const plugin = this; + + // Wrap axios.request + if (isWrapped(Axios.prototype.request)) { + plugin._unwrap(Axios.prototype, 'request'); + } + + plugin._wrap( + Axios.prototype, + 'request', + (original: , D = any>(config: AxiosRequestConfig) => Promise) => { + return function patchRequest, D = any>( + this: AxiosInstance, + requestConfig: AxiosRequestConfig + ): Promise { + const url = requestConfig.url ?? ''; + + // Create a new span if the URL is not ignored + const span = plugin.createSpan(url, { method: requestConfig.method }); + if (!span) { + return original.apply(this, [requestConfig]) as Promise; + } + + return api.context.with(api.trace.setSpan(api.context.active(), span), () => { + plugin._addAxiosHeaders(requestConfig); + + return (original.apply(this, [requestConfig]) as Promise) + .then((response: R) => { + try { + plugin._endSpan(span, response as AxiosResponse); + } catch (e) { + plugin._diag.error('Error ending span', e); + } + return response; + }) + .catch((error: any) => { + try { + plugin._endSpan( + span, + error?.response, + error?.response || { + message: error?.message || 'Unknown error', + name: error?.name || 'Error', + } + ); + } catch (e) { + plugin._diag.error('Error ending span', e); + } + throw error; + }); + }); + }; + } + ); + } + + override enable(): void { + // Patch the instance passed in via this._config + this._patchAxios(); + } + + override disable(): void { + // Unwrap the instance + this._unwrap(Axios.prototype, 'request'); + } +} diff --git a/experimental/instrumentation-otel-axios/src/setupTests.ts b/experimental/instrumentation-otel-axios/src/setupTests.ts new file mode 100644 index 000000000..c9c335837 --- /dev/null +++ b/experimental/instrumentation-otel-axios/src/setupTests.ts @@ -0,0 +1,12 @@ +import { fetch, Request, Response } from '@remix-run/web-fetch'; + +if (!globalThis.fetch) { + // @ts-expect-error + globalThis.fetch = fetch; + + // @ts-expect-error + globalThis.Request = Request; + + // @ts-expect-error + globalThis.Response = Response; +} diff --git a/experimental/instrumentation-otel-axios/src/types.ts b/experimental/instrumentation-otel-axios/src/types.ts new file mode 100644 index 000000000..224419ef8 --- /dev/null +++ b/experimental/instrumentation-otel-axios/src/types.ts @@ -0,0 +1,10 @@ +import type { Span } from '@opentelemetry/api'; +import type { InstrumentationConfig } from '@opentelemetry/instrumentation'; +import type { AxiosResponse } from 'axios'; + +export interface AxiosInstrumentationOptions extends InstrumentationConfig { + clearTimingResources?: boolean; + ignoreUrls?: Array; + measureRequestSize?: boolean; + applyCustomAttributesOnSpan?: (span: Span, request: AxiosResponse) => void; +} diff --git a/experimental/instrumentation-otel-axios/tsconfig.bundle.json b/experimental/instrumentation-otel-axios/tsconfig.bundle.json new file mode 100644 index 000000000..aca68665a --- /dev/null +++ b/experimental/instrumentation-otel-axios/tsconfig.bundle.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/bundle/types", + "outDir": "./dist/bundle", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/core.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["./**/*.test.ts"] +} diff --git a/experimental/instrumentation-otel-axios/tsconfig.cjs.json b/experimental/instrumentation-otel-axios/tsconfig.cjs.json new file mode 100644 index 000000000..249bffbb6 --- /dev/null +++ b/experimental/instrumentation-otel-axios/tsconfig.cjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.cjs.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/cjs", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationOtelAxios.cjs.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-otel-axios/tsconfig.esm.json b/experimental/instrumentation-otel-axios/tsconfig.esm.json new file mode 100644 index 000000000..1358c23bf --- /dev/null +++ b/experimental/instrumentation-otel-axios/tsconfig.esm.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/esm", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationOtelAxios.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-otel-axios/tsconfig.json b/experimental/instrumentation-otel-axios/tsconfig.json new file mode 100644 index 000000000..d622457a1 --- /dev/null +++ b/experimental/instrumentation-otel-axios/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "noPropertyAccessFromIndexSignature": false + }, + "references": [ + { "path": "./tsconfig.cjs.json" }, + { "path": "./tsconfig.esm.json" }, + { "path": "./tsconfig.spec.json" } + ] +} diff --git a/experimental/instrumentation-otel-axios/tsconfig.spec.json b/experimental/instrumentation-otel-axios/tsconfig.spec.json new file mode 100644 index 000000000..74612da48 --- /dev/null +++ b/experimental/instrumentation-otel-axios/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.spec.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/spec", + "rootDir": "../../", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationOtelAxios.spec.tsbuildinfo" + }, + "include": ["./src"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-otel-redux-saga/.browserslistrc b/experimental/instrumentation-otel-redux-saga/.browserslistrc new file mode 100644 index 000000000..8528fd685 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/.browserslistrc @@ -0,0 +1 @@ +supports es6-module \ No newline at end of file diff --git a/experimental/instrumentation-otel-redux-saga/README.md b/experimental/instrumentation-otel-redux-saga/README.md new file mode 100644 index 000000000..de1855ade --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/README.md @@ -0,0 +1,52 @@ +# @grafana/instrumentation-fetch + +Faro instrumentation of the JavaScript [Fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) API. + +❗️*Warning*: this package is experimental and may be subject to frequent and breaking changes. +Use at your own risk.❗️ + +## Installation and Usage + +❗️*Warning*: This package is not interoperable with `@opentelemetry/instrumentation-fetch`. +Use one or the other❗️ + +Add the instrumentation as outlined below. +The instrumentation send the following events alongside respective request/response data like HTTP +headers and other response properties like status codes the requests url and more. + +Event names are: + +- `faro.fetch.resolved` for resolved requests. +- `faro.fetch.rejected` for rejected requests. + +```ts +// index.ts +import { FetchInstrumentation } from '@grafana/faro-instrumentation-fetch'; +import { getWebInstrumentations, initializeFaro } from '@grafana/faro-react'; + +initializeFaro({ + // ... + instrumentations: [ + // Load the default Web instrumentations + ...getWebInstrumentations(), + // Add fetch instrumentation + new FetchInstrumentation(), + ], +}); + + +// myApi.ts +fetch(...) // Use fetch as normal - telemetry data is sent to your Faro endpoint +``` + +## Backend correlation + +In order to prepare backend correlation, this instrumentation adds the following headers to each +request that server-side instrumentation can use as context: + +- `x-faro-session` - the client-side session id + +## Planned Development + +- Additional functionality to correlate frontend requests with backend actions +- Event attributes with end-to-end timing details diff --git a/experimental/instrumentation-otel-redux-saga/jest.config.js b/experimental/instrumentation-otel-redux-saga/jest.config.js new file mode 100644 index 000000000..bfeb62baa --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/jest.config.js @@ -0,0 +1,16 @@ +const { jestBaseConfig } = require('../../jest.config.base.js'); + +module.exports = { + ...jestBaseConfig, + roots: ['experimental/instrumentation-fetch/src'], + testEnvironment: 'jsdom', + setupFiles: ['/experimental/instrumentation-fetch/src/setupTests.ts'], + moduleNameMapper: { + '^@remix-run/router$': '/index.ts', + '^@remix-run/web-blob$': require.resolve('@remix-run/web-blob'), + '^@remix-run/web-fetch$': require.resolve('@remix-run/web-fetch'), + '^@remix-run/web-form-data$': require.resolve('@remix-run/web-form-data'), + '^@remix-run/web-stream$': require.resolve('@remix-run/web-stream'), + '^@web3-storage/multipart-parser$': require.resolve('@web3-storage/multipart-parser'), + }, +}; diff --git a/experimental/instrumentation-otel-redux-saga/package.json b/experimental/instrumentation-otel-redux-saga/package.json new file mode 100644 index 000000000..58324a0ca --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/package.json @@ -0,0 +1,69 @@ +{ + "name": "@grafana/faro-instrumentation-otel-redux-saga", + "version": "1.12.2", + "description": "Faro redux-saga open telemetry auto-instrumentation package", + "keywords": [ + "observability", + "apm", + "rum", + "logs", + "traces", + "metrics", + "fetch" + ], + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "scripts": { + "test": "jest", + "start": "yarn watch", + "build": "run-s 'build:*'", + "build:compile": "run-p 'build:compile:*'", + "build:compile:cjs": "tsc --build tsconfig.cjs.json", + "build:compile:esm": "tsc --build tsconfig.esm.json", + "build:compile:bundle": "run-s 'build:compile:bundle:*'", + "build:compile:bundle:create": "rollup -c ./rollup.config.js", + "build:compile:bundle:remove-extras": "rimraf dist/bundle/dist", + "watch": "run-s watch:compile", + "watch:compile": "yarn build:compile:cjs -w", + "clean": "rimraf dist/ yarn-error.log", + "quality": "run-s 'quality:*'", + "quality:test": "jest", + "quality:format": "prettier --cache --cache-location=../../.cache/prettier/instrumentationOtelAxios --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint": "run-s 'quality:lint:*'", + "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/instrumentationOtelAxios --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"", + "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/instrumentationOtelAxios --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint:md": "markdownlint README.md", + "quality:circular-deps": "madge --circular ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/grafana/faro-web-sdk.git", + "directory": "experimental/instrumentation-fetch" + }, + "author": "Grafana Labs", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/grafana/faro-web-sdk/issues" + }, + "homepage": "https://github.com/grafana/faro-web-sdk", + "dependencies": { + "@grafana/faro-core": "^1.12.2", + "@opentelemetry/api": "^1.9.0" + }, + "devDependencies": { + "redux-saga": "^1.3.0" + }, + "peerDependencies": { + "redux-saga": "^1" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + ".browserslistrc", + "dist", + "README.md", + "LICENSE" + ] +} diff --git a/experimental/instrumentation-otel-redux-saga/rollup.config.js b/experimental/instrumentation-otel-redux-saga/rollup.config.js new file mode 100644 index 000000000..84883e990 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/rollup.config.js @@ -0,0 +1,3 @@ +const { getRollupConfigBase } = require('../../rollup.config.base.js'); + +module.exports = getRollupConfigBase('instrumentationOtelReduxSaga'); diff --git a/experimental/instrumentation-otel-redux-saga/src/constants.ts b/experimental/instrumentation-otel-redux-saga/src/constants.ts new file mode 100644 index 000000000..f28ac6d93 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/src/constants.ts @@ -0,0 +1,5 @@ +export enum AttributeNames { + COMPONENT = 'component', + HTTP_ERROR_NAME = 'http.error_name', + HTTP_STATUS_TEXT = 'http.status_text', +} diff --git a/experimental/instrumentation-otel-redux-saga/src/index.ts b/experimental/instrumentation-otel-redux-saga/src/index.ts new file mode 100644 index 000000000..d5f1e3972 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/src/index.ts @@ -0,0 +1 @@ +export { ReduxSagaInstrumentation } from './instrumentation'; diff --git a/experimental/instrumentation-otel-redux-saga/src/instrumentation.ts b/experimental/instrumentation-otel-redux-saga/src/instrumentation.ts new file mode 100644 index 000000000..33418e8c5 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/src/instrumentation.ts @@ -0,0 +1,207 @@ +import * as api from '@opentelemetry/api'; +import { type Span, SpanStatusCode } from '@opentelemetry/api'; +import { InstrumentationBase } from '@opentelemetry/instrumentation'; +import type { InstrumentationConfig } from '@opentelemetry/instrumentation'; +import type { SagaMonitor } from 'redux-saga'; +import type { PutEffect } from 'redux-saga/effects'; + +export interface ReduxSagaInstrumentationConfig extends InstrumentationConfig { + // Add any custom config fields you'd like here. + // For example, you might ignore certain effect types, or customize naming, etc. + shouldPropagateTraceContextPut?: (effect: PutEffect) => boolean; + propagateContextToCall?: boolean; +} + +/** + * A minimal SagaMonitor-based instrumentation for Redux-Saga. + */ +export class ReduxSagaInstrumentation extends InstrumentationBase { + private _spans: Map = new Map(); + + constructor(config: ReduxSagaInstrumentationConfig = {}) { + super('@grafana/redux-saga-instrumentation', '1.0.0', config); + } + + init() {} + + /** + * Returns a custom sagaMonitor that starts/ends spans for saga effects. + */ + public getSagaMonitor(): SagaMonitor { + const instrumentation = this; + + const sagaMonitor: SagaMonitor = { + effectTriggered(info) { + try { + // Called when a new effect is triggered (e.g. call, put, take, fork, etc.) + const { effectId, effect } = info; + const args = effect?.payload?.args; + const payload = args?.[0]?.payload; + const traceparent = payload?.traceparent; + const traceable = args?.[2]?.traceable; + + if (traceparent) { + const parentContext = api.propagation.extract(api.context.active(), payload); + const spanName = instrumentation._getEffectName(effect); + const span = instrumentation.tracer.startSpan( + spanName, + { + kind: api.SpanKind.CLIENT, + }, + parentContext + ); + instrumentation._spans.set(effectId, span); + + return; + } + + const parentId = info?.parentEffectId; + + const parentSpan = instrumentation._spans.get(parentId); + + if (parentSpan) { + const spanName = instrumentation._getEffectName(effect); + + // Use the parent span's context to create a child span + const childSpan = instrumentation.tracer.startSpan( + spanName, + { kind: api.SpanKind.CLIENT }, + api.trace.setSpan(api.context.active(), parentSpan) + ); + + if (effect.type === 'PUT' && instrumentation._config.shouldPropagateTraceContextPut?.(effect)) { + const effectPayload = { ...(effect.payload.action.payload || {}) }; + api.propagation.inject(api.trace.setSpan(api.context.active(), childSpan), effectPayload); + effect.payload.action.payload = effectPayload; + } + + if (effect.type === 'CALL') { + const childContext = api.trace.setSpan(api.context.active(), childSpan); + effect.payload.fn = api.context.bind(childContext, effect.payload.fn); + } + + instrumentation._spans.set(effectId, childSpan); + } else if (traceable) { + const spanName = instrumentation._getEffectName(effect); + const span = instrumentation.tracer.startSpan(spanName, { + kind: api.SpanKind.CLIENT, + }); + instrumentation._spans.set(effectId, span); + } + } catch (e) { + instrumentation._diag.error('Error in effectTriggered', e); + } + }, + + effectResolved(effectId: number, result: any) { + try { + // Called when an effect has completed successfully + const span = instrumentation._spans.get(effectId); + if (!span) { + return; + } + + if (result?.toPromise) { + result.toPromise().then((res: any) => { + // You can add any final attributes or set success + span.setStatus({ code: SpanStatusCode.OK }); + span.end(); + instrumentation._spans.delete(effectId); + return res; + }); + } else { + span.setStatus({ code: SpanStatusCode.OK }); + span.end(); + instrumentation._spans.delete(effectId); + } + } catch (e) { + instrumentation._diag.error('Error in effectResolved', e); + } + }, + + effectRejected(effectId, error) { + try { + // Called when an effect has failed + const span = instrumentation._spans.get(effectId); + if (!span) { + return; + } + + span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message }); + span.recordException(error); + span.end(); + instrumentation._spans.delete(effectId); + } catch (e) { + instrumentation._diag.error('Error in effectRejected', e); + } + }, + + effectCancelled(effectId) { + try { + // Called when an effect has been cancelled + const span = instrumentation._spans.get(effectId); + if (!span) { + return; + } + + // You might mark it as a cancellation, or success, or custom + span.setAttribute('redux-saga.cancelled', true); + span.end(); + instrumentation._spans.delete(effectId); + } catch (e) { + instrumentation._diag.error('Error in effectCancelled', e); + } + }, + }; + + return sagaMonitor; + } + + /** + * Patches logic: (No real "patch" is needed for redux-saga, we just provide the saga monitor.) + */ + override enable() { + // No actual patching of library code required; + // we'll just provide the custom saga monitor to the saga middleware. + } + + /** + * Unpatch logic: (Remove references or cleanup if needed.) + */ + override disable() { + // If needed, clear out the spans map or do any cleanup + this._spans.clear(); + } + + /** + * Helper: Return a name for the effect (like "call: fetchData" or "put: SOME_ACTION") + */ + private _getEffectName(effect: any): string { + if (effect && typeof effect === 'object') { + if (effect.type === 'CALL') { + // effect.payload.fn can be the function being called + const fnName = effect.payload.fn?.name || 'anonymous'; + + return `redux-saga call(${fnName})`; + } + if (effect.type === 'PUT') { + const actionType = effect.payload?.action?.type || 'unknown'; + + return `redux-saga put(${actionType})`; + } + + if (effect.type === 'FORK') { + const fnName = effect.payload.fn?.name || 'anonymous'; + + return `redux-saga fork(${fnName})`; + } + + if (effect.type === 'SELECT') { + return `redux-saga select(${effect.payload?.selector?.name || 'anonymous'})`; + } + + return `redux-saga ${effect.type.toLowerCase()}`; + } + return 'redux-saga effect'; + } +} diff --git a/experimental/instrumentation-otel-redux-saga/src/setupTests.ts b/experimental/instrumentation-otel-redux-saga/src/setupTests.ts new file mode 100644 index 000000000..c9c335837 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/src/setupTests.ts @@ -0,0 +1,12 @@ +import { fetch, Request, Response } from '@remix-run/web-fetch'; + +if (!globalThis.fetch) { + // @ts-expect-error + globalThis.fetch = fetch; + + // @ts-expect-error + globalThis.Request = Request; + + // @ts-expect-error + globalThis.Response = Response; +} diff --git a/experimental/instrumentation-otel-redux-saga/src/types.ts b/experimental/instrumentation-otel-redux-saga/src/types.ts new file mode 100644 index 000000000..fc65e31d5 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/src/types.ts @@ -0,0 +1,10 @@ +import type { InstrumentationConfig } from '@opentelemetry/instrumentation'; +import type * as web from '@opentelemetry/sdk-trace-web'; + +export interface AxiosInstrumentationOptions extends InstrumentationConfig { + clearTimingResources?: boolean; + propagateTraceHeaderCorsUrls?: web.PropagateTraceHeaderCorsUrls; + ignoreUrls?: Array; + ignoreNetworkEvents?: boolean; + measureRequestSize?: boolean; +} diff --git a/experimental/instrumentation-otel-redux-saga/tsconfig.bundle.json b/experimental/instrumentation-otel-redux-saga/tsconfig.bundle.json new file mode 100644 index 000000000..aca68665a --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/tsconfig.bundle.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/bundle/types", + "outDir": "./dist/bundle", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/core.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["./**/*.test.ts"] +} diff --git a/experimental/instrumentation-otel-redux-saga/tsconfig.cjs.json b/experimental/instrumentation-otel-redux-saga/tsconfig.cjs.json new file mode 100644 index 000000000..c011dac47 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/tsconfig.cjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.cjs.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/cjs", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationOtelReduxSaga.cjs.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-otel-redux-saga/tsconfig.esm.json b/experimental/instrumentation-otel-redux-saga/tsconfig.esm.json new file mode 100644 index 000000000..75e3b392d --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/tsconfig.esm.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/esm", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationOtelReduxSaga.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-otel-redux-saga/tsconfig.json b/experimental/instrumentation-otel-redux-saga/tsconfig.json new file mode 100644 index 000000000..d622457a1 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "noPropertyAccessFromIndexSignature": false + }, + "references": [ + { "path": "./tsconfig.cjs.json" }, + { "path": "./tsconfig.esm.json" }, + { "path": "./tsconfig.spec.json" } + ] +} diff --git a/experimental/instrumentation-otel-redux-saga/tsconfig.spec.json b/experimental/instrumentation-otel-redux-saga/tsconfig.spec.json new file mode 100644 index 000000000..054f89004 --- /dev/null +++ b/experimental/instrumentation-otel-redux-saga/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.spec.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/spec", + "rootDir": "../../", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationOtelReduxSaga.spec.tsbuildinfo" + }, + "include": ["./src"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-websocket/.browserslistrc b/experimental/instrumentation-websocket/.browserslistrc new file mode 100644 index 000000000..8528fd685 --- /dev/null +++ b/experimental/instrumentation-websocket/.browserslistrc @@ -0,0 +1 @@ +supports es6-module \ No newline at end of file diff --git a/experimental/instrumentation-websocket/jest.config.js b/experimental/instrumentation-websocket/jest.config.js new file mode 100644 index 000000000..8be2997df --- /dev/null +++ b/experimental/instrumentation-websocket/jest.config.js @@ -0,0 +1,16 @@ +const { jestBaseConfig } = require('../../jest.config.base.js'); + +module.exports = { + ...jestBaseConfig, + roots: ['experimental/instrumentation-websocket/src'], + testEnvironment: 'jsdom', + setupFiles: ['/experimental/instrumentation-websocket/src/setupTests.ts'], + moduleNameMapper: { + '^@remix-run/router$': '/index.ts', + '^@remix-run/web-blob$': require.resolve('@remix-run/web-blob'), + '^@remix-run/web-fetch$': require.resolve('@remix-run/web-fetch'), + '^@remix-run/web-form-data$': require.resolve('@remix-run/web-form-data'), + '^@remix-run/web-stream$': require.resolve('@remix-run/web-stream'), + '^@web3-storage/multipart-parser$': require.resolve('@web3-storage/multipart-parser'), + }, +}; diff --git a/experimental/instrumentation-websocket/package.json b/experimental/instrumentation-websocket/package.json new file mode 100644 index 000000000..6d832626e --- /dev/null +++ b/experimental/instrumentation-websocket/package.json @@ -0,0 +1,65 @@ +{ + "name": "@grafana/faro-instrumentation-websocket", + "version": "0.0.1", + "description": "Faro WebSocket auto-instrumentation package", + "keywords": [ + "observability", + "apm", + "rum", + "logs", + "traces", + "metrics", + "websocket" + ], + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "scripts": { + "test": "jest", + "start": "yarn watch", + "build": "run-s 'build:*'", + "build:compile": "run-p 'build:compile:*'", + "build:compile:cjs": "tsc --build tsconfig.cjs.json", + "build:compile:esm": "tsc --build tsconfig.esm.json", + "build:compile:bundle": "run-s 'build:compile:bundle:*'", + "build:compile:bundle:create": "rollup -c ./rollup.config.js", + "build:compile:bundle:remove-extras": "rimraf dist/bundle/dist", + "watch": "run-s watch:compile", + "watch:compile": "yarn build:compile:cjs -w", + "clean": "rimraf dist/ yarn-error.log", + "quality": "run-s 'quality:*'", + "quality:test": "jest", + "quality:format": "prettier --cache --cache-location=../../.cache/prettier/instrumentationWebSocket --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint": "run-s 'quality:lint:*'", + "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/instrumentationWebSocket --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"", + "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/instrumentationWebSocket --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint:md": "markdownlint README.md", + "quality:circular-deps": "madge --circular ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/grafana/faro-web-sdk.git", + "directory": "experimental/instrumentation-websocket" + }, + "author": "Grafana Labs", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/grafana/faro-web-sdk/issues" + }, + "homepage": "https://github.com/grafana/faro-web-sdk", + "dependencies": { + "@grafana/faro-core": "^1.12.2" + }, + "devDependencies": { + "@remix-run/web-fetch": "^4.3.4" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + ".browserslistrc", + "dist", + "README.md", + "LICENSE" + ] +} diff --git a/experimental/instrumentation-websocket/rollup.config.js b/experimental/instrumentation-websocket/rollup.config.js new file mode 100644 index 000000000..ca5517ed0 --- /dev/null +++ b/experimental/instrumentation-websocket/rollup.config.js @@ -0,0 +1,3 @@ +const { getRollupConfigBase } = require('../../rollup.config.base.js'); + +module.exports = getRollupConfigBase('instrumentationWebSocket'); diff --git a/experimental/instrumentation-websocket/src/index.ts b/experimental/instrumentation-websocket/src/index.ts new file mode 100644 index 000000000..55ffc2ea6 --- /dev/null +++ b/experimental/instrumentation-websocket/src/index.ts @@ -0,0 +1 @@ +export { WebSocketInstrumentation } from './instrumentation'; diff --git a/experimental/instrumentation-websocket/src/instrumentation.ts b/experimental/instrumentation-websocket/src/instrumentation.ts new file mode 100644 index 000000000..3be766b9b --- /dev/null +++ b/experimental/instrumentation-websocket/src/instrumentation.ts @@ -0,0 +1,216 @@ +import { context, diag, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api'; +import { _globalThis } from '@opentelemetry/core'; +import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation'; + +import type { MessageTransform, PendingRequest, WebSocketInstrumentationConfig, WebSocketMessage } from './types'; +import { generateRequestId, isLocalhost } from './utils'; + +const WS_MODULE = 'WebSocket'; + +const VERSION = '0.0.1'; + +export class WebSocketInstrumentation> extends InstrumentationBase { + readonly component: string = 'websocket'; + readonly version: string = VERSION; + + moduleName = this.component; + + private messageTransform: MessageTransform; + private sendTransform: MessageTransform; + private whiteListedURLs: string[] = []; + + private pendingRequests = new Map(); + + constructor(options: WebSocketInstrumentationConfig = {}) { + super('faro-instrumentation-websocket', VERSION, {}); + + this.messageTransform = options.messageTransform ?? this.defaultTransform; + this.sendTransform = options.sendTransform ?? this.defaultTransform; + this.whiteListedURLs = options.whiteListedURLs ?? []; + } + + protected init() { + return [ + new InstrumentationNodeModuleDefinition( + WS_MODULE, + ['*'], + (moduleExports) => { + diag.debug('Patching WebSocket'); + return this._patchWebSocket(moduleExports); + }, + (moduleExports) => { + diag.debug('Unpatching WebSocket'); + return this._unpatchWebSocket(moduleExports); + } + ), + ]; + } + + private defaultTransform(message: WebSocketMessage): WebSocketMessage | null | undefined { + return message; + } + + override enable(): void { + if (typeof WebSocket === 'undefined') { + this._diag.error('WebSocket is not available in this environment'); + return; + } + + try { + if (isWrapped(_globalThis.WebSocket)) { + this._unwrap(_globalThis, 'WebSocket'); + this._diag.debug('removing previous patch for WebSocket'); + } + + this._wrap(_globalThis, 'WebSocket', this._patchWebSocket.bind(this)); + this._diag.debug('WebSocket instrumentation enabled'); + } catch (error) { + this._diag.error('Failed to enable WebSocket instrumentation', error); + } + } + + override disable(): void { + try { + if (isWrapped(_globalThis.WebSocket)) { + this._unwrap(_globalThis, 'WebSocket'); + this._diag.debug('WebSocket instrumentation disabled'); + } + } catch (error) { + this._diag.error('Failed to disable WebSocket instrumentation', error); + } + } + + private _patchWebSocket(original: typeof WebSocket): typeof WebSocket { + const self = this; + + return class PatchedWebSocket extends original { + private wsSpan: any; + private wsContext: any; + + constructor(url: string, protocols?: string | string[]) { + super(url, protocols); + + const isURLWhitelistEmpty = self.whiteListedURLs.length === 0; + + if (isLocalhost(url) || (!isURLWhitelistEmpty && !self.whiteListedURLs.includes(url))) { + console.log('Skipping WebSocket instrumentation for non-whitelisted URL:', url); + return; + } + + const tracer = self.tracer; + this.wsSpan = tracer.startSpan('WebSocket.connect', { + kind: SpanKind.CLIENT, + attributes: { + 'websocket.url': url, + 'websocket.state': 'connecting', + }, + }); + + this.wsContext = trace.setSpan(context.active(), this.wsSpan); + + this.addEventListener('message', (event) => { + try { + const response = JSON.parse(event.data); + + if (response.requestId && self.pendingRequests.has(response.requestId)) { + const { span } = self.pendingRequests.get(response.requestId)!; + span.end(); + + self.pendingRequests.delete(response.requestId); + } + + const transformedMessage = self.messageTransform(response); + if (!transformedMessage) { + return; + } + + const messageSpan = tracer.startSpan( + 'websocket.receive', + { + kind: SpanKind.CLIENT, + attributes: { + 'websocket.url': url, + 'websocket.message_payload': + typeof transformedMessage === 'string' ? transformedMessage : JSON.stringify(transformedMessage), + }, + }, + this.wsContext + ); + messageSpan.end(); + } catch (_ignored) {} + }); + + this.addEventListener('open', () => { + this.wsSpan.setAttribute('websocket.state', 'connected'); + }); + + this.addEventListener('error', (error: Event) => { + this.wsSpan.setStatus({ + code: SpanStatusCode.ERROR, + message: error instanceof Error ? error.message : 'WebSocket error', + }); + this.wsSpan.setAttribute('websocket.state', 'error'); + }); + + this.addEventListener('close', () => { + this.wsSpan.setAttribute('websocket.state', 'closed'); + this.wsSpan.end(); + }); + + // Patch send method + const originalSend = this.send; + this.send = function (data: string) { + try { + const requestId = generateRequestId(); + let modifiedData; + try { + const payload = JSON.parse(data); + payload.requestId = requestId; + modifiedData = payload; + } catch (e) { + self._diag.debug('Failed to modify payload, not JSON:', e); + + originalSend.call(this, data); + + return; + } + + originalSend.call(this, JSON.stringify(modifiedData)); + + const transformedData = self.sendTransform(modifiedData); + if (!transformedData) { + return; + } + + const sendSpan = tracer.startSpan( + 'websocket.send', + { + kind: SpanKind.CLIENT, + attributes: { + 'websocket.url': url, + 'websocket.message_payload': JSON.stringify(transformedData), + }, + }, + this.wsContext + ); + + self.pendingRequests.set(requestId, { + span: sendSpan, + startTime: Date.now(), + }); + } catch (error: unknown) { + this.wsSpan.setStatus({ + code: SpanStatusCode.ERROR, + message: error instanceof Error ? error.message : 'Unknown error', + }); + throw error; + } + }; + } + } as typeof WebSocket; + } + + private _unpatchWebSocket(WebSocketClass: any) { + return WebSocketClass; + } +} diff --git a/experimental/instrumentation-websocket/src/types.ts b/experimental/instrumentation-websocket/src/types.ts new file mode 100644 index 000000000..a26f7df92 --- /dev/null +++ b/experimental/instrumentation-websocket/src/types.ts @@ -0,0 +1,16 @@ +export type WebSocketMessage> = T; + +export type MessageTransform> = ( + message: WebSocketMessage +) => WebSocketMessage | null | undefined; + +export interface WebSocketInstrumentationConfig> { + messageTransform?: MessageTransform; + sendTransform?: MessageTransform; + whiteListedURLs?: string[]; +} + +export interface PendingRequest { + span: import('@opentelemetry/api').Span; + startTime: number; +} diff --git a/experimental/instrumentation-websocket/src/utils.ts b/experimental/instrumentation-websocket/src/utils.ts new file mode 100644 index 000000000..170b29bfe --- /dev/null +++ b/experimental/instrumentation-websocket/src/utils.ts @@ -0,0 +1,13 @@ +// Helper function to check if URL is localhost +export function isLocalhost(url: string): boolean { + try { + const wsUrl = new URL(url); + return wsUrl.hostname === 'localhost' || wsUrl.hostname === '127.0.0.1' || wsUrl.hostname === '[::1]'; + } catch { + return false; + } +} + +export function generateRequestId(): number { + return Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); +} diff --git a/experimental/instrumentation-websocket/tsconfig.bundle.json b/experimental/instrumentation-websocket/tsconfig.bundle.json new file mode 100644 index 000000000..aca68665a --- /dev/null +++ b/experimental/instrumentation-websocket/tsconfig.bundle.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/bundle/types", + "outDir": "./dist/bundle", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/core.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["./**/*.test.ts"] +} diff --git a/experimental/instrumentation-websocket/tsconfig.cjs.json b/experimental/instrumentation-websocket/tsconfig.cjs.json new file mode 100644 index 000000000..c67096e3a --- /dev/null +++ b/experimental/instrumentation-websocket/tsconfig.cjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.cjs.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/cjs", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationWebSocket.cjs.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-websocket/tsconfig.esm.json b/experimental/instrumentation-websocket/tsconfig.esm.json new file mode 100644 index 000000000..383db4138 --- /dev/null +++ b/experimental/instrumentation-websocket/tsconfig.esm.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/esm", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationWebSocket.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/experimental/instrumentation-websocket/tsconfig.json b/experimental/instrumentation-websocket/tsconfig.json new file mode 100644 index 000000000..d622457a1 --- /dev/null +++ b/experimental/instrumentation-websocket/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "noPropertyAccessFromIndexSignature": false + }, + "references": [ + { "path": "./tsconfig.cjs.json" }, + { "path": "./tsconfig.esm.json" }, + { "path": "./tsconfig.spec.json" } + ] +} diff --git a/experimental/instrumentation-websocket/tsconfig.spec.json b/experimental/instrumentation-websocket/tsconfig.spec.json new file mode 100644 index 000000000..623546315 --- /dev/null +++ b/experimental/instrumentation-websocket/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.spec.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/spec", + "rootDir": "../../", + "tsBuildInfoFile": "../../.cache/tsc/instrumentationWebSocket.spec.tsbuildinfo" + }, + "include": ["./src"], + "references": [{ "path": "../../packages/core/tsconfig.spec.json" }] +} diff --git a/packages/core/src/transports/batchExecutor.ts b/packages/core/src/transports/batchExecutor.ts index 3cfc9ac1a..09c04a824 100644 --- a/packages/core/src/transports/batchExecutor.ts +++ b/packages/core/src/transports/batchExecutor.ts @@ -27,11 +27,13 @@ export class BatchExecutor { // Send batched/buffered data when user navigates to new page, switches or closes the tab, minimizes or closes the browser. // If on mobile, it also sends data if user switches from the browser to a different app. - document.addEventListener('visibilitychange', () => { - if (document.visibilityState === 'hidden') { - this.flush(); - } - }); + if (!options?.ignoreBrowserApi) { + document?.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'hidden') { + this.flush(); + } + }); + } } addItem(item: TransportItem): void { diff --git a/packages/core/src/transports/initialize.ts b/packages/core/src/transports/initialize.ts index 03fb9ac65..274fe0ace 100644 --- a/packages/core/src/transports/initialize.ts +++ b/packages/core/src/transports/initialize.ts @@ -112,6 +112,7 @@ export function initializeTransports( batchExecutor = new BatchExecutor(batchedSend, { sendTimeout: config.batching.sendTimeout, itemLimit: config.batching.itemLimit, + ignoreBrowserApi: config.batching.ignoreBrowserApi, paused, }); } diff --git a/packages/core/src/transports/types.ts b/packages/core/src/transports/types.ts index c994e4201..01014e5a0 100644 --- a/packages/core/src/transports/types.ts +++ b/packages/core/src/transports/types.ts @@ -57,4 +57,6 @@ export interface BatchExecutorOptions { // Buffer "sendLimit" is the number of signals before sending the payload readonly itemLimit?: number; readonly paused?: boolean; + + readonly ignoreBrowserApi?: boolean; } diff --git a/packages/react-native-sdk/.browserslistrc b/packages/react-native-sdk/.browserslistrc new file mode 100644 index 000000000..8528fd685 --- /dev/null +++ b/packages/react-native-sdk/.browserslistrc @@ -0,0 +1 @@ +supports es6-module \ No newline at end of file diff --git a/packages/react-native-sdk/README.md b/packages/react-native-sdk/README.md new file mode 100644 index 000000000..f3743298d --- /dev/null +++ b/packages/react-native-sdk/README.md @@ -0,0 +1,93 @@ +# @grafana/faro-web-sdk + +Faro is a SDK that can instrument frontend JavaScript applications to collect telemetry and forward it to the +[Grafana Alloy][grafana-alloy-docs] (with app agent receiver integration enabled). + +Grafana Alloy can then send this data to either [Loki][grafana-logs] or [Tempo][grafana-traces]. + +## Get started + +See [quick start for web applications][quick-start]. + +Alternatively, you can use the CDN version of the library. See [use cdn library][use-cdn] for details on how to do so. + +## Instrumentations + +- console - captures messages logged to `console` global object. Only `warn`, `info` and `error` levels by default. +- errors - captures unhandled top level exceptions +- web-vitals - captures performance metrics reported by web vitals API +- session - sends session start event +- view - sends view changed event + +## Metas + +- browser - captures browser metadata: name, version, etc +- page - captures current URL +- view - the web SDK enforces a `default` value for the view meta + +## Transports + +- console - logs events to global `console` +- fetch - sends events over HTTP to a backend + +## Example + +Basic set up, will automatically report errors and web vitals: + +```ts +import { initializeFaro } from '@grafana/faro-web-sdk'; + +const faro = initializeFaro({ + url: 'https://agent.myapp/collect', + apiKey: 'secret', + app: { + name: 'frontend', + version: '1.0.0', + }, +}); + +// send a log message +faro.api.pushLog(['hello world']); + +// will be captured +throw new Error('oh no'); + +// push error manually +faro.api.pushError(new Error('oh no')); +``` + +With OTel tracing and browser console capture: + +```ts +import { ConsoleInstrumentation, getWebInstrumentations, initializeFaro } from '@grafana/faro-web-sdk'; +import { TracingInstrumentation } from '@grafana/faro-web-tracing'; + +const faro = initializeFaro({ + url: 'https://agent.myapp/collect', + apiKey: 'secret', + instrumentations: [...getWebInstrumentations({ captureConsole: true }), new TracingInstrumentation()], + app: { + name: 'frontend', + version: '1.0.0', + }, +}); + +// start a span +faro.api + .getOTEL() + ?.trace.getTracer('frontend') + .startActiveSpan('hello world', (span) => { + // send a log message + faro.api.pushLog(['hello world']); + span.end(); + }); + +// will be captured +throw new Error('oh no'); +``` + +[grafana-alloy-docs]: https://grafana.com/docs/alloy/latest/ +[grafana-logs]: https://grafana.com/logs/ +[grafana-traces]: https://grafana.com/traces/ +[quick-start]: https://github.com/grafana/faro-web-sdk/blob/main/docs/sources/tutorials/quick-start-browser.md +[use-cdn]: https://github.com/grafana/faro-web-sdk/blob/main/docs/sources/tutorials/use-cdn-library.md diff --git a/packages/react-native-sdk/globals.ts b/packages/react-native-sdk/globals.ts new file mode 100644 index 000000000..0b11fdc2e --- /dev/null +++ b/packages/react-native-sdk/globals.ts @@ -0,0 +1,7 @@ +import type { Faro } from '@grafana/faro-core'; + +declare global { + interface Window { + faro: Faro; + } +} diff --git a/packages/react-native-sdk/jest.config.js b/packages/react-native-sdk/jest.config.js new file mode 100644 index 000000000..f6da361d6 --- /dev/null +++ b/packages/react-native-sdk/jest.config.js @@ -0,0 +1,7 @@ +const { jestBaseConfig } = require('../../jest.config.base.js'); + +module.exports = { + ...jestBaseConfig, + roots: ['packages/web-sdk/src'], + testEnvironment: 'jsdom', +}; diff --git a/packages/react-native-sdk/package.json b/packages/react-native-sdk/package.json new file mode 100644 index 000000000..a3fbb01c4 --- /dev/null +++ b/packages/react-native-sdk/package.json @@ -0,0 +1,73 @@ +{ + "name": "@grafana/react-native-sdk", + "version": "1.12.2", + "description": "Faro instrumentations, metas, transports for rn.", + "keywords": [ + "observability", + "apm", + "rum", + "logs", + "traces", + "metrics", + "browser" + ], + "license": "Apache-2.0", + "author": "Grafana Labs", + "homepage": "https://github.com/grafana/faro-web-sdk", + "sideEffects": false, + "repository": { + "type": "git", + "url": "https://github.com/grafana/faro-web-sdk.git", + "directory": "packages/web-sdk" + }, + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "files": [ + ".browserslistrc", + "dist", + "globals.ts", + "README.md", + "LICENSE" + ], + "scripts": { + "start": "yarn watch", + "build": "run-s 'build:*'", + "build:compile": "run-p 'build:compile:*'", + "build:compile:cjs": "tsc --build tsconfig.cjs.json", + "build:compile:esm": "tsc --build tsconfig.esm.json", + "build:compile:bundle": "run-s 'build:compile:bundle:*'", + "build:compile:bundle:create": "rollup -c ./rollup.config.js", + "build:compile:bundle:remove-extras": "rimraf dist/bundle/dist", + "watch": "run-s watch:compile", + "watch:compile": "yarn build:compile:cjs -w", + "clean": "rimraf dist/ yarn-error.log", + "quality": "run-s 'quality:*'", + "quality:test": "jest", + "quality:format": "prettier --cache --cache-location=../../.cache/prettier/webSdk --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint": "run-s 'quality:lint:*'", + "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/webSdk --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"", + "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/webSdk --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint:md": "markdownlint README.md", + "quality:circular-deps": "madge --circular ." + }, + "dependencies": { + "@grafana/faro-core": "^1.12.2", + "react-native-device-info": "^14.0.2", + "ua-parser-js": "^1.0.32", + "web-vitals": "^4.0.1" + }, + "devDependencies": { + "@react-native-async-storage/async-storage": "1.15.5", + "@types/ua-parser-js": "^0.7.36", + "react-native": "0.72.6", + "user-agent-data-types": "^0.4.2" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": ">= 1.15.5", + "react-native": ">=0.70.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/react-native-sdk/rollup.config.js b/packages/react-native-sdk/rollup.config.js new file mode 100644 index 000000000..523c1b5a2 --- /dev/null +++ b/packages/react-native-sdk/rollup.config.js @@ -0,0 +1,3 @@ +const { getRollupConfigBase } = require('../../rollup.config.base.js'); + +module.exports = getRollupConfigBase('rnSdk'); diff --git a/packages/react-native-sdk/src/config/getWebInstrumentations.ts b/packages/react-native-sdk/src/config/getWebInstrumentations.ts new file mode 100644 index 000000000..9f73ef9f5 --- /dev/null +++ b/packages/react-native-sdk/src/config/getWebInstrumentations.ts @@ -0,0 +1,28 @@ +import type { Instrumentation } from '@grafana/faro-core'; + +import { + ConsoleInstrumentation, + ErrorsInstrumentation, + SessionInstrumentation, + ViewInstrumentation, +} from '../instrumentations'; + +import type { GetWebInstrumentationsOptions } from './types'; + +export function getWebInstrumentations(options: GetWebInstrumentationsOptions = {}): Instrumentation[] { + const instrumentations: Instrumentation[] = [ + new ErrorsInstrumentation(), + new SessionInstrumentation(), + new ViewInstrumentation(), + ]; + + if (options.captureConsole !== false) { + instrumentations.push( + new ConsoleInstrumentation({ + disabledLevels: options.captureConsoleDisabledLevels, + }) + ); + } + + return instrumentations; +} diff --git a/packages/react-native-sdk/src/config/index.ts b/packages/react-native-sdk/src/config/index.ts new file mode 100644 index 000000000..dfbd0c3ca --- /dev/null +++ b/packages/react-native-sdk/src/config/index.ts @@ -0,0 +1,5 @@ +export { getWebInstrumentations } from './getWebInstrumentations'; + +export { makeCoreConfig } from './makeCoreConfig'; + +export type { BrowserConfig, GetWebInstrumentationsOptions } from './types'; diff --git a/packages/react-native-sdk/src/config/makeCoreConfig.test.ts b/packages/react-native-sdk/src/config/makeCoreConfig.test.ts new file mode 100644 index 000000000..526f2b8ae --- /dev/null +++ b/packages/react-native-sdk/src/config/makeCoreConfig.test.ts @@ -0,0 +1,119 @@ +import { defaultLogArgsSerializer, isFunction } from '@grafana/faro-core'; +import type { LogArgsSerializer } from '@grafana/faro-core'; + +import { defaultMetas } from '../metas/const'; + +import { makeCoreConfig } from './makeCoreConfig'; + +describe('defaultMetas', () => { + it('includes K6Meta in defaultMetas for k6 (lab) sessions configured K6 properties.', () => { + (global as any).k6 = { + testRunId: 'abcde', + }; + + const browserConfig = { + url: 'http://example.com/my-collector', + app: {}, + }; + const config = makeCoreConfig(browserConfig); + + expect(config).toBeTruthy(); + expect(config?.metas).toHaveLength(3); + expect(config?.metas.map((item) => (isFunction(item) ? item() : item))).toContainEqual({ + k6: { + isK6Browser: true, + testRunId: 'abcde', + }, + }); + + delete (global as any).k6; + }); + + it('does not include K6 Object properties if not set', () => { + (global as any).k6 = {}; + + const browserConfig = { + url: 'http://example.com/my-collector', + app: {}, + }; + const config = makeCoreConfig(browserConfig); + + expect(config).toBeTruthy(); + expect(config?.metas).toHaveLength(3); + expect(config?.metas.map((item) => (isFunction(item) ? item() : item))).toContainEqual({ + k6: { isK6Browser: true }, + }); + + delete (global as any).k6; + }); + + it('does not include K6Meta in defaultMetas for non-k6 (field) sessions', () => { + expect(defaultMetas).toHaveLength(2); + expect(defaultMetas.map((item) => (isFunction(item) ? item() : item))).not.toContainEqual({ + k6: { isK6Browser: true }, + }); + }); +}); + +describe('config', () => { + it('includes custom logArgsSerializer if one was provided', () => { + const customLogArgsSerializer: LogArgsSerializer = () => 'test'; + + const browserConfig = { + url: 'http://example.com/my-collector', + app: {}, + logArgsSerializer: customLogArgsSerializer, + }; + const config = makeCoreConfig(browserConfig); + + expect(config).toBeTruthy(); + expect(config?.logArgsSerializer).toBe(customLogArgsSerializer); + }); + + it('includes default logArgsSerializer if no custom one was provided', () => { + const browserConfig = { + url: 'http://example.com/my-collector', + app: {}, + }; + const config = makeCoreConfig(browserConfig); + + expect(config).toBeTruthy(); + expect(config?.logArgsSerializer).toBe(defaultLogArgsSerializer); + }); + + it('adds default urls to ignoreUrls', () => { + const browserConfig = { + url: 'http://example.com/my-collector', + app: {}, + }; + const config = makeCoreConfig(browserConfig); + + expect(config).toBeTruthy(); + expect(config?.ignoreUrls).toEqual([/\/collect(?:\/[\w]*)?$/]); + }); + + it('merges configured urls with default URLs into ignoreUrls list', () => { + const browserConfig = { + url: 'http://example.com/my-collector', + app: {}, + ignoreUrls: ['http://example.com/ignore-me'], + }; + const config = makeCoreConfig(browserConfig); + + expect(config).toBeTruthy(); + expect(config?.ignoreUrls).toEqual([browserConfig.ignoreUrls[0], /\/collect(?:\/[\w]*)?$/]); + }); + + it.each(['http://example.com/collect', 'http://example.com/collect/874jdhalkfh7a9'])( + 'Matches default ignoreUrl with urls ending with /collect or ending with /collect followed by alphanumeric characters', + (url) => { + const config = makeCoreConfig({ url: '', app: {} }); + expect(config).toBeTruthy(); + // @ts-expect-error + expect(config?.ignoreUrls[0]).toEqual(/\/collect(?:\/[\w]*)?$/); + + // @ts-expect-error + expect(config.ignoreUrls[0].test(url)).toBe(true); + } + ); +}); diff --git a/packages/react-native-sdk/src/config/makeCoreConfig.ts b/packages/react-native-sdk/src/config/makeCoreConfig.ts new file mode 100644 index 000000000..94ba9f3df --- /dev/null +++ b/packages/react-native-sdk/src/config/makeCoreConfig.ts @@ -0,0 +1,98 @@ +import { + createInternalLogger, + defaultBatchingConfig, + defaultGlobalObjectKey, + defaultInternalLoggerLevel, + defaultLogArgsSerializer, + defaultUnpatchedConsole, + isObject, +} from '@grafana/faro-core'; +import type { Config, MetaItem, Transport } from '@grafana/faro-core'; + +import { defaultEventDomain } from '../consts'; +import { parseStacktrace } from '../instrumentations'; +import { defaultSessionTrackingConfig } from '../instrumentations/session'; +import { defaultMetas } from '../metas'; +import { k6Meta } from '../metas/k6'; +import { FetchTransport } from '../transports'; + +import { getWebInstrumentations } from './getWebInstrumentations'; +import type { BrowserConfig } from './types'; + +export function makeCoreConfig(browserConfig: BrowserConfig): Config | undefined { + const transports: Transport[] = []; + + const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel); + + if (browserConfig.transports) { + if (browserConfig.url || browserConfig.apiKey) { + internalLogger.error('if "transports" is defined, "url" and "apiKey" should not be defined'); + } + + transports.push(...browserConfig.transports); + } else if (browserConfig.url) { + transports.push( + new FetchTransport({ + url: browserConfig.url, + apiKey: browserConfig.apiKey, + }) + ); + } else { + internalLogger.error('either "url" or "transports" must be defined'); + } + + function createMetas(): MetaItem[] { + const initialMetas = defaultMetas; + + if (browserConfig.metas) { + initialMetas.push(...browserConfig.metas); + } + + const isK6BrowserSession = isObject((window as any).k6); + + if (isK6BrowserSession) { + return [...initialMetas, k6Meta]; + } + + return initialMetas; + } + + const config: Config = { + app: browserConfig.app, + batching: { + ...defaultBatchingConfig, + ...browserConfig.batching, + }, + dedupe: browserConfig.dedupe ?? true, + globalObjectKey: browserConfig.globalObjectKey || defaultGlobalObjectKey, + instrumentations: browserConfig.instrumentations ?? getWebInstrumentations(), + internalLoggerLevel: browserConfig.internalLoggerLevel ?? defaultInternalLoggerLevel, + isolate: browserConfig.isolate ?? false, + logArgsSerializer: browserConfig.logArgsSerializer ?? defaultLogArgsSerializer, + metas: createMetas(), + parseStacktrace, + paused: browserConfig.paused ?? false, + preventGlobalExposure: browserConfig.preventGlobalExposure ?? false, + transports, + unpatchedConsole: browserConfig.unpatchedConsole ?? defaultUnpatchedConsole, + + beforeSend: browserConfig.beforeSend, + eventDomain: browserConfig.eventDomain ?? defaultEventDomain, + ignoreErrors: browserConfig.ignoreErrors, + // ignore cloud collector urls by default. These are URLs ending with /collect or /collect/ followed by alphanumeric characters. + ignoreUrls: (browserConfig.ignoreUrls ?? []).concat([/\/collect(?:\/[\w]*)?$/]), + + sessionTracking: { + ...defaultSessionTrackingConfig, + ...browserConfig.sessionTracking, + }, + + user: browserConfig.user, + view: browserConfig.view, + trackResources: browserConfig.trackResources, + trackWebVitalsAttribution: browserConfig.trackWebVitalsAttribution, + consoleInstrumentation: browserConfig.consoleInstrumentation, + }; + + return config; +} diff --git a/packages/react-native-sdk/src/config/types.ts b/packages/react-native-sdk/src/config/types.ts new file mode 100644 index 000000000..4ae11c431 --- /dev/null +++ b/packages/react-native-sdk/src/config/types.ts @@ -0,0 +1,12 @@ +import type { Config, LogLevel } from '@grafana/faro-core'; + +export interface BrowserConfig extends Partial>, Pick { + url?: string; + apiKey?: string; +} + +export interface GetWebInstrumentationsOptions { + captureConsole?: boolean; + captureConsoleDisabledLevels?: LogLevel[]; + enablePerformanceInstrumentation?: boolean; +} diff --git a/packages/react-native-sdk/src/consts.ts b/packages/react-native-sdk/src/consts.ts new file mode 100644 index 000000000..d28fe0865 --- /dev/null +++ b/packages/react-native-sdk/src/consts.ts @@ -0,0 +1 @@ +export const defaultEventDomain = 'browser'; diff --git a/packages/react-native-sdk/src/index.ts b/packages/react-native-sdk/src/index.ts new file mode 100644 index 000000000..95ea34819 --- /dev/null +++ b/packages/react-native-sdk/src/index.ts @@ -0,0 +1,167 @@ +export { getWebInstrumentations, makeCoreConfig } from './config'; +export type { BrowserConfig } from './config'; + +export { defaultEventDomain } from './consts'; + +export { initializeFaro } from './initialize'; + +export { + buildStackFrame, + ConsoleInstrumentation, + ErrorsInstrumentation, + getDataFromSafariExtensions, + getStackFramesFromError, + parseStacktrace, + ViewInstrumentation, + SessionInstrumentation, +} from './instrumentations'; +export type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations'; + +export { browserMeta, createSession, defaultMetas, pageMeta, sdkMeta } from './metas'; + +export { ConsoleTransport, FetchTransport } from './transports'; +export type { + ClockFn, + ConsoleTransportOptions, + FetchTransportOptions, + FetchTransportRequestOptions, +} from './transports'; + +export { + faro, + allLogLevels, + BaseExtension, + BaseInstrumentation, + BaseTransport, + createInternalLogger, + createPromiseBuffer, + deepEqual, + defaultExceptionType, + defaultGlobalObjectKey, + defaultInternalLoggerLevel, + defaultLogLevel, + genShortID, + getCurrentTimestamp, + getInternalFaroFromGlobalObject, + getTransportBody, + globalObject, + internalGlobalObjectKey, + isArray, + isBoolean, + isDomError, + isDomException, + isElement, + isElementDefined, + isError, + isErrorDefined, + isErrorEvent, + isEvent, + isEventDefined, + isFunction, + isInstanceOf, + isInt, + isInternalFaroOnGlobalObject, + isMap, + isMapDefined, + isNull, + isNumber, + isObject, + isPrimitive, + isRegExp, + isString, + isSymbol, + isSyntheticEvent, + isThenable, + isToString, + isTypeof, + isUndefined, + InternalLoggerLevel, + LogLevel, + noop, + setInternalFaroOnGlobalObject, + TransportItemType, + transportItemTypeToBodyKey, + VERSION, + EVENT_CLICK, + EVENT_NAVIGATION, + EVENT_ROUTE_CHANGE, + EVENT_SESSION_EXTEND, + EVENT_SESSION_RESUME, + EVENT_SESSION_START, + EVENT_VIEW_CHANGED, +} from '@grafana/faro-core'; + +export type { + Faro, + API, + APIEvent, + BaseObject, + BaseObjectKey, + BaseObjectPrimitiveValue, + BaseObjectValue, + BeforeSendHook, + BufferItem, + Config, + EventAttributes, + EventEvent, + EventsAPI, + ExceptionEvent, + ExceptionStackFrame, + ExceptionsAPI, + ExtendedError, + Extension, + GlobalObject, + Instrumentation, + Instrumentations, + InternalLogger, + LogContext, + LogEvent, + LogsAPI, + MeasurementEvent, + MeasurementsAPI, + Meta, + MetaAPI, + MetaApp, + MetaAttributes, + MetaBrowser, + MetaGetter, + MetaItem, + MetaPage, + Metas, + MetaSDK, + MetaSDKIntegration, + MetaSession, + MetaUser, + MetaView, + OTELApi, + Patterns, + PromiseBuffer, + PromiseBufferOptions, + PromiseProducer, + PushErrorOptions, + PushLogOptions, + PushMeasurementOptions, + Stacktrace, + StacktraceParser, + TraceContext, + TraceEvent, + TracesAPI, + Transport, + TransportBody, + TransportItem, + TransportItemPayload, + Transports, + UnpatchedConsole, +} from '@grafana/faro-core'; + +export { + PersistentSessionsManager, + VolatileSessionsManager, + MAX_SESSION_PERSISTENCE_TIME, + MAX_SESSION_PERSISTENCE_TIME_BUFFER, + SESSION_EXPIRATION_TIME, + SESSION_INACTIVITY_TIME, + STORAGE_KEY, +} from './instrumentations/session'; + +export { getIgnoreUrls } from './utils/url'; diff --git a/packages/react-native-sdk/src/initialize.ts b/packages/react-native-sdk/src/initialize.ts new file mode 100644 index 000000000..fbce52b08 --- /dev/null +++ b/packages/react-native-sdk/src/initialize.ts @@ -0,0 +1,15 @@ +import { initializeFaro as coreInit } from '@grafana/faro-core'; +import type { Faro } from '@grafana/faro-core'; + +import { makeCoreConfig } from './config'; +import type { BrowserConfig } from './config'; + +export function initializeFaro(config: BrowserConfig): Faro { + const coreConfig = makeCoreConfig(config); + + if (!coreConfig) { + return undefined!; + } + + return coreInit(coreConfig); +} diff --git a/packages/react-native-sdk/src/instrumentations/console/index.ts b/packages/react-native-sdk/src/instrumentations/console/index.ts new file mode 100644 index 000000000..07f044954 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/console/index.ts @@ -0,0 +1,3 @@ +export { ConsoleInstrumentation } from './instrumentation'; + +export type { ConsoleInstrumentationOptions } from './types'; diff --git a/packages/react-native-sdk/src/instrumentations/console/instrumentation.test.ts b/packages/react-native-sdk/src/instrumentations/console/instrumentation.test.ts new file mode 100644 index 000000000..49d7ae909 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/console/instrumentation.test.ts @@ -0,0 +1,197 @@ +import { initializeFaro, LogLevel, TransportItem } from '@grafana/faro-core'; +import type { ExceptionEvent, LogEvent } from '@grafana/faro-core'; +import { mockConfig, MockTransport } from '@grafana/faro-core/src/testUtils'; + +import { makeCoreConfig } from '../../config'; + +import { ConsoleInstrumentation } from './instrumentation'; + +describe('ConsoleInstrumentation', () => { + const originalConsole = console; + + beforeEach(() => { + global.console = { + error: jest.fn(), + log: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + trace: jest.fn(), + debug: jest.fn(), + } as unknown as Console; + }); + + afterEach(() => { + jest.resetAllMocks(); + jest.restoreAllMocks(); + global.console = originalConsole; + }); + + it('sends a faro error when console.error is called', () => { + const mockTransport = new MockTransport(); + + initializeFaro( + makeCoreConfig( + mockConfig({ + transports: [mockTransport], + instrumentations: [new ConsoleInstrumentation()], + unpatchedConsole: { + error: jest.fn(), + } as unknown as Console, + }) + )! + ); + + console.error('console.error no 1'); + console.error('with object', { foo: 'bar', baz: 'bam' }); + + expect(mockTransport.items).toHaveLength(2); + + expect((mockTransport.items[0] as TransportItem)?.payload.type).toBe('Error'); + expect((mockTransport.items[0] as TransportItem)?.payload.value).toBe( + 'console.error: console.error no 1' + ); + expect((mockTransport.items[1] as TransportItem)?.payload.type).toBe('Error'); + expect((mockTransport.items[1] as TransportItem)?.payload.value).toBe( + 'console.error: with object [object Object]' + ); + }); + + it('Handles objects with circular references', () => { + const mockTransport = new MockTransport(); + + initializeFaro( + makeCoreConfig( + mockConfig({ + transports: [mockTransport], + instrumentations: [new ConsoleInstrumentation()], + unpatchedConsole: { + error: jest.fn(), + } as unknown as Console, + }) + )! + ); + + const objWithCircularRef = { foo: 'bar', baz: 'bam' }; + (objWithCircularRef as any).circular = objWithCircularRef; + + console.error('with circular refs object', objWithCircularRef); + + expect((mockTransport.items[0] as TransportItem)?.payload.value).toBe( + 'console.error: with circular refs object [object Object]' + ); + }); + + it('sends a faro log for console.error calls if configured', () => { + const mockTransport = new MockTransport(); + + initializeFaro( + makeCoreConfig( + mockConfig({ + transports: [mockTransport], + instrumentations: [new ConsoleInstrumentation()], + unpatchedConsole: { + error: jest.fn(), + } as unknown as Console, + consoleInstrumentation: { + consoleErrorAsLog: true, + }, + }) + )! + ); + + console.error('console.error log no 1'); + console.error('console.error log with object', { foo: 'bar', baz: 'bam' }); + + expect(mockTransport.items).toHaveLength(2); + + expect((mockTransport.items[0] as TransportItem)?.payload.message).toBe('console.error log no 1'); + expect((mockTransport.items[1] as TransportItem)?.payload.message).toBe( + 'console.error log with object [object Object]' + ); + }); + + it('Uses legacy config options', () => { + const mockTransport = new MockTransport(); + initializeFaro( + makeCoreConfig( + mockConfig({ + transports: [mockTransport], + instrumentations: [ + new ConsoleInstrumentation({ + consoleErrorAsLog: true, + disabledLevels: [LogLevel.LOG], + }), + ], + unpatchedConsole: { + error: jest.fn(), + log: jest.fn(), + info: jest.fn(), + } as unknown as Console, + }) + )! + ); + + console.error('error logs are enabled'); + console.info('info logs are enabled'); + console.log('log logs are disabled'); + + expect(mockTransport.items).toHaveLength(2); + expect((mockTransport.items[0] as TransportItem)?.payload.message).toBe('error logs are enabled'); + expect((mockTransport.items[1] as TransportItem)?.payload.message).toBe('info logs are enabled'); + }); + + it('sends logs for the default enabled event if no config is provided', () => { + const mockTransport = new MockTransport(); + + initializeFaro( + makeCoreConfig( + mockConfig({ + transports: [mockTransport], + instrumentations: [new ConsoleInstrumentation()], + unpatchedConsole: { + error: jest.fn(), + log: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + trace: jest.fn(), + debug: jest.fn(), + } as unknown as Console, + }) + )! + ); + + // included by default + const infoLogMessage = 'info is logged by default'; + console.info(infoLogMessage); + + const warnLogMessage = 'warn is logged by default'; + console.warn(warnLogMessage); + + const errorLogMessage = 'error is logged by default'; + console.error(errorLogMessage); + + const excludedLogMessage = "log isn't logged by default"; + + // excluded by default + console.log(excludedLogMessage); + const excludedTraceLogMessage = "trace isn't logged by default"; + // eslint-disable-next-line no-console + console.trace(excludedTraceLogMessage); + const excludedDebugMessage = "debug isn't logged by default"; + // eslint-disable-next-line no-console + console.debug(excludedDebugMessage); + + expect(mockTransport.items).toHaveLength(3); + + expect((mockTransport.items[0] as TransportItem)?.payload.message).toBe(infoLogMessage); + expect((mockTransport.items[0] as TransportItem)?.payload.level).toBe('info'); + + expect((mockTransport.items[1] as TransportItem)?.payload.message).toBe(warnLogMessage); + expect((mockTransport.items[1] as TransportItem)?.payload.level).toBe('warn'); + + // error is logged by default and is logged as an exception signal + expect((mockTransport.items[2] as TransportItem)?.payload.value).toBe( + 'console.error: ' + errorLogMessage + ); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/console/instrumentation.ts b/packages/react-native-sdk/src/instrumentations/console/instrumentation.ts new file mode 100644 index 000000000..4dfe8cb3c --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/console/instrumentation.ts @@ -0,0 +1,40 @@ +import { allLogLevels, BaseInstrumentation, defaultLogArgsSerializer, LogLevel, VERSION } from '@grafana/faro-core'; + +import type { ConsoleInstrumentationOptions } from './types'; + +export class ConsoleInstrumentation extends BaseInstrumentation { + readonly name = '@grafana/faro-web-sdk:instrumentation-console'; + readonly version = VERSION; + + static defaultDisabledLevels: LogLevel[] = [LogLevel.DEBUG, LogLevel.TRACE, LogLevel.LOG]; + + constructor(private options: ConsoleInstrumentationOptions = {}) { + super(); + } + + initialize() { + this.logDebug('Initializing\n', this.options); + this.options = { ...this.options, ...this.config.consoleInstrumentation }; + + allLogLevels + .filter( + (level) => !(this.options?.disabledLevels ?? ConsoleInstrumentation.defaultDisabledLevels).includes(level) + ) + .forEach((level) => { + /* eslint-disable-next-line no-console */ + console[level] = (...args) => { + try { + if (level === LogLevel.ERROR && !this.options?.consoleErrorAsLog) { + this.api.pushError(new Error('console.error: ' + defaultLogArgsSerializer(args))); + } else { + this.api.pushLog(args, { level }); + } + } catch (err) { + this.logError(err); + } finally { + this.unpatchedConsole[level](...args); + } + }; + }); + } +} diff --git a/packages/react-native-sdk/src/instrumentations/console/types.ts b/packages/react-native-sdk/src/instrumentations/console/types.ts new file mode 100644 index 000000000..4c8166a3d --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/console/types.ts @@ -0,0 +1,7 @@ +import type { Config } from '@grafana/faro-core'; + +/** + * @deprecated Configure console instrumentation using the `consoleInstrumentation` object in the + * Faro config. + */ +export type ConsoleInstrumentationOptions = Config['consoleInstrumentation']; diff --git a/packages/react-native-sdk/src/instrumentations/errors/const.ts b/packages/react-native-sdk/src/instrumentations/errors/const.ts new file mode 100644 index 000000000..6b97592b0 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/const.ts @@ -0,0 +1,12 @@ +export const primitiveUnhandledValue = 'Non-Error promise rejection captured with value:'; +export const primitiveUnhandledType = 'UnhandledRejection'; + +export const domErrorType = 'DOMError'; +export const domExceptionType = 'DOMException'; + +export const objectEventValue = 'Non-Error exception captured with keys:'; + +export const unknownSymbolString = '?'; + +export const valueTypeRegex = + /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i; diff --git a/packages/react-native-sdk/src/instrumentations/errors/getErrorDetails.ts b/packages/react-native-sdk/src/instrumentations/errors/getErrorDetails.ts new file mode 100644 index 000000000..40658b43b --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/getErrorDetails.ts @@ -0,0 +1,33 @@ +import { isDomError, isDomException, isError, isErrorEvent, isEvent, isObject } from '@grafana/faro-core'; +import type { ExceptionStackFrame } from '@grafana/faro-core'; + +import { domErrorType, domExceptionType, objectEventValue } from './const'; +import { getStackFramesFromError } from './stackFrames'; +import type { ErrorEvent } from './types'; + +export function getErrorDetails(evt: ErrorEvent): [string | undefined, string | undefined, ExceptionStackFrame[]] { + let value: string | undefined; + let type: string | undefined; + let stackFrames: ExceptionStackFrame[] = []; + let isDomErrorRes: boolean | undefined; + let isEventRes: boolean | undefined; + + if (isErrorEvent(evt) && evt.error) { + value = evt.error.message; + type = evt.error.name; + stackFrames = getStackFramesFromError(evt.error); + } else if ((isDomErrorRes = isDomError(evt)) || isDomException(evt)) { + const { name, message } = evt; + + type = name ?? (isDomErrorRes ? domErrorType : domExceptionType); + value = message ? `${type}: ${message}` : type; + } else if (isError(evt)) { + value = evt.message; + stackFrames = getStackFramesFromError(evt); + } else if (isObject(evt) || (isEventRes = isEvent(evt))) { + type = isEventRes ? evt.constructor.name : undefined; + value = `${objectEventValue} ${Object.keys(evt)}`; + } + + return [value, type, stackFrames]; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/getValueAndTypeFromMessage.ts b/packages/react-native-sdk/src/instrumentations/errors/getValueAndTypeFromMessage.ts new file mode 100644 index 000000000..7781e1435 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/getValueAndTypeFromMessage.ts @@ -0,0 +1,12 @@ +import { defaultExceptionType } from '@grafana/faro-core'; + +import { valueTypeRegex } from './const'; + +export function getValueAndTypeFromMessage(message: string): [string, string] { + const groups = message.match(valueTypeRegex); + + const type = groups?.[1] ?? defaultExceptionType; + const value = groups?.[2] ?? message; + + return [value, type]; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/index.ts b/packages/react-native-sdk/src/instrumentations/errors/index.ts new file mode 100644 index 000000000..903343a78 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/index.ts @@ -0,0 +1,5 @@ +export { ErrorsInstrumentation } from './instrumentation'; + +export { buildStackFrame, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace } from './stackFrames'; + +export type { ErrorEvent, ExtendedPromiseRejectionEvent } from './types'; diff --git a/packages/react-native-sdk/src/instrumentations/errors/instrumentation.ts b/packages/react-native-sdk/src/instrumentations/errors/instrumentation.ts new file mode 100644 index 000000000..2fbd2dfdb --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/instrumentation.ts @@ -0,0 +1,17 @@ +import { BaseInstrumentation, VERSION } from '@grafana/faro-core'; + +import { registerOnerror } from './registerOnerror'; +import { registerOnunhandledrejection } from './registerOnunhandledrejection'; + +export class ErrorsInstrumentation extends BaseInstrumentation { + readonly name = '@grafana/faro-web-sdk:instrumentation-errors'; + readonly version = VERSION; + + initialize(): void { + this.logDebug('Initializing'); + + registerOnerror(this.api); + + registerOnunhandledrejection(this.api); + } +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/registerOnerror.test.ts b/packages/react-native-sdk/src/instrumentations/errors/registerOnerror.test.ts new file mode 100644 index 000000000..c4f9a118f --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/registerOnerror.test.ts @@ -0,0 +1,28 @@ +import { mockConfig, MockTransport } from '@grafana/faro-core/src/testUtils'; + +import { initializeFaro } from '../../initialize'; + +import { registerOnerror } from './registerOnerror'; + +describe('registerOnerror', () => { + it('will preserve the old callback', () => { + let called = false; + + window.onerror = () => { + called = true; + }; + + const transport = new MockTransport(); + const { api } = initializeFaro( + mockConfig({ + transports: [transport], + }) + ); + + registerOnerror(api); + + window.onerror('boo', 'some file', 10, 10, new Error('boo')); + expect(called).toBe(true); + expect(transport.items).toHaveLength(1); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/errors/registerOnerror.ts b/packages/react-native-sdk/src/instrumentations/errors/registerOnerror.ts new file mode 100644 index 000000000..2142675de --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/registerOnerror.ts @@ -0,0 +1,39 @@ +import { isString } from '@grafana/faro-core'; +import type { API, ExceptionStackFrame } from '@grafana/faro-core'; + +import { unknownSymbolString } from './const'; +import { getErrorDetails } from './getErrorDetails'; +import { getValueAndTypeFromMessage } from './getValueAndTypeFromMessage'; +import { buildStackFrame } from './stackFrames'; + +export function registerOnerror(api: API): void { + const oldOnerror = window.onerror; + + window.onerror = (...args) => { + try { + const [evt, source, lineno, colno, error] = args; + let value: string | undefined; + let type: string | undefined; + let stackFrames: ExceptionStackFrame[] = []; + const eventIsString = isString(evt); + const initialStackFrame = buildStackFrame(source, unknownSymbolString, lineno, colno); + + if (error || !eventIsString) { + [value, type, stackFrames] = getErrorDetails((error ?? evt) as Error | Event); + + if (stackFrames.length === 0) { + stackFrames = [initialStackFrame]; + } + } else if (eventIsString) { + [value, type] = getValueAndTypeFromMessage(evt); + stackFrames = [initialStackFrame]; + } + + if (value) { + api.pushError(new Error(value), { type, stackFrames }); + } + } finally { + oldOnerror?.apply(window, args); + } + }; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/registerOnunhandledrejection.ts b/packages/react-native-sdk/src/instrumentations/errors/registerOnunhandledrejection.ts new file mode 100644 index 000000000..a55399fb9 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/registerOnunhandledrejection.ts @@ -0,0 +1,31 @@ +import { type API, type ExceptionStackFrame, isPrimitive } from '@grafana/faro-core'; + +import { primitiveUnhandledType, primitiveUnhandledValue } from './const'; +import { getErrorDetails } from './getErrorDetails'; +import type { ExtendedPromiseRejectionEvent } from './types'; + +export function registerOnunhandledrejection(api: API): void { + window.addEventListener('unhandledrejection', (evt: ExtendedPromiseRejectionEvent) => { + let error = evt; + + if (error.reason) { + error = evt.reason; + } else if (evt.detail?.reason) { + error = evt.detail?.reason; + } + + let value: string | undefined; + let type: string | undefined; + let stackFrames: ExceptionStackFrame[] = []; + if (isPrimitive(error)) { + value = `${primitiveUnhandledValue} ${String(error)}`; + type = primitiveUnhandledType; + } else { + [value, type, stackFrames] = getErrorDetails(error); + } + + if (value) { + api.pushError(new Error(value), { type, stackFrames }); + } + }); +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/stackFrames/buildStackFrame.ts b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/buildStackFrame.ts new file mode 100644 index 000000000..9d0012303 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/buildStackFrame.ts @@ -0,0 +1,25 @@ +import type { ExceptionStackFrame } from '@grafana/faro-core'; + +import { unknownSymbolString } from './const'; + +export function buildStackFrame( + filename: string | undefined, + func: string | undefined, + lineno: number | undefined, + colno: number | undefined +): ExceptionStackFrame { + const stackFrame: ExceptionStackFrame = { + filename: filename || document.location.href, + function: func || unknownSymbolString, + }; + + if (lineno !== undefined) { + stackFrame.lineno = lineno; + } + + if (colno !== undefined) { + stackFrame.colno = colno; + } + + return stackFrame; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/stackFrames/const.ts b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/const.ts new file mode 100644 index 000000000..00dd57d7e --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/const.ts @@ -0,0 +1,21 @@ +export const newLineString = '\n'; +export const evalString = 'eval'; +export const unknownSymbolString = '?'; +export const atString = '@'; + +export const webkitLineRegex = + /^\s*at (?:(.*\).*?|.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack||[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; +export const webkitEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/; +export const webkitEvalString = 'eval'; +export const webkitAddressAtString = 'address at '; +export const webkitAddressAtStringLength = webkitAddressAtString.length; + +export const firefoxLineRegex = + /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|safari-extension|safari-web-extension|capacitor)?:\/.*?|\[native code]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i; +export const firefoxEvalRegex = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; +export const firefoxEvalString = ' > eval'; + +export const safariExtensionString = 'safari-extension'; +export const safariWebExtensionString = 'safari-web-extension'; + +export const reactMinifiedRegex = /Minified React error #\d+;/i; diff --git a/packages/react-native-sdk/src/instrumentations/errors/stackFrames/getDataFromSafariExtensions.ts b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/getDataFromSafariExtensions.ts new file mode 100644 index 000000000..a27260f2d --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/getDataFromSafariExtensions.ts @@ -0,0 +1,18 @@ +import { atString, safariExtensionString, safariWebExtensionString } from './const'; + +export function getDataFromSafariExtensions( + func: string | undefined, + filename: string | undefined +): [string | undefined, string | undefined] { + const isSafariExtension = func?.includes(safariExtensionString); + const isSafariWebExtension = !isSafariExtension && func?.includes(safariWebExtensionString); + + if (!isSafariExtension && !isSafariWebExtension) { + return [func, filename]; + } + + return [ + func?.includes(atString) ? func.split(atString)[0] : func, + isSafariExtension ? `${safariExtensionString}:${filename}` : `${safariWebExtensionString}:${filename}`, + ]; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/stackFrames/getStackFramesFromError.ts b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/getStackFramesFromError.ts new file mode 100644 index 000000000..e18627d96 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/getStackFramesFromError.ts @@ -0,0 +1,89 @@ +import { isNumber } from '@grafana/faro-core'; +import type { ExceptionStackFrame, ExtendedError } from '@grafana/faro-core'; + +import { buildStackFrame } from './buildStackFrame'; +import { + evalString, + firefoxEvalRegex, + firefoxEvalString, + firefoxLineRegex, + newLineString, + reactMinifiedRegex, + webkitAddressAtString, + webkitAddressAtStringLength, + webkitEvalRegex, + webkitEvalString, + webkitLineRegex, +} from './const'; +import { getDataFromSafariExtensions } from './getDataFromSafariExtensions'; + +export function getStackFramesFromError(error: ExtendedError): ExceptionStackFrame[] { + let lines: string[] = []; + + if (error.stacktrace) { + lines = error.stacktrace.split(newLineString).filter((_line, idx) => idx % 2 === 0); + } else if (error.stack) { + lines = error.stack.split(newLineString); + } + + const stackFrames = lines.reduce((acc, line, idx) => { + let parts: RegExpExecArray | null; + let func: string | undefined; + let filename: string | undefined; + let lineno: string | undefined; + let colno: string | undefined; + + if ((parts = webkitLineRegex.exec(line))) { + func = parts[1]; + filename = parts[2]; + lineno = parts[3]; + colno = parts[4]; + + if (filename?.startsWith(webkitEvalString)) { + const submatch = webkitEvalRegex.exec(filename); + + if (submatch) { + filename = submatch[1]; + lineno = submatch[2]; + colno = submatch[3]; + } + } + + filename = filename?.startsWith(webkitAddressAtString) + ? filename.substring(webkitAddressAtStringLength) + : filename; + [func, filename] = getDataFromSafariExtensions(func, filename); + } else if ((parts = firefoxLineRegex.exec(line))) { + func = parts[1]; + filename = parts[3]; + lineno = parts[4]; + colno = parts[5]; + + if (!!filename && filename.includes(firefoxEvalString)) { + const submatch = firefoxEvalRegex.exec(filename); + + if (submatch) { + func = func || evalString; + filename = submatch[1]; + lineno = submatch[2]; + } + } else if (idx === 0 && !colno && isNumber(error.columnNumber)) { + colno = String(error.columnNumber! + 1); + } + + [func, filename] = getDataFromSafariExtensions(func, filename); + } + + if (filename || func) { + acc.push(buildStackFrame(filename, func, lineno ? Number(lineno) : undefined, colno ? Number(colno) : undefined)); + } + + return acc; + }, [] as ExceptionStackFrame[]); + + if (reactMinifiedRegex.test(error.message)) { + return stackFrames.slice(1); + } + + return stackFrames; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/stackFrames/index.ts b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/index.ts new file mode 100644 index 000000000..57049b8f8 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/index.ts @@ -0,0 +1,7 @@ +export { buildStackFrame } from './buildStackFrame'; + +export { getDataFromSafariExtensions } from './getDataFromSafariExtensions'; + +export { getStackFramesFromError } from './getStackFramesFromError'; + +export { parseStacktrace } from './parseStacktrace'; diff --git a/packages/react-native-sdk/src/instrumentations/errors/stackFrames/parseStacktrace.ts b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/parseStacktrace.ts new file mode 100644 index 000000000..353855c94 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/stackFrames/parseStacktrace.ts @@ -0,0 +1,9 @@ +import type { ExtendedError, Stacktrace } from '@grafana/faro-core'; + +import { getStackFramesFromError } from './getStackFramesFromError'; + +export function parseStacktrace(error: ExtendedError): Stacktrace { + return { + frames: getStackFramesFromError(error), + }; +} diff --git a/packages/react-native-sdk/src/instrumentations/errors/types.ts b/packages/react-native-sdk/src/instrumentations/errors/types.ts new file mode 100644 index 000000000..4eabd1286 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/errors/types.ts @@ -0,0 +1,9 @@ +export interface ExtendedPromiseRejectionEvent extends PromiseRejectionEvent { + detail?: { + reason: PromiseRejectionEvent['reason']; + }; +} + +export type ErrorEvent = (Error | Event) & { + error?: Error; +}; diff --git a/packages/react-native-sdk/src/instrumentations/index.ts b/packages/react-native-sdk/src/instrumentations/index.ts new file mode 100644 index 000000000..cce07ec5c --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/index.ts @@ -0,0 +1,15 @@ +export { SessionInstrumentation } from './session'; + +export { ConsoleInstrumentation } from './console'; +export type { ConsoleInstrumentationOptions } from './console'; + +export { + buildStackFrame, + ErrorsInstrumentation, + getDataFromSafariExtensions, + getStackFramesFromError, + parseStacktrace, +} from './errors'; +export type { ErrorEvent, ExtendedPromiseRejectionEvent } from './errors'; + +export { ViewInstrumentation } from './view'; diff --git a/packages/react-native-sdk/src/instrumentations/instrumentationConstants.ts b/packages/react-native-sdk/src/instrumentations/instrumentationConstants.ts new file mode 100644 index 000000000..b634fc93e --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/instrumentationConstants.ts @@ -0,0 +1 @@ +export const NAVIGATION_ID_STORAGE_KEY = 'com.grafana.faro.lastNavigationId'; diff --git a/packages/react-native-sdk/src/instrumentations/session/index.ts b/packages/react-native-sdk/src/instrumentations/session/index.ts new file mode 100644 index 000000000..0cf17888b --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/index.ts @@ -0,0 +1,16 @@ +export { SessionInstrumentation } from './instrumentation'; + +export { + MAX_SESSION_PERSISTENCE_TIME, + MAX_SESSION_PERSISTENCE_TIME_BUFFER, + PersistentSessionsManager, + SESSION_EXPIRATION_TIME, + SESSION_INACTIVITY_TIME, + STORAGE_KEY, + STORAGE_UPDATE_DELAY, + VolatileSessionsManager, + defaultSessionTrackingConfig, + isSampled, +} from './sessionManager'; + +export type { FaroUserSession } from './sessionManager'; diff --git a/packages/react-native-sdk/src/instrumentations/session/instrumentation.test.ts b/packages/react-native-sdk/src/instrumentations/session/instrumentation.test.ts new file mode 100644 index 000000000..d8890c963 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/instrumentation.test.ts @@ -0,0 +1,689 @@ +import { + dateNow, + EVENT_SESSION_EXTEND, + EVENT_SESSION_RESUME, + EVENT_SESSION_START, + initializeFaro, +} from '@grafana/faro-core'; +import type { EventEvent, MetaSession, TransportItem } from '@grafana/faro-core'; +import { mockConfig, MockTransport } from '@grafana/faro-core/src/testUtils'; + +import { makeCoreConfig } from '../../config/makeCoreConfig'; +import { createSession } from '../../metas/session'; +import * as createSessionMock from '../../metas/session'; + +import { SessionInstrumentation } from './instrumentation'; +import { + FaroUserSession, + MAX_SESSION_PERSISTENCE_TIME, + SESSION_EXPIRATION_TIME, + SESSION_INACTIVITY_TIME, + STORAGE_KEY, +} from './sessionManager'; +import * as samplingModuleMock from './sessionManager/sampling'; +import { createUserSessionObject } from './sessionManager/sessionManagerUtils'; + +describe('SessionInstrumentation', () => { + let mockStorage: Record = {}; + let setItemSpy: jest.SpyInstance; + let getItemSpy: jest.SpyInstance; + let removeItemSpy: jest.SpyInstance; + + beforeAll(() => { + jest.useFakeTimers(); + setItemSpy = jest.spyOn(global.Storage.prototype, 'setItem').mockImplementation((key, value) => { + mockStorage[key] = value; + }); + + getItemSpy = jest.spyOn(global.Storage.prototype, 'getItem').mockImplementation((key) => mockStorage[key] ?? null); + + removeItemSpy = jest.spyOn(global.Storage.prototype, 'removeItem').mockImplementation((key) => { + delete mockStorage[key]; + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + jest.clearAllTimers(); + jest.spyOn(samplingModuleMock, 'isSampled').mockRestore(); + mockStorage = {}; + }); + + afterAll(() => { + jest.useRealTimers(); + getItemSpy.mockRestore(); + setItemSpy.mockRestore(); + removeItemSpy.mockRestore(); + }); + + it('will send session start event on initialize.', () => { + const transport = new MockTransport(); + const session = createSession({ foo: 'bar' }); + + initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + session, + }, + }) + ); + + expect(transport.items).toHaveLength(1); + + const event = transport.items[0]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_START); + expect(event.meta.session?.attributes).toEqual({ foo: 'bar' }); + expect(event.meta.session?.id).toEqual(session.id); + }); + + it('will send session start event for new session.', () => { + const transport = new MockTransport(); + const session = createSession({ foo: 'bar' }); + + const config = mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: false, + session, + samplingRate: 1, + }, + }); + + const { api, metas } = initializeFaro(config); + + expect(transport.items).toHaveLength(1); + + let event = transport.items[0]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_START); + expect(event.meta.session?.id).toEqual(session.id); + + metas.add({ user: { id: 'foo' } }); + expect(transport.items).toHaveLength(1); + + const newSession = createSession(); + api.setSession(newSession); + expect(transport.items).toHaveLength(2); + expect(event.payload.name).toEqual(EVENT_SESSION_START); + + event = transport.items[1]! as TransportItem; + expect(event.meta.session?.id).toEqual(newSession.id); + }); + + it('will send session_resume event if valid user-session exists in web storage.', () => { + const transport = new MockTransport(); + + const mockNewSessionId = '123'; + mockStorage[STORAGE_KEY] = JSON.stringify(createUserSessionObject({ sessionId: mockNewSessionId })); + + initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + samplingRate: 1, // default + }, + }) + ); + + expect(transport.items).toHaveLength(1); + + let event = transport.items[0]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_RESUME); + }); + + it('will send session_extend event if a new session is crated by Faro or manually.', () => { + const transport = new MockTransport(); + + const mockNewSessionId = '123'; + const mockUserSession = createUserSessionObject({ sessionId: mockNewSessionId }); + + mockStorage[STORAGE_KEY] = JSON.stringify(mockUserSession); + + const { api } = initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: true, + samplingRate: 1, // default + }, + }) + ); + + expect(transport.items).toHaveLength(1); + + let event = transport.items[0]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_RESUME); + + jest.advanceTimersByTime(SESSION_EXPIRATION_TIME + 1); + + api.pushLog(['advanceTimersByTime']); + + expect(transport.items).toHaveLength(3); + // extending the session happens before the event is sent, we look at the second item + event = transport.items[1]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_EXTEND); + + api.setSession({ id: '456' }); + + expect(transport.items).toHaveLength(4); + event = transport.items[3]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_EXTEND); + }); + + it('Initialize session meta with user defined id and attributes provided via the initial session property.', () => { + const mockSessionMeta: MetaSession = { + id: 'new-session', + attributes: { + foo: 'bar', + isSampled: 'true', + }, + }; + + const { metas } = initializeFaro( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + session: mockSessionMeta, + samplingRate: 1, // default + }, + }) + ); + + expect(metas.value.session).toStrictEqual(mockSessionMeta); + + const sessionFromStorage: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]!); + + expect(sessionFromStorage).toStrictEqual({ + sessionId: 'new-session', + isSampled: true, + + // lastActivity and started values are not important for this test so it's ok to take them form the object we verify. + lastActivity: sessionFromStorage.lastActivity, + started: sessionFromStorage.started, + + sessionMeta: { + id: 'new-session', + attributes: { + foo: 'bar', + + // Faro doesn't care about the isSampled value in the meta form localStorage. But it's not worthy to remove it tbh. + isSampled: 'true', + }, + }, + }); + }); + + it('Adds user defined attributes to the extended session meta.', () => { + const mockSessionMeta: MetaSession = { + id: 'new-session', + attributes: { + foo: 'bar', + isSampled: 'true', + }, + }; + + const { api, metas } = initializeFaro( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + session: mockSessionMeta, + samplingRate: 1, // default + }, + }) + ); + + expect(metas.value.session).toStrictEqual(mockSessionMeta); + + expect(metas.value.session).toStrictEqual({ + ...mockSessionMeta, + attributes: { + ...mockSessionMeta.attributes, + }, + }); + + let sessionFromStorage: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]!); + + expect(sessionFromStorage).toStrictEqual({ + sessionId: 'new-session', + isSampled: true, + + // lastActivity and started values are not important for this test so it's ok to take them form the object we verify. + lastActivity: sessionFromStorage.lastActivity, + started: sessionFromStorage.started, + + sessionMeta: { + id: 'new-session', + attributes: { + foo: 'bar', + isSampled: 'true', + }, + }, + }); + + api.setSession({ id: 'extended-session-id', attributes: { location: 'neptun', foo: 'abc' } }); + + expect(metas.value.session).toStrictEqual({ + id: 'extended-session-id', + attributes: { + ...mockSessionMeta.attributes, + location: 'neptun', + foo: 'abc', + previousSession: 'new-session', + }, + }); + + sessionFromStorage = JSON.parse(mockStorage[STORAGE_KEY]!); + + expect(sessionFromStorage).toStrictEqual({ + sessionId: 'extended-session-id', + isSampled: true, + + // lastActivity and started values are not important for this test so it's ok to take them form the object we verify. + lastActivity: sessionFromStorage.lastActivity, + started: sessionFromStorage.started, + + sessionMeta: { + id: 'extended-session-id', + attributes: { + location: 'neptun', + foo: 'abc', + previousSession: 'new-session', + isSampled: 'true', + }, + }, + }); + }); + + it('Initialize session meta with meta attributes from session picked up from web storage.', () => { + const mockSessionMeta: MetaSession = { + id: 'new-session', + attributes: { + foo: 'bar', + location: 'mars', + isSampled: 'true', + }, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify({ + sessionId: mockSessionMeta.id, + sessionMeta: mockSessionMeta, + } as FaroUserSession); + + const { metas } = initializeFaro( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + session: mockSessionMeta, + samplingRate: 1, // default + }, + }) + ); + + expect(metas.value.session).toStrictEqual(mockSessionMeta); + }); + + it('creates new session meta for browser with no faro session stored in web storage.', () => { + const mockSessionMeta = { id: 'new-session', attributes: { isSampled: 'true' } }; + jest.spyOn(createSessionMock, 'createSession').mockReturnValueOnce(mockSessionMeta); + + const { metas } = initializeFaro( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + samplingRate: 1, // default + }, + }) + ); + + expect(metas.value.session).toStrictEqual(mockSessionMeta); + }); + + it('creates session meta with id from persisted session for valid tracked session which is within maxSessionPersistenceTime.', () => { + const mockUserSession = createUserSessionObject({ sessionId: 'persisted-session' }); + mockUserSession.sessionMeta = { + id: 'persisted-session', + attributes: { + foo: 'bar', + isSampled: 'true', + }, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(mockUserSession); + + jest.advanceTimersByTime(SESSION_INACTIVITY_TIME - 1); + + const config = makeCoreConfig( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: true, + samplingRate: 1, // default + }, + }) + ); + const { metas } = initializeFaro(config!); + + expect(metas.value.session?.id).toBe(mockUserSession.sessionId); + expect(metas.value.session?.attributes).toStrictEqual(mockUserSession.sessionMeta.attributes); + }); + + it('creates new session meta with new sessionId for invalid tracked session which is within maxSessionPersistenceTime.', () => { + const started = dateNow(); + const mockUserSession = createUserSessionObject({ sessionId: 'persisted-session', started }); + mockUserSession.sessionMeta = { + id: 'persisted-session', + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(mockUserSession); + + jest.advanceTimersByTime(MAX_SESSION_PERSISTENCE_TIME); + + const config = makeCoreConfig( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: true, + samplingRate: 1, // default + }, + }) + ); + + const { metas } = initializeFaro(config!); + + expect(removeItemSpy).toBeCalledTimes(0); + expect(metas.value.session?.id).not.toBe(mockUserSession.sessionId); + + const sessionFromStorage: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]); + // creates new started timestamp + expect(sessionFromStorage.started).not.toBe(started); + }); + + it('Deletes persisted session if maxSessionPersistenceTime is reached and creates new session meta.', () => { + const mockUserSession = createUserSessionObject({ sessionId: 'persisted-session' }); + mockUserSession.sessionMeta = { + id: 'persisted-session', + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(mockUserSession); + + jest.advanceTimersByTime(MAX_SESSION_PERSISTENCE_TIME + 1); + + const config = makeCoreConfig( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: true, + samplingRate: 1, // default + }, + }) + ); + + const { metas } = initializeFaro(config!); + + expect(removeItemSpy).toBeCalledTimes(1); + expect(metas.value.session?.id).not.toBe(mockUserSession.sessionId); + }); + + it('Removes items which are not part of the sample.', () => { + const transport = new MockTransport(); + + jest.spyOn(samplingModuleMock, 'isSampled').mockReturnValue(true); + + const { api } = initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + }) + ); + + expect(transport.items).toHaveLength(1); + api.pushLog(['abc']); + + expect(transport.items).toHaveLength(2); + api.pushEvent('def'); + + expect(transport.items).toHaveLength(3); + + jest.spyOn(samplingModuleMock, 'isSampled').mockReturnValueOnce(false); + api.setSession({ id: 'second-session-with-sampling-set-to-false' }); + expect(transport.items).toHaveLength(3); + + api.pushLog(['this log should not be sent']); + expect(transport.items).toHaveLength(3); + }); + + it('Will use sampling decision from valid session from web storage.', () => { + const initialIsSampled = true; + const mockUserSession = createUserSessionObject({ + sessionId: 'persisted-session-ac', + isSampled: initialIsSampled, + }); + + mockStorage[STORAGE_KEY] = JSON.stringify(mockUserSession); + + const config = makeCoreConfig( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: true, + samplingRate: 0, + }, + }) + ); + + const { api } = initializeFaro(config!); + const sessionMeta = api.getSession(); + + expect(sessionMeta?.attributes?.['isSampled']).toBe(initialIsSampled.toString()); + expect((JSON.parse(mockStorage[STORAGE_KEY]) as FaroUserSession).isSampled).toBe(initialIsSampled); + }); + + it('Will calculate new sampling decision if session from web storage is invalid.', () => { + const initialIsSampled = true; + const mockUserSession = createUserSessionObject({ + sessionId: 'persisted-session-ac', + isSampled: initialIsSampled, + }); + + mockUserSession.lastActivity = dateNow() - SESSION_EXPIRATION_TIME; + + mockStorage[STORAGE_KEY] = JSON.stringify(mockUserSession); + + const config = makeCoreConfig( + mockConfig({ + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + persistent: true, + samplingRate: 0, // setting to zero so calculating sampling decision for new session will evaluate to false + }, + }) + ); + + const { api } = initializeFaro(config!); + const sessionMeta = api.getSession(); + + expect(sessionMeta?.attributes?.['isSampled']).toBe('false'); + expect((JSON.parse(mockStorage[STORAGE_KEY]) as FaroUserSession).isSampled).toBe(false); + }); + + it('Will send 0% of the signals.', () => { + const transport = new MockTransport(); + + const config = makeCoreConfig( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + samplingRate: 0, + }, + batching: { + itemLimit: 5, + sendTimeout: 1, + }, + }) + ); + + const { api } = initializeFaro(config!); + + const sentItems = transport.items; + + // starting at two because a session lifetime event is automatically sent by Faro + api.pushEvent('two'); + api.pushEvent('three'); + api.pushEvent('four'); + api.pushEvent('five'); + + expect(sentItems).toHaveLength(0); + }); + + it('Will send 100% of the signals.', () => { + const transport = new MockTransport(); + + const config = makeCoreConfig( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + samplingRate: 1, + }, + batching: { + itemLimit: 5, + sendTimeout: 1, + }, + }) + ); + + const { api } = initializeFaro(config!); + + const sentItems = transport.items; + + // starting at two because a session lifetime event is automatically sent by Faro + api.pushEvent('two'); + api.pushEvent('three'); + api.pushEvent('four'); + api.pushEvent('five'); + + expect(sentItems).toHaveLength(5); + + // Are all isSampled attributes removed? + expect(sentItems.every((item) => typeof item.meta.session?.attributes?.['isSampled'] === 'undefined')).toBe(true); + }); + + it('Will drop signals for new session which is not part of the sample.', () => { + const transport = new MockTransport(); + + const config = makeCoreConfig( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + session: { id: 'abc', attributes: { foo: 'bar' } }, + }, + batching: { + itemLimit: 5, + sendTimeout: 1, + }, + }) + ); + + const { api } = initializeFaro(config!); + const sentItems = transport.items; + + // starting at two because a session lifetime event is automatically sent by Faro + api.pushEvent('two'); + api.pushEvent('three'); + + jest.spyOn(samplingModuleMock, 'isSampled').mockReturnValue(false); + api.setSession(); + + api.pushEvent('four'); + api.pushEvent('five'); + api.pushEvent('six'); + + expect(sentItems).toHaveLength(3); + + // Are all isSampled attributes removed? + expect(sentItems.every((item) => typeof item.meta.session?.attributes?.['isSampled'] === 'undefined')).toBe(true); + + // Are all other attributes retained? + expect(sentItems.every((item) => item.meta.session?.attributes?.['foo'] === 'bar')).toBe(true); + }); + + it('Keep value started timestamp for resumed sessions.', () => { + const transport = new MockTransport(); + + const sessionId = '123'; + const started = dateNow() - 5 * 60 * 1000; + + mockStorage[STORAGE_KEY] = JSON.stringify( + createUserSessionObject({ + sessionId, + started, + }) + ); + + initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + }, + }) + ); + + const sessionFromStorage: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]); + + expect(sessionFromStorage.sessionId).toBe(sessionId); + expect(sessionFromStorage.started).toBe(started); + }); + + it('Removes is sampled attribute before transport item is sent.', () => { + const mockNewSessionId = '123'; + + const transport = new MockTransport(); + + initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new SessionInstrumentation()], + sessionTracking: { + enabled: true, + samplingRate: 1, + session: { id: mockNewSessionId, attributes: { foo: 'bar' } }, + }, + }) + ); + + expect(transport.items).toHaveLength(1); + + const event = transport.items[0]! as TransportItem; + expect(event.payload.name).toEqual(EVENT_SESSION_START); + expect(event.meta.session).toStrictEqual({ + id: mockNewSessionId, + attributes: { + foo: 'bar', + }, + }); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/session/instrumentation.ts b/packages/react-native-sdk/src/instrumentations/session/instrumentation.ts new file mode 100644 index 000000000..4916ddf77 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/instrumentation.ts @@ -0,0 +1,167 @@ +import { + BaseInstrumentation, + type Config, + dateNow, + EVENT_SESSION_EXTEND, + EVENT_SESSION_RESUME, + EVENT_SESSION_START, + type Meta, + type MetaSession, + VERSION, +} from '@grafana/faro-core'; + +import type { TransportItem } from '../..'; +import { createSession } from '../../metas'; + +import { type FaroUserSession, getSessionManagerByConfig, isSampled } from './sessionManager'; +import { PersistentSessionsManager } from './sessionManager/PersistentSessionsManager'; +import { createUserSessionObject, isUserSessionValid } from './sessionManager/sessionManagerUtils'; +import type { SessionManager } from './sessionManager/types'; + +type LifecycleType = typeof EVENT_SESSION_RESUME | typeof EVENT_SESSION_START; + +export class SessionInstrumentation extends BaseInstrumentation { + readonly name = '@grafana/faro-web-sdk:instrumentation-session'; + readonly version = VERSION; + + // previously notified session, to ensure we don't send session start + // event twice for the same session + private notifiedSession: MetaSession | undefined; + + private sendSessionStartEvent(meta: Meta): void { + const session = meta.session; + + if (session && session.id !== this.notifiedSession?.id) { + if (this.notifiedSession && this.notifiedSession.id === session.attributes?.['previousSession']) { + this.api.pushEvent(EVENT_SESSION_EXTEND, {}, undefined, { skipDedupe: true }); + this.notifiedSession = session; + return; + } + + this.notifiedSession = session; + // no need to add attributes and session id, they are included as part of meta + // automatically + this.api.pushEvent(EVENT_SESSION_START, {}, undefined, { skipDedupe: true }); + } + } + + private async createInitialSession( + SessionManager: SessionManager, + sessionsConfig: Required['sessionTracking'] + ): Promise<{ + initialSession: FaroUserSession; + lifecycleType: LifecycleType; + }> { + let userSession: FaroUserSession | null = await SessionManager.fetchUserSession(); + + if (sessionsConfig.persistent && sessionsConfig.maxSessionPersistenceTime && userSession) { + const now = dateNow(); + const shouldClearPersistentSession = userSession.lastActivity < now - sessionsConfig.maxSessionPersistenceTime; + + if (shouldClearPersistentSession) { + PersistentSessionsManager.removeUserSession(); + userSession = null; + } + } + + let lifecycleType: LifecycleType; + let initialSession: FaroUserSession; + + if (isUserSessionValid(userSession)) { + const sessionId = userSession?.sessionId; + + initialSession = createUserSessionObject({ + sessionId, + isSampled: userSession!.isSampled || false, + started: userSession?.started, + }); + + initialSession.sessionMeta = { + id: sessionId, + attributes: { + ...sessionsConfig.session?.attributes, + ...userSession?.sessionMeta?.attributes, + // For valid resumed sessions we do not want to recalculate the sampling decision on each init phase. + isSampled: initialSession.isSampled.toString(), + }, + }; + + lifecycleType = EVENT_SESSION_RESUME; + } else { + const sessionId = sessionsConfig.session?.id ?? createSession().id; + + initialSession = createUserSessionObject({ + sessionId, + isSampled: isSampled(), + }); + + initialSession.sessionMeta = { + id: sessionId, + attributes: { + isSampled: initialSession.isSampled.toString(), + ...sessionsConfig.session?.attributes, + }, + }; + + lifecycleType = EVENT_SESSION_START; + } + + return { initialSession, lifecycleType }; + } + + private registerBeforeSendHook(SessionManager: SessionManager) { + const { updateSession } = new SessionManager(); + + this.transports?.addBeforeSendHooks((item) => { + updateSession(); + + const attributes = item.meta.session?.attributes; + + if (attributes && attributes?.['isSampled'] === 'true') { + let newItem: TransportItem = JSON.parse(JSON.stringify(item)); + + const newAttributes = newItem.meta.session?.attributes; + delete newAttributes?.['isSampled']; + + if (Object.keys(newAttributes ?? {}).length === 0) { + delete newItem.meta.session?.attributes; + } + + return newItem; + } + + return null; + }); + } + + async initialize() { + this.logDebug('init session instrumentation'); + + const sessionTrackingConfig = this.config.sessionTracking; + + if (sessionTrackingConfig?.enabled) { + const SessionManager = getSessionManagerByConfig(sessionTrackingConfig); + + this.registerBeforeSendHook(SessionManager); + + const { initialSession, lifecycleType } = await this.createInitialSession(SessionManager, sessionTrackingConfig); + + await SessionManager.storeUserSession(initialSession); + + const initialSessionMeta = initialSession.sessionMeta; + + this.notifiedSession = initialSessionMeta; + this.api.setSession(initialSessionMeta); + + if (lifecycleType === EVENT_SESSION_START) { + this.api.pushEvent(EVENT_SESSION_START, {}, undefined, { skipDedupe: true }); + } + + if (lifecycleType === EVENT_SESSION_RESUME) { + this.api.pushEvent(EVENT_SESSION_RESUME, {}, undefined, { skipDedupe: true }); + } + } + + this.metas.addListener(this.sendSessionStartEvent.bind(this)); + } +} diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/PersistentSessionsManager.test.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/PersistentSessionsManager.test.ts new file mode 100644 index 000000000..47c3eab53 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/PersistentSessionsManager.test.ts @@ -0,0 +1,237 @@ +import * as faroCore from '@grafana/faro-core'; +import { faro, initializeFaro } from '@grafana/faro-core'; +import { mockConfig } from '@grafana/faro-core/src/testUtils'; + +import { PersistentSessionsManager } from './PersistentSessionsManager'; +import * as samplingModule from './sampling'; +import { SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME, STORAGE_KEY } from './sessionConstants'; +import type { FaroUserSession } from './types'; + +const fakeSystemTime = new Date('2023-01-01').getTime(); +const mockInitialSessionId = '123'; + +describe('Persistent Sessions Manager.', () => { + let mockStorage: Record = {}; + let setItemSpy: jest.SpyInstance; + let getItemSpy: jest.SpyInstance; + + let mockOnNewSessionCreated = jest.fn(); + + beforeAll(() => { + jest.useFakeTimers(); + jest.setSystemTime(fakeSystemTime); + + setItemSpy = jest.spyOn(global.Storage.prototype, 'setItem').mockImplementation((key, value) => { + mockStorage[key] = value; + }); + + getItemSpy = jest.spyOn(global.Storage.prototype, 'getItem').mockImplementation((key) => mockStorage[key] ?? null); + + const config = mockConfig({ + sessionTracking: { + enabled: true, + persistent: true, + session: { id: mockInitialSessionId }, + onSessionChange: mockOnNewSessionCreated, + }, + }); + + initializeFaro(config); + }); + + beforeEach(() => { + jest.clearAllMocks(); + mockStorage = {}; + }); + + afterEach(() => { + jest.spyOn(samplingModule, 'isSampled').mockRestore(); + }); + + afterAll(() => { + jest.useRealTimers(); + jest.restoreAllMocks(); + + getItemSpy.mockRestore(); + setItemSpy.mockRestore(); + }); + + it('Updates last active timestamp for valid session.', () => { + const mockIsSampled = jest.fn(); + jest.spyOn(samplingModule, 'isSampled').mockImplementation(mockIsSampled); + + const validSession = { + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(validSession); + + const { updateSession } = new PersistentSessionsManager(); + + const nextActivityTimeAfterFiveSeconds = fakeSystemTime; + jest.setSystemTime(nextActivityTimeAfterFiveSeconds); + + updateSession(); + + expect(setItemSpy).toBeCalledTimes(1); // called on time in the init function and the in the onActivity func + expect(mockStorage[STORAGE_KEY]).toBe( + JSON.stringify({ + sessionId: mockInitialSessionId, + lastActivity: nextActivityTimeAfterFiveSeconds, + started: fakeSystemTime, + isSampled: true, + }) + ); + }); + + it('Creates a new Faro user session if (old) session if max inactivity duration is reached.', () => { + const mockIsSampled = jest.fn(); + jest.spyOn(samplingModule, 'isSampled').mockImplementation(mockIsSampled); + + const storedSession = { + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(storedSession); + + const { updateSession } = new PersistentSessionsManager(); + + const mockNewSessionId = 'abcde'; + jest.spyOn(faroCore, 'genShortID').mockReturnValue(mockNewSessionId); + + const maxActivityTimeReached = fakeSystemTime + SESSION_INACTIVITY_TIME; + jest.setSystemTime(maxActivityTimeReached); + + updateSession(); + + // creates and stores new session + const session = JSON.parse(mockStorage[STORAGE_KEY]); + + const matchNewSessionMeta = { + id: mockNewSessionId, + attributes: { + previousSession: mockInitialSessionId, + isSampled: 'true', + }, + }; + expect(session).toStrictEqual({ + sessionId: mockNewSessionId, + lastActivity: maxActivityTimeReached, + started: maxActivityTimeReached, + isSampled: true, + sessionMeta: matchNewSessionMeta, + }); + + // Updates session meta + expect(faro.metas.value.session).toStrictEqual(matchNewSessionMeta); + + // Call session created hook + expect(mockOnNewSessionCreated).toHaveBeenCalledTimes(1); + expect(mockOnNewSessionCreated).toHaveBeenCalledWith(null, matchNewSessionMeta); + }); + + it('Creates a new Faro user session if (old) session expiration time is reached.', () => { + const mockIsSampled = jest.fn(); + jest.spyOn(samplingModule, 'isSampled').mockImplementation(mockIsSampled); + + const oldStoredMeta = { + id: 'aaaa', + attributes: { + previousSession: 'bbbb', + isSampled: 'true', + }, + }; + const storedSession = { + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + sessionMeta: oldStoredMeta, + }; + + const { updateSession } = new PersistentSessionsManager(); + + // overwrite auto created session + mockStorage[STORAGE_KEY] = JSON.stringify(storedSession); + + const mockNewSessionId = 'abcde'; + jest.spyOn(faroCore, 'genShortID').mockReturnValue(mockNewSessionId); + + const maxActivityTimeReached = fakeSystemTime + SESSION_EXPIRATION_TIME; + jest.setSystemTime(maxActivityTimeReached); + + updateSession(); + + // creates and stores new session + const session = JSON.parse(mockStorage[STORAGE_KEY]); + + const matchNewSessionMeta = { + id: mockNewSessionId, + attributes: { + previousSession: mockInitialSessionId, + isSampled: 'true', + }, + }; + expect(session).toStrictEqual({ + sessionId: mockNewSessionId, + lastActivity: maxActivityTimeReached, + started: maxActivityTimeReached, + isSampled: true, + sessionMeta: matchNewSessionMeta, + }); + + // Updates session meta + expect(faro.metas.value.session).toStrictEqual(matchNewSessionMeta); + + // Call session created hook + expect(mockOnNewSessionCreated).toHaveBeenCalledTimes(1); + expect(mockOnNewSessionCreated).toHaveBeenCalledWith(oldStoredMeta, matchNewSessionMeta); + }); + + it('Creates a new Faro user session if setSession(§) is called outside the Faro session manager.', () => { + const mockIsSampled = jest.fn(); + jest.spyOn(samplingModule, 'isSampled').mockImplementation(mockIsSampled); + + const storedSession = { + sessionId: mockInitialSessionId, + isSampled: true, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(storedSession); + + new PersistentSessionsManager(); + + const initialSession: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]!); + expect(initialSession.sessionId).toBe(mockInitialSessionId); + + const manualSetSessionId = 'xyz'; + faro.api.setSession({ id: manualSetSessionId }); + expect(mockIsSampled).toHaveBeenCalledTimes(1); + + const newSession: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]!); + expect(newSession.sessionId).toBe(manualSetSessionId); + }); + + it('Stores in the locals storage even if it contains objects with circular references.', () => { + const circularObject = { a: 'b' }; + (circularObject as any).circular = circularObject; + + const storedSession = { + sessionId: mockInitialSessionId, + isSampled: true, + circularObject, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + }; + + expect(() => { + PersistentSessionsManager.storeUserSession(storedSession); + }).not.toThrow(); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/PersistentSessionsManager.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/PersistentSessionsManager.ts new file mode 100644 index 000000000..dfae8577f --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/PersistentSessionsManager.ts @@ -0,0 +1,61 @@ +import { faro } from '@grafana/faro-core'; +import type { Meta } from '@grafana/faro-core'; + +import { stringifyExternalJson, throttle } from '../../../utils'; +import { getItem, removeItem, setItem } from '../../../utils/asyncStorage'; + +import { isSampled } from './sampling'; +import { STORAGE_KEY, STORAGE_UPDATE_DELAY } from './sessionConstants'; +import { addSessionMetadataToNextSession, createUserSessionObject, getUserSessionUpdater } from './sessionManagerUtils'; +import type { FaroUserSession } from './types'; + +export class PersistentSessionsManager { + private updateUserSession: ReturnType; + + constructor() { + this.updateUserSession = getUserSessionUpdater({ + fetchUserSession: PersistentSessionsManager.fetchUserSession, + storeUserSession: PersistentSessionsManager.storeUserSession, + }); + + this.init(); + } + + static async removeUserSession() { + await removeItem(STORAGE_KEY); + } + + static async storeUserSession(session: FaroUserSession): Promise { + await setItem(STORAGE_KEY, stringifyExternalJson(session)); + } + + static async fetchUserSession(): Promise { + const storedSession = await getItem(STORAGE_KEY); + + if (storedSession) { + return JSON.parse(storedSession) as FaroUserSession; + } + + return null; + } + + updateSession = throttle(() => this.updateUserSession(), STORAGE_UPDATE_DELAY); + + private init(): void { + // Users can call the setSession() method, so we need to sync this with the local storage session + faro.metas.addListener(async function syncSessionIfChangedExternally(meta: Meta) { + const session = meta.session; + const sessionFromLocalStorage = await PersistentSessionsManager.fetchUserSession(); + + if (session && session.id !== sessionFromLocalStorage?.sessionId) { + const userSession = addSessionMetadataToNextSession( + createUserSessionObject({ sessionId: session.id, isSampled: isSampled() }), + sessionFromLocalStorage + ); + + await PersistentSessionsManager.storeUserSession(userSession); + faro.api.setSession(userSession.sessionMeta); + } + }); + } +} diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/VolatileSessionManager.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/VolatileSessionManager.ts new file mode 100644 index 000000000..fea9844b6 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/VolatileSessionManager.ts @@ -0,0 +1,59 @@ +import { faro } from '@grafana/faro-core'; +import type { Meta } from '@grafana/faro-core'; + +import { throttle } from '../../../utils'; +import { stringifyExternalJson } from '../../../utils/json'; + +import { isSampled } from './sampling'; +import { STORAGE_UPDATE_DELAY } from './sessionConstants'; +import { addSessionMetadataToNextSession, createUserSessionObject, getUserSessionUpdater } from './sessionManagerUtils'; +import type { FaroUserSession } from './types'; + +export class VolatileSessionsManager { + private updateUserSession: ReturnType; + private static storedSession: string | null = null; + constructor() { + this.updateUserSession = getUserSessionUpdater({ + fetchUserSession: VolatileSessionsManager.fetchUserSession, + storeUserSession: VolatileSessionsManager.storeUserSession, + }); + + this.init(); + } + + static removeUserSession() { + this.storedSession = null; + } + + static async storeUserSession(session: FaroUserSession): Promise { + this.storedSession = stringifyExternalJson(session); + } + + static async fetchUserSession(): Promise { + if (this.storedSession) { + return JSON.parse(this.storedSession) as FaroUserSession; + } + + return null; + } + + updateSession = throttle(() => this.updateUserSession(), STORAGE_UPDATE_DELAY); + + private init(): void { + // Users can call the setSession() method, so we need to sync this with the local storage session + faro.metas.addListener(async function syncSessionIfChangedExternally(meta: Meta) { + const session = meta.session; + const sessionFromSessionStorage = await VolatileSessionsManager.fetchUserSession(); + + if (session && session.id !== sessionFromSessionStorage?.sessionId) { + const userSession = addSessionMetadataToNextSession( + createUserSessionObject({ sessionId: session.id, isSampled: isSampled() }), + sessionFromSessionStorage + ); + + await VolatileSessionsManager.storeUserSession(userSession); + faro.api.setSession(userSession.sessionMeta); + } + }); + } +} diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/VolatileSessionsManager.test.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/VolatileSessionsManager.test.ts new file mode 100644 index 000000000..2045c3e2b --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/VolatileSessionsManager.test.ts @@ -0,0 +1,226 @@ +import * as faroCore from '@grafana/faro-core'; +import { faro, initializeFaro } from '@grafana/faro-core'; +import { mockConfig } from '@grafana/faro-core/src/testUtils'; + +import * as samplingModule from './sampling'; +import { SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME, STORAGE_KEY } from './sessionConstants'; +import type { FaroUserSession } from './types'; +import { VolatileSessionsManager } from './VolatileSessionManager'; + +const fakeSystemTime = new Date('2023-01-01').getTime(); +const mockInitialSessionId = '123'; + +describe('Volatile Sessions Manager.', () => { + let mockStorage: Record = {}; + let setItemSpy: jest.SpyInstance; + let getItemSpy: jest.SpyInstance; + + let mockOnNewSessionCreated = jest.fn(); + + beforeAll(() => { + jest.useFakeTimers(); + jest.setSystemTime(fakeSystemTime); + + setItemSpy = jest.spyOn(global.Storage.prototype, 'setItem').mockImplementation((key, value) => { + mockStorage[key] = value; + }); + + getItemSpy = jest.spyOn(global.Storage.prototype, 'getItem').mockImplementation((key) => mockStorage[key] ?? null); + + const config = mockConfig({ + sessionTracking: { + enabled: true, + session: { id: mockInitialSessionId }, + onSessionChange: mockOnNewSessionCreated, + }, + }); + + initializeFaro(config); + }); + + beforeEach(() => { + jest.clearAllMocks(); + mockStorage = {}; + }); + + afterEach(() => { + jest.spyOn(samplingModule, 'isSampled').mockRestore(); + }); + + afterAll(() => { + jest.useRealTimers(); + jest.restoreAllMocks(); + + getItemSpy.mockRestore(); + setItemSpy.mockRestore(); + }); + + it('Updates last active timestamp for valid session.', () => { + const validSession = { + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(validSession); + + const { updateSession } = new VolatileSessionsManager(); + + const nextActivityTimeAfterFiveSeconds = fakeSystemTime; + jest.setSystemTime(nextActivityTimeAfterFiveSeconds); + + updateSession(); + + expect(setItemSpy).toBeCalledTimes(1); // called on time in the init function and the in the onActivity func + expect(mockStorage[STORAGE_KEY]).toBe( + JSON.stringify({ + sessionId: mockInitialSessionId, + lastActivity: nextActivityTimeAfterFiveSeconds, + started: fakeSystemTime, + isSampled: true, + }) + ); + }); + + it('Creates a new faro user session if (old) session max inactivity duration is reached.', () => { + const storedSession = { + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(storedSession); + + const { updateSession } = new VolatileSessionsManager(); + + const mockNewSessionId = 'abcde'; + jest.spyOn(faroCore, 'genShortID').mockReturnValue(mockNewSessionId); + + const maxActivityTimeReached = fakeSystemTime + SESSION_INACTIVITY_TIME; + jest.setSystemTime(maxActivityTimeReached); + + updateSession(); + + // creates and stores new session + const session = JSON.parse(mockStorage[STORAGE_KEY]); + + const matchNewSessionMeta = { + id: mockNewSessionId, + attributes: { + previousSession: mockInitialSessionId, + isSampled: 'true', + }, + }; + expect(session).toStrictEqual({ + sessionId: mockNewSessionId, + lastActivity: maxActivityTimeReached, + started: maxActivityTimeReached, + isSampled: true, + sessionMeta: matchNewSessionMeta, + }); + + // Updates session meta + expect(faro.metas.value.session).toStrictEqual(matchNewSessionMeta); + + // Call session created hook + expect(mockOnNewSessionCreated).toHaveBeenCalledTimes(1); + expect(mockOnNewSessionCreated).toHaveBeenCalledWith(null, matchNewSessionMeta); + }); + + it('Creates a new faro user session if (old) session expiration time is reached.', () => { + const oldStoredMeta = { + id: 'aaaa', + attributes: { + previousSession: 'bbbb', + }, + }; + const storedSession = { + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + sessionMeta: oldStoredMeta, + isSampled: true, + }; + + const { updateSession } = new VolatileSessionsManager(); + + // overwrite auto created session + mockStorage[STORAGE_KEY] = JSON.stringify(storedSession); + + const mockNewSessionId = 'abcde'; + jest.spyOn(faroCore, 'genShortID').mockReturnValue(mockNewSessionId); + + const maxActivityTimeReached = fakeSystemTime + SESSION_EXPIRATION_TIME; + jest.setSystemTime(maxActivityTimeReached); + + updateSession(); + + // creates and stores new session + const session = JSON.parse(mockStorage[STORAGE_KEY]); + + const matchNewSessionMeta = { + id: mockNewSessionId, + attributes: { + previousSession: mockInitialSessionId, + isSampled: 'true', + }, + }; + expect(session).toStrictEqual({ + sessionId: mockNewSessionId, + lastActivity: maxActivityTimeReached, + started: maxActivityTimeReached, + isSampled: true, + sessionMeta: matchNewSessionMeta, + }); + + // Updates session meta + expect(faro.metas.value.session).toStrictEqual(matchNewSessionMeta); + + // Call session created hook + expect(mockOnNewSessionCreated).toHaveBeenCalledTimes(1); + expect(mockOnNewSessionCreated).toHaveBeenCalledWith(oldStoredMeta, matchNewSessionMeta); + }); + + it('Creates a new Faro user session if setSession() is called outside the Faro session manager.', () => { + const mockIsSampled = jest.fn(); + jest.spyOn(samplingModule, 'isSampled').mockImplementation(mockIsSampled); + + const storedSession = { + sessionId: mockInitialSessionId, + isSampled: true, + }; + + mockStorage[STORAGE_KEY] = JSON.stringify(storedSession); + + new VolatileSessionsManager(); + + const initialSession: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]!); + expect(initialSession.sessionId).toBe(mockInitialSessionId); + + const manualSetSessionId = 'xyz'; + faro.api.setSession({ id: manualSetSessionId }); + expect(mockIsSampled).toHaveBeenCalledTimes(1); + + const newSession: FaroUserSession = JSON.parse(mockStorage[STORAGE_KEY]!); + expect(newSession.sessionId).toBe(manualSetSessionId); + }); + + it('Stores in the locals storage even if it contains objects with circular references.', () => { + const circularObject = { a: 'b' }; + (circularObject as any).circular = circularObject; + + const storedSession = { + sessionId: mockInitialSessionId, + isSampled: true, + circularObject, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + }; + + expect(() => { + VolatileSessionsManager.storeUserSession(storedSession); + }).not.toThrow(); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/getSessionManagerByConfig.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/getSessionManagerByConfig.ts new file mode 100644 index 000000000..dd06a089d --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/getSessionManagerByConfig.ts @@ -0,0 +1,9 @@ +import type { Config } from '@grafana/faro-core'; + +import { PersistentSessionsManager } from './PersistentSessionsManager'; +import type { SessionManager } from './types'; +import { VolatileSessionsManager } from './VolatileSessionManager'; + +export function getSessionManagerByConfig(sessionTrackingConfig: Config['sessionTracking']): SessionManager { + return sessionTrackingConfig?.persistent ? PersistentSessionsManager : VolatileSessionsManager; +} diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/index.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/index.ts new file mode 100644 index 000000000..efcd96a0e --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/index.ts @@ -0,0 +1,18 @@ +export { PersistentSessionsManager } from './PersistentSessionsManager'; +export { VolatileSessionsManager } from './VolatileSessionManager'; + +export { + MAX_SESSION_PERSISTENCE_TIME, + MAX_SESSION_PERSISTENCE_TIME_BUFFER, + SESSION_EXPIRATION_TIME, + SESSION_INACTIVITY_TIME, + STORAGE_KEY, + STORAGE_UPDATE_DELAY, + defaultSessionTrackingConfig, +} from './sessionConstants'; + +export { isSampled } from './sampling'; + +export type { FaroUserSession } from './types'; + +export { getSessionManagerByConfig } from './getSessionManagerByConfig'; diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/sampling.test.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sampling.test.ts new file mode 100644 index 000000000..e6da6d8b8 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sampling.test.ts @@ -0,0 +1,72 @@ +import { initializeFaro } from '@grafana/faro-core'; +import { mockConfig } from '@grafana/faro-core/src/testUtils'; + +import { createSession } from '../../../metas'; + +import { isSampled } from './sampling'; + +describe('Sampling.', () => { + afterEach(() => { + jest.spyOn(global.Math, 'random').mockRestore(); + }); + + it('Returns false if sampleRate is not of type number.', () => { + const config = mockConfig({ + sessionTracking: { + samplingRate: 'hello' as any, + }, + }); + + initializeFaro(config); + + expect(isSampled()).toBe(false); + }); + + it('Returns proper sampling decision for configured samplingRate.', () => { + let config = mockConfig({ + sessionTracking: { + enabled: true, + samplingRate: 1, + }, + }); + + initializeFaro(config); + expect(isSampled()).toBe(true); + + config.sessionTracking!.samplingRate = 0; + initializeFaro(config); + expect(isSampled()).toBe(false); + }); + + it('Returns proper sampling decision for rate returned by sampler function.', () => { + let config = mockConfig({ + sessionTracking: { + enabled: true, + sampler: () => { + return 1; + }, + }, + }); + + initializeFaro(config); + expect(isSampled()).toBe(true); + + config.sessionTracking!.sampler = () => 0; + initializeFaro(config); + expect(isSampled()).toBe(false); + + config.sessionTracking!.session = createSession({ location: 'moon' }); + config.sessionTracking!.sampler = ({ metas }) => { + if (metas.session?.attributes?.['location'] === 'moon') { + return 0; + } + return 1; + }; + initializeFaro(config); + expect(isSampled()).toBe(false); + + config.sessionTracking!.session = createSession({ location: 'mars' }); + initializeFaro(config); + expect(isSampled()).toBe(true); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/sampling.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sampling.ts new file mode 100644 index 000000000..0d5470fe2 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sampling.ts @@ -0,0 +1,15 @@ +import { faro } from '@grafana/faro-core'; + +export function isSampled(): boolean { + const sendAllSignals = 1; + const sessionTracking = faro.config.sessionTracking; + let samplingRate = + sessionTracking?.sampler?.({ metas: faro.metas.value }) ?? sessionTracking?.samplingRate ?? sendAllSignals; + + if (typeof samplingRate !== 'number') { + const sendNoSignals = 0; + samplingRate = sendNoSignals; + } + + return Math.random() < samplingRate; +} diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionConstants.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionConstants.ts new file mode 100644 index 000000000..5a16a6c08 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionConstants.ts @@ -0,0 +1,18 @@ +import type { Config } from '@grafana/faro-core'; + +export const STORAGE_KEY = 'com.grafana.faro.session'; +export const SESSION_EXPIRATION_TIME = 4 * 60 * 60 * 1000; // hrs +export const SESSION_INACTIVITY_TIME = 15 * 60 * 1000; // minutes +export const STORAGE_UPDATE_DELAY = 1 * 1000; // seconds + +/** + * @deprecated MAX_SESSION_PERSISTENCE_TIME_BUFFER is not used anymore. The constant will be removed in the future + */ +export const MAX_SESSION_PERSISTENCE_TIME_BUFFER = 1 * 60 * 1000; +export const MAX_SESSION_PERSISTENCE_TIME = SESSION_INACTIVITY_TIME; + +export const defaultSessionTrackingConfig: Config['sessionTracking'] = { + enabled: true, + persistent: false, + maxSessionPersistenceTime: MAX_SESSION_PERSISTENCE_TIME, +} as const; diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionManagerUtils.test.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionManagerUtils.test.ts new file mode 100644 index 000000000..7ea0a6dcf --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionManagerUtils.test.ts @@ -0,0 +1,355 @@ +import * as faroCore from '@grafana/faro-core'; +import { initializeFaro } from '@grafana/faro-core'; +import { mockConfig } from '@grafana/faro-core/src/testUtils'; + +import { getSessionManagerByConfig } from './getSessionManagerByConfig'; +import { PersistentSessionsManager } from './PersistentSessionsManager'; +import { SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME } from './sessionConstants'; +import * as mockSessionManagerUtils from './sessionManagerUtils'; +import { + addSessionMetadataToNextSession, + createUserSessionObject, + getUserSessionUpdater, + isUserSessionValid, +} from './sessionManagerUtils'; +import type { FaroUserSession } from './types'; +import { VolatileSessionsManager } from './VolatileSessionManager'; + +const fakeSystemTime = new Date('2023-01-01').getTime(); +const mockSessionId = '123'; + +describe('sessionManagerUtils', () => { + beforeAll(() => { + jest.useFakeTimers(); + jest.setSystemTime(fakeSystemTime); + }); + + beforeEach(() => { + jest.resetAllMocks(); + jest.restoreAllMocks(); + }); + + afterAll(() => { + jest.restoreAllMocks(); + jest.useRealTimers(); + }); + + it('creates new user session object.', () => { + jest.spyOn(faroCore, 'genShortID').mockReturnValue(mockSessionId); + + // create new id + const newSession = createUserSessionObject(); + + expect(newSession).toStrictEqual({ + sessionId: mockSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }); + + // create with given sessionId + const mockInitialSessionId = 'abcde'; + const newSessionWithInitialSessionId = createUserSessionObject({ sessionId: mockInitialSessionId }); + + expect(newSessionWithInitialSessionId).toStrictEqual({ + sessionId: mockInitialSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }); + }); + + it('creates new user session object and uses user defined generateSessionId.', () => { + const customGeneratedSessionId = 'my-custom-id'; + + const config = mockConfig({ + sessionTracking: { + enabled: true, + generateSessionId() { + return customGeneratedSessionId; + }, + }, + }); + + initializeFaro(config); + + const newSessionWithInitialSessionId = createUserSessionObject(); + + expect(newSessionWithInitialSessionId).toStrictEqual({ + sessionId: customGeneratedSessionId, + lastActivity: fakeSystemTime, + started: fakeSystemTime, + isSampled: true, + }); + }); + + it('checks if user session is valid.', () => { + jest.spyOn(faroCore, 'genShortID').mockReturnValue(mockSessionId); + + // return false if session is null + const isNullSessionInvalid = isUserSessionValid(null); + expect(isNullSessionInvalid).toBe(false); + + // return false if activity timeout is reached + const newInactiveSession = createUserSessionObject(); + newInactiveSession.lastActivity = SESSION_INACTIVITY_TIME; + const isActivityTimeoutSessionInvalid = isUserSessionValid(newInactiveSession); + expect(isActivityTimeoutSessionInvalid).toBe(false); + + // return false if lifetime timeout is reached + const newTimedOutSession = createUserSessionObject(); + newTimedOutSession.started -= SESSION_EXPIRATION_TIME; + const isTimedOutSessionInvalid = isUserSessionValid(newTimedOutSession); + expect(isTimedOutSessionInvalid).toBe(false); + + // return false if session is null + const isNullSessionValid = isUserSessionValid(createUserSessionObject()); + expect(isNullSessionValid).toBe(true); + + // return false if activity timeout is reached + const newActiveSession = createUserSessionObject(); + newActiveSession.lastActivity = fakeSystemTime - 1; + const isActivityTimeoutSessionValid = isUserSessionValid(newActiveSession); + expect(isActivityTimeoutSessionValid).toBe(true); + + // return false if lifetime timeout is reached + const newSessionWithValidLifetime = createUserSessionObject(); + newSessionWithValidLifetime.started -= SESSION_EXPIRATION_TIME - 1; + const isTimedOutSessionValid = isUserSessionValid(newSessionWithValidLifetime); + expect(isTimedOutSessionValid).toBe(true); + }); + + it('configures userSessionUpdater and expands the current user session as well as the current sessionMeta.', () => { + const mockOnSessionChange = jest.fn(); + + const config = mockConfig({ + sessionTracking: { + enabled: true, + onSessionChange: mockOnSessionChange, + }, + }); + + const faro = initializeFaro(config); + + const mockFetchUserSession = jest.fn(); + const mockStoreUserSession = jest.fn(); + + const updateSession = getUserSessionUpdater({ + fetchUserSession: mockFetchUserSession, + storeUserSession: mockStoreUserSession, + }); + + // session is invalid + jest.spyOn(mockSessionManagerUtils, 'isUserSessionValid').mockReturnValueOnce(false); + + const mockSetSession = jest.fn(); + jest.spyOn(faro.api, 'setSession').mockImplementationOnce(mockSetSession); + + mockFetchUserSession.mockReturnValueOnce({ + sessionId: 'abc', + attributes: { + previousSession: 'previousSession', + }, + }); + + jest.spyOn(faroCore, 'genShortID').mockReturnValueOnce(mockSessionId); + + updateSession(); + + expect(mockFetchUserSession).toHaveBeenCalledTimes(1); + expect(mockStoreUserSession).toHaveBeenCalledTimes(1); + expect(mockSetSession).toHaveBeenCalledTimes(1); + expect(mockOnSessionChange).toHaveBeenCalledTimes(1); + + expect(mockSetSession).toHaveBeenCalledWith({ + id: mockSessionId, + attributes: { + previousSession: 'abc', + isSampled: 'true', + }, + }); + + expect(mockOnSessionChange).toHaveBeenCalledWith(null, { + attributes: { previousSession: 'abc', isSampled: 'true' }, + id: '123', + }); + }); + + it('configures userSessionUpdater and expands the current user session as well as the current sessionMeta for a session which already got expanded.', () => { + const currentSessionMeta = { + id: 'currentSession', + attributes: { + previousSession: 'previous', + isSampled: 'true', + }, + }; + + const mockOnSessionChange = jest.fn(); + + const config = mockConfig({ + sessionTracking: { + enabled: true, + onSessionChange: mockOnSessionChange, + session: currentSessionMeta, + }, + }); + + const faro = initializeFaro(config); + + const mockFetchUserSession = jest.fn(); + const mockStoreUserSession = jest.fn(); + + const updateSession = getUserSessionUpdater({ + fetchUserSession: mockFetchUserSession, + storeUserSession: mockStoreUserSession, + }); + + // session is invalid + jest.spyOn(mockSessionManagerUtils, 'isUserSessionValid').mockReturnValueOnce(false); + + const mockSetSession = jest.fn(); + jest.spyOn(faro.api, 'setSession').mockImplementationOnce(mockSetSession); + + mockFetchUserSession.mockReturnValue({ + sessionId: currentSessionMeta.id, + attributes: { + previousSession: currentSessionMeta.attributes.previousSession, + }, + sessionMeta: currentSessionMeta, + }); + + const nextSessionId = 'nextSession'; + jest.spyOn(faroCore, 'genShortID').mockReturnValueOnce(nextSessionId); + + updateSession(); + + const newSessionMeta = { + id: nextSessionId, + attributes: { + previousSession: currentSessionMeta.id, + isSampled: 'true', + }, + }; + + expect(mockSetSession).toHaveBeenCalledWith(newSessionMeta); + + expect(mockOnSessionChange).toHaveBeenCalledWith(currentSessionMeta, newSessionMeta); + }); + + it('Takes session object and adds meta data.', () => { + const config = mockConfig({}); + const { api } = initializeFaro(config); + + const newSession: FaroUserSession = { + lastActivity: 1, + started: 2, + sessionId: 'new-session-id', + isSampled: true, + }; + + const sessionWithMetadata1 = addSessionMetadataToNextSession(newSession, null); + + expect(sessionWithMetadata1).toStrictEqual({ + ...newSession, + sessionMeta: { + id: newSession.sessionId, + attributes: { + isSampled: 'true', + }, + }, + }); + + const previousSession: FaroUserSession = { + lastActivity: 8, + started: 9, + sessionId: 'previous-session-id', + isSampled: true, + }; + + const sessionWithMetadata2 = addSessionMetadataToNextSession(newSession, previousSession); + + expect(sessionWithMetadata2).toStrictEqual({ + ...newSession, + sessionMeta: { + id: newSession.sessionId, + attributes: { + previousSession: previousSession.sessionId, + isSampled: 'true', + }, + }, + }); + + const sessionMeta = { + id: previousSession.sessionId, + attributes: { + previousSession: '12345', + foo: 'bar', + baz: 'bam', + }, + }; + + api.setSession(sessionMeta); + + const sessionWithMetadata3 = addSessionMetadataToNextSession(newSession, previousSession); + + expect(sessionWithMetadata3).toStrictEqual({ + ...newSession, + sessionMeta: { + id: newSession.sessionId, + attributes: { + ...sessionMeta.attributes, + isSampled: 'true', + previousSession: previousSession.sessionId, + }, + }, + }); + }); + + it('forces userSessionUpdater to expand the current user session.', () => { + const mockOnSessionChange = jest.fn(); + + const config = mockConfig({ + sessionTracking: { + enabled: true, + onSessionChange: mockOnSessionChange, + }, + }); + + const faro = initializeFaro(config); + + const mockIsUserSessionValid = jest.fn(); + jest.spyOn(mockSessionManagerUtils, 'isUserSessionValid').mockImplementationOnce(() => { + mockIsUserSessionValid(); + return true; + }); + + const mockFetchUserSession = jest.fn(); + const mockStoreUserSession = jest.fn(); + + const updateSession = getUserSessionUpdater({ + fetchUserSession: mockFetchUserSession, + storeUserSession: mockStoreUserSession, + }); + + const mockSetSession = jest.fn(); + jest.spyOn(faro.api, 'setSession').mockImplementationOnce(mockSetSession); + + updateSession({ forceSessionExtend: true }); + + expect(mockFetchUserSession).toHaveBeenCalledTimes(1); + + expect(mockIsUserSessionValid).not.toHaveBeenCalled(); + + expect(mockStoreUserSession).toHaveBeenCalledTimes(1); + expect(mockSetSession).toHaveBeenCalledTimes(1); + expect(mockOnSessionChange).toHaveBeenCalledTimes(1); + }); + + it('Returns the configured session manager.', () => { + let SessionManager = getSessionManagerByConfig({ persistent: false /* default */ }); + expect(new SessionManager()).toBeInstanceOf(VolatileSessionsManager); + + SessionManager = getSessionManagerByConfig({ persistent: true }); + expect(new SessionManager()).toBeInstanceOf(PersistentSessionsManager); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionManagerUtils.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionManagerUtils.ts new file mode 100644 index 000000000..2af6267b3 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/sessionManagerUtils.ts @@ -0,0 +1,103 @@ +import { dateNow, faro, genShortID } from '@grafana/faro-core'; + +import { isSampled } from './sampling'; +import { SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME } from './sessionConstants'; +import type { FaroUserSession } from './types'; + +type CreateUserSessionObjectParams = { + sessionId?: string; + started?: number; + lastActivity?: number; + isSampled?: boolean; +}; + +export function createUserSessionObject({ + sessionId, + started, + lastActivity, + isSampled = true, +}: CreateUserSessionObjectParams = {}): FaroUserSession { + const now = dateNow(); + + const generateSessionId = faro.config?.sessionTracking?.generateSessionId; + + if (sessionId == null) { + sessionId = typeof generateSessionId === 'function' ? generateSessionId() : genShortID(); + } + + return { + sessionId, + lastActivity: lastActivity ?? now, + started: started ?? now, + isSampled: isSampled, + }; +} + +export function isUserSessionValid(session: FaroUserSession | null): boolean { + if (session == null) { + return false; + } + + const now = dateNow(); + const lifetimeValid = now - session.started < SESSION_EXPIRATION_TIME; + + if (!lifetimeValid) { + return false; + } + + const inactivityPeriodValid = now - session.lastActivity < SESSION_INACTIVITY_TIME; + return inactivityPeriodValid; +} + +type GetUserSessionUpdaterParams = { + storeUserSession: (session: FaroUserSession) => Promise; + fetchUserSession: () => Promise; +}; + +type UpdateSessionParams = { forceSessionExtend: boolean }; + +export function getUserSessionUpdater({ + fetchUserSession, + storeUserSession, +}: GetUserSessionUpdaterParams): (options?: UpdateSessionParams) => void { + return async function updateSession({ forceSessionExtend } = { forceSessionExtend: false }): Promise { + if (!fetchUserSession || !storeUserSession) { + return; + } + + const sessionTrackingConfig = faro.config.sessionTracking; + + const sessionFromStorage = await fetchUserSession(); + + if (forceSessionExtend === false && isUserSessionValid(sessionFromStorage)) { + await storeUserSession({ ...sessionFromStorage!, lastActivity: dateNow() }); + } else { + let newSession = addSessionMetadataToNextSession( + createUserSessionObject({ isSampled: isSampled() }), + sessionFromStorage + ); + + await storeUserSession(newSession); + + faro.api?.setSession(newSession.sessionMeta); + sessionTrackingConfig?.onSessionChange?.(sessionFromStorage?.sessionMeta ?? null, newSession.sessionMeta!); + } + }; +} + +export function addSessionMetadataToNextSession(newSession: FaroUserSession, previousSession: FaroUserSession | null) { + const sessionWithMeta: Required = { + ...newSession, + sessionMeta: { + id: newSession.sessionId, + attributes: { + ...faro.config.sessionTracking?.session?.attributes, + ...(faro.metas.value.session?.attributes ?? {}), + ...(previousSession != null ? { previousSession: previousSession.sessionId } : {}), + isSampled: newSession.isSampled.toString(), + }, + }, + }; + + return sessionWithMeta; +} diff --git a/packages/react-native-sdk/src/instrumentations/session/sessionManager/types.ts b/packages/react-native-sdk/src/instrumentations/session/sessionManager/types.ts new file mode 100644 index 000000000..d1be351aa --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/session/sessionManager/types.ts @@ -0,0 +1,14 @@ +import type { MetaSession } from '@grafana/faro-core'; + +import type { PersistentSessionsManager } from './PersistentSessionsManager'; +import type { VolatileSessionsManager } from './VolatileSessionManager'; + +export interface FaroUserSession { + sessionId: string; + lastActivity: number; + started: number; + isSampled: boolean; + sessionMeta?: MetaSession; +} + +export type SessionManager = typeof VolatileSessionsManager | typeof PersistentSessionsManager; diff --git a/packages/react-native-sdk/src/instrumentations/view/index.ts b/packages/react-native-sdk/src/instrumentations/view/index.ts new file mode 100644 index 000000000..ed4bebb8b --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/view/index.ts @@ -0,0 +1 @@ +export { ViewInstrumentation } from './instrumentation'; diff --git a/packages/react-native-sdk/src/instrumentations/view/instrumentation.test.ts b/packages/react-native-sdk/src/instrumentations/view/instrumentation.test.ts new file mode 100644 index 000000000..97aaf9a84 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/view/instrumentation.test.ts @@ -0,0 +1,26 @@ +import { EventEvent, initializeFaro, TransportItem } from '@grafana/faro-core'; +import { mockConfig, MockTransport } from '@grafana/faro-core/src/testUtils'; + +import { ViewInstrumentation } from './instrumentation'; + +describe('ViewInstrumentation', () => { + it('will send view changed event if setView is called.', () => { + const transport = new MockTransport(); + const view = { name: 'my-view' }; + + const { api } = initializeFaro( + mockConfig({ + transports: [transport], + instrumentations: [new ViewInstrumentation()], + view, + }) + ); + + const newView = { name: 'my-view' }; + api.setView(newView); + expect(transport.items).toHaveLength(1); + + let event = transport.items[0]! as TransportItem; + expect(event.meta.view?.name).toEqual(view.name); + }); +}); diff --git a/packages/react-native-sdk/src/instrumentations/view/instrumentation.ts b/packages/react-native-sdk/src/instrumentations/view/instrumentation.ts new file mode 100644 index 000000000..5c9644925 --- /dev/null +++ b/packages/react-native-sdk/src/instrumentations/view/instrumentation.ts @@ -0,0 +1,40 @@ +import { + BaseInstrumentation, + EVENT_VIEW_CHANGED, + type Meta, + type MetaView, + unknownString, + VERSION, +} from '@grafana/faro-core'; + +// all this does is send VIEW_CHANGED event +export class ViewInstrumentation extends BaseInstrumentation { + readonly name = '@grafana/faro-web-sdk:instrumentation-view'; + readonly version = VERSION; + + // previously notified view, to ensure we don't send view changed + // event twice for the same view + private notifiedView: MetaView | undefined; + + private sendViewChangedEvent(meta: Meta): void { + const view = meta.view; + + if (view && view.name !== this.notifiedView?.name) { + this.api.pushEvent( + EVENT_VIEW_CHANGED, + { + fromView: this.notifiedView?.name ?? unknownString, + toView: view.name ?? unknownString, + }, + undefined, + { skipDedupe: true } + ); + + this.notifiedView = view; + } + } + + initialize() { + this.metas.addListener(this.sendViewChangedEvent.bind(this)); + } +} diff --git a/packages/react-native-sdk/src/metas/browser/index.ts b/packages/react-native-sdk/src/metas/browser/index.ts new file mode 100644 index 000000000..56acf7cbc --- /dev/null +++ b/packages/react-native-sdk/src/metas/browser/index.ts @@ -0,0 +1 @@ +export { browserMeta } from './meta'; diff --git a/packages/react-native-sdk/src/metas/browser/meta.ts b/packages/react-native-sdk/src/metas/browser/meta.ts new file mode 100644 index 000000000..2890c8d6a --- /dev/null +++ b/packages/react-native-sdk/src/metas/browser/meta.ts @@ -0,0 +1,20 @@ +// eslint-disable-next-line import/namespace +import { Dimensions, Platform } from 'react-native'; +import { getBrand, getModel, getSystemVersion } from 'react-native-device-info'; + +import type { Meta, MetaItem } from '@grafana/faro-core'; + +const { width, height } = Dimensions.get('window'); + +export const browserMeta: MetaItem> = () => ({ + browser: { + name: Platform.OS, + os: getSystemVersion(), + mobile: true, + userAgent: `${Platform.OS}/${getSystemVersion()} (${getBrand()} ${getModel()})`, + windowSize: { + width, + height, + }, + }, +}); diff --git a/packages/react-native-sdk/src/metas/const.ts b/packages/react-native-sdk/src/metas/const.ts new file mode 100644 index 000000000..b0b72ebeb --- /dev/null +++ b/packages/react-native-sdk/src/metas/const.ts @@ -0,0 +1,6 @@ +import type { MetaItem } from '@grafana/faro-core'; + +import { browserMeta } from './browser'; +import { pageMeta } from './page'; + +export const defaultMetas: MetaItem[] = [browserMeta, pageMeta]; diff --git a/packages/react-native-sdk/src/metas/index.ts b/packages/react-native-sdk/src/metas/index.ts new file mode 100644 index 000000000..6777c92ad --- /dev/null +++ b/packages/react-native-sdk/src/metas/index.ts @@ -0,0 +1,9 @@ +export { browserMeta } from './browser'; + +export { defaultMetas } from './const'; + +export { pageMeta } from './page'; + +export { createSession } from './session'; + +export { sdkMeta } from './sdk'; diff --git a/packages/react-native-sdk/src/metas/k6/index.ts b/packages/react-native-sdk/src/metas/k6/index.ts new file mode 100644 index 000000000..b2670d2af --- /dev/null +++ b/packages/react-native-sdk/src/metas/k6/index.ts @@ -0,0 +1 @@ +export { k6Meta } from './meta'; diff --git a/packages/react-native-sdk/src/metas/k6/meta.ts b/packages/react-native-sdk/src/metas/k6/meta.ts new file mode 100644 index 000000000..6a8654433 --- /dev/null +++ b/packages/react-native-sdk/src/metas/k6/meta.ts @@ -0,0 +1,17 @@ +import type { Meta, MetaItem } from '@grafana/faro-core'; + +type K6Properties = { + testRunId?: string; +}; + +export const k6Meta: MetaItem> = () => { + const k6Properties: K6Properties = (window as any).k6; + + return { + k6: { + // we only add the k6 meta if Faro is running inside a k6 environment, so this is always true + isK6Browser: true, + ...(k6Properties?.testRunId && { testRunId: k6Properties?.testRunId }), + }, + }; +}; diff --git a/packages/react-native-sdk/src/metas/page/index.ts b/packages/react-native-sdk/src/metas/page/index.ts new file mode 100644 index 000000000..bcfe3bb5a --- /dev/null +++ b/packages/react-native-sdk/src/metas/page/index.ts @@ -0,0 +1 @@ +export { pageMeta } from './meta'; diff --git a/packages/react-native-sdk/src/metas/page/meta.ts b/packages/react-native-sdk/src/metas/page/meta.ts new file mode 100644 index 000000000..76f918f41 --- /dev/null +++ b/packages/react-native-sdk/src/metas/page/meta.ts @@ -0,0 +1,7 @@ +import type { Meta, MetaItem } from '@grafana/faro-core'; + +export const pageMeta: MetaItem> = () => ({ + page: { + url: location.href, + }, +}); diff --git a/packages/react-native-sdk/src/metas/sdk/index.ts b/packages/react-native-sdk/src/metas/sdk/index.ts new file mode 100644 index 000000000..403e71db4 --- /dev/null +++ b/packages/react-native-sdk/src/metas/sdk/index.ts @@ -0,0 +1 @@ +export { sdkMeta } from './meta'; diff --git a/packages/react-native-sdk/src/metas/sdk/meta.ts b/packages/react-native-sdk/src/metas/sdk/meta.ts new file mode 100644 index 000000000..1e5f0a9df --- /dev/null +++ b/packages/react-native-sdk/src/metas/sdk/meta.ts @@ -0,0 +1,10 @@ +import { faro, VERSION } from '@grafana/faro-core'; +import type { Meta, MetaItem } from '@grafana/faro-core'; + +export const sdkMeta: MetaItem> = () => ({ + sdk: { + name: '@grafana/faro-core', + version: VERSION, + integrations: faro.config.instrumentations.map(({ name, version }) => ({ name, version })), + }, +}); diff --git a/packages/react-native-sdk/src/metas/session/createSession.ts b/packages/react-native-sdk/src/metas/session/createSession.ts new file mode 100644 index 000000000..35ad12703 --- /dev/null +++ b/packages/react-native-sdk/src/metas/session/createSession.ts @@ -0,0 +1,9 @@ +import { faro, genShortID } from '@grafana/faro-core'; +import type { MetaSession } from '@grafana/faro-core'; + +export function createSession(attributes?: MetaSession['attributes']): MetaSession { + return { + id: faro.config?.sessionTracking?.generateSessionId?.() ?? genShortID(), + attributes, + }; +} diff --git a/packages/react-native-sdk/src/metas/session/index.ts b/packages/react-native-sdk/src/metas/session/index.ts new file mode 100644 index 000000000..f82da188f --- /dev/null +++ b/packages/react-native-sdk/src/metas/session/index.ts @@ -0,0 +1 @@ +export { createSession } from './createSession'; diff --git a/packages/react-native-sdk/src/transports/console/index.ts b/packages/react-native-sdk/src/transports/console/index.ts new file mode 100644 index 000000000..10cbbb94a --- /dev/null +++ b/packages/react-native-sdk/src/transports/console/index.ts @@ -0,0 +1,2 @@ +export { ConsoleTransport } from './transport'; +export type { ConsoleTransportOptions } from './types'; diff --git a/packages/react-native-sdk/src/transports/console/transport.ts b/packages/react-native-sdk/src/transports/console/transport.ts new file mode 100644 index 000000000..4c8b2b16f --- /dev/null +++ b/packages/react-native-sdk/src/transports/console/transport.ts @@ -0,0 +1,17 @@ +import { BaseTransport, getTransportBody, LogLevel, VERSION } from '@grafana/faro-core'; +import type { TransportItem } from '@grafana/faro-core'; + +import type { ConsoleTransportOptions } from './types'; + +export class ConsoleTransport extends BaseTransport { + readonly name = '@grafana/faro-web-sdk:transport-console'; + readonly version = VERSION; + + constructor(private options: ConsoleTransportOptions = {}) { + super(); + } + + send(item: TransportItem): void { + return this.unpatchedConsole[this.options.level ?? LogLevel.DEBUG]('New event', getTransportBody([item])); + } +} diff --git a/packages/react-native-sdk/src/transports/console/types.ts b/packages/react-native-sdk/src/transports/console/types.ts new file mode 100644 index 000000000..6019b1304 --- /dev/null +++ b/packages/react-native-sdk/src/transports/console/types.ts @@ -0,0 +1,5 @@ +import type { LogLevel } from '@grafana/faro-core'; + +export interface ConsoleTransportOptions { + level?: LogLevel; +} diff --git a/packages/react-native-sdk/src/transports/fetch/index.ts b/packages/react-native-sdk/src/transports/fetch/index.ts new file mode 100644 index 000000000..955147b68 --- /dev/null +++ b/packages/react-native-sdk/src/transports/fetch/index.ts @@ -0,0 +1,2 @@ +export { FetchTransport } from './transport'; +export type { ClockFn, FetchTransportOptions, FetchTransportRequestOptions } from './types'; diff --git a/packages/react-native-sdk/src/transports/fetch/transport.test.ts b/packages/react-native-sdk/src/transports/fetch/transport.test.ts new file mode 100644 index 000000000..4d7e45ae1 --- /dev/null +++ b/packages/react-native-sdk/src/transports/fetch/transport.test.ts @@ -0,0 +1,314 @@ +import { + getTransportBody, + initializeFaro, + LogEvent, + LogLevel, + TransportItem, + TransportItemType, +} from '@grafana/faro-core'; +import { mockConfig, mockInternalLogger } from '@grafana/faro-core/src/testUtils'; + +import * as sessionManagerUtilsMock from '../../instrumentations/session/sessionManager/sessionManagerUtils'; + +import { FetchTransport } from './transport'; + +const fetch = jest.fn(() => + Promise.resolve({ + status: 202, + text: () => Promise.resolve(), + }) +); + +(global as any).fetch = fetch; + +const mockSessionId = '123'; + +const item: TransportItem = { + type: TransportItemType.LOG, + payload: { + context: {}, + level: LogLevel.INFO, + message: 'hi', + timestamp: new Date().toISOString(), + }, + meta: { + session: { id: mockSessionId }, + }, +}; + +const largeItem: TransportItem = { + type: TransportItemType.LOG, + payload: { + context: {}, + level: LogLevel.INFO, + message: Buffer.alloc(60_000, 'I').toString('utf-8'), + timestamp: new Date().toISOString(), + }, + meta: { + session: { id: mockSessionId }, + }, +}; + +describe('FetchTransport', () => { + beforeEach(() => { + fetch.mockClear(); + jest.clearAllMocks(); + jest.clearAllTimers(); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + + it('will send event over fetch', () => { + const transport = new FetchTransport({ + url: 'http://example.com/collect', + }); + + transport.metas.value = { session: { id: mockSessionId } }; + + transport.internalLogger = mockInternalLogger; + + transport.send([item]); + + expect(fetch).toHaveBeenCalledTimes(1); + expect(fetch).toHaveBeenCalledWith('http://example.com/collect', { + body: JSON.stringify(getTransportBody([item])), + headers: { + 'Content-Type': 'application/json', + 'x-faro-session-id': mockSessionId, + }, + keepalive: true, + method: 'POST', + }); + }); + + it('will not sending events if buffer size is exhausted', () => { + const transport = new FetchTransport({ + url: 'http://example.com/collect', + bufferSize: 3, + }); + + transport.metas.value = { session: { id: mockSessionId } }; + + transport.internalLogger = mockInternalLogger; + + for (let idx = 0; idx < 6; idx++) { + transport.send([item]); + } + + expect(fetch).toHaveBeenCalledTimes(3); + }); + + it('will back off on 429 for default interval if no retry-after header present', async () => { + let now = Date.now(); + + const transport = new FetchTransport({ + url: 'http://example.com/collect', + defaultRateLimitBackoffMs: 1000, + getNow: () => now, + }); + + transport.metas.value = { session: { id: mockSessionId } }; + + transport.internalLogger = mockInternalLogger; + + fetch.mockImplementationOnce(() => + Promise.resolve({ + status: 429, + headers: { + get: () => '', + }, + text: () => Promise.resolve(), + }) + ); + + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(1); + + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(1); + + now += 1001; + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(2); + }); + + it('will back off on 429 for default interval if retry-after header present, with delay', async () => { + let now = Date.now(); + + const transport = new FetchTransport({ + url: 'http://example.com/collect', + defaultRateLimitBackoffMs: 1000, + getNow: () => now, + }); + + transport.metas.value = { session: { id: mockSessionId } }; + + transport.internalLogger = mockInternalLogger; + + fetch.mockImplementationOnce(() => + Promise.resolve({ + status: 429, + headers: { + get: () => '2', + }, + text: () => Promise.resolve(), + }) + ); + + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(1); + + now += 1001; + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(1); + + now += 1001; + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(2); + }); + + it('will back off on 429 for default interval if retry-after header present, with date', async () => { + let now = Date.now(); + + const transport = new FetchTransport({ + url: 'http://example.com/collect', + defaultRateLimitBackoffMs: 1000, + getNow: () => now, + }); + + transport.metas.value = { session: { id: mockSessionId } }; + + transport.internalLogger = mockInternalLogger; + + fetch.mockImplementationOnce(() => + Promise.resolve({ + status: 429, + headers: { + get: () => new Date(now + 3000).toISOString(), + }, + text: () => Promise.resolve(), + }) + ); + + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(1); + + now += 1001; + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(1); + + now += 2001; + await transport.send([item]); + expect(fetch).toHaveBeenCalledTimes(2); + }); + + it('will turn off keepalive if the payload length is over 60_000', async () => { + const transport = new FetchTransport({ + url: 'http://example.com/collect', + }); + + transport.metas.value = { session: { id: mockSessionId } }; + + transport.internalLogger = mockInternalLogger; + + transport.send([largeItem]); + + expect(fetch).toHaveBeenCalledTimes(1); + expect(fetch).toHaveBeenCalledWith('http://example.com/collect', { + body: JSON.stringify(getTransportBody([largeItem])), + headers: { + 'Content-Type': 'application/json', + 'x-faro-session-id': mockSessionId, + }, + keepalive: false, + method: 'POST', + }); + }); + + it('will add global ignoredURLs to the ignoredUrls list ', async () => { + const collectorUrl = 'http://example.com/collect'; + + const transport = new FetchTransport({ + url: collectorUrl, + }); + + const globalIgnoreUrls = [/.*foo-analytics/, 'http://example-analytics.com']; + + const config = mockConfig({ + transports: [transport], + ignoreUrls: globalIgnoreUrls, + }); + + const faro = initializeFaro(config); + + transport.internalLogger = mockInternalLogger; + + const ignoreUrls = faro.transports.transports.flatMap((transport) => transport.getIgnoreUrls()); + expect(ignoreUrls).toStrictEqual([collectorUrl, ...globalIgnoreUrls]); + }); + + it('creates a new faro session if collector response indicates an invalid session', async () => { + fetch.mockImplementationOnce(() => + Promise.resolve({ + status: 202, + headers: { + get: (name: string) => ({ 'X-Faro-Session-Status': 'invalid' })[name], + }, + + text: () => Promise.resolve(), + }) + ); + + const mockGetUserSessionUpdater = jest.fn(); + jest.spyOn(sessionManagerUtilsMock, 'getUserSessionUpdater').mockImplementationOnce(mockGetUserSessionUpdater); + + const transport = new FetchTransport({ + url: 'http://example.com/collect', + }); + + transport.metas.value = { session: { id: mockSessionId } }; + transport.internalLogger = mockInternalLogger; + + const config = mockConfig({ + transports: [transport], + sessionTracking: { + enabled: true, + persistent: false, + }, + }); + + initializeFaro(config); + + await transport.send([item]); + + expect(mockGetUserSessionUpdater).toHaveBeenCalledTimes(1); + }); + + it('does not create a new faro session for standard collector responses', async () => { + const mockGetUserSessionUpdater = jest.fn(); + jest.spyOn(sessionManagerUtilsMock, 'getUserSessionUpdater').mockImplementationOnce(mockGetUserSessionUpdater); + + const transport = new FetchTransport({ + url: 'http://example.com/collect', + }); + + transport.metas.value = { session: { id: mockSessionId } }; + transport.internalLogger = mockInternalLogger; + + const config = mockConfig({ + transports: [transport], + sessionTracking: { + enabled: true, + persistent: false, + }, + }); + + initializeFaro(config); + + await transport.send([item]); + + expect(mockGetUserSessionUpdater).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/react-native-sdk/src/transports/fetch/transport.ts b/packages/react-native-sdk/src/transports/fetch/transport.ts new file mode 100644 index 000000000..b55c71a0d --- /dev/null +++ b/packages/react-native-sdk/src/transports/fetch/transport.ts @@ -0,0 +1,153 @@ +import { + BaseExtension, + BaseTransport, + type Config, + createPromiseBuffer, + getTransportBody, + noop, + type Patterns, + type PromiseBuffer, + type TransportItem, + VERSION, +} from '@grafana/faro-core'; + +import { getSessionManagerByConfig } from '../../instrumentations/session/sessionManager'; +import { getUserSessionUpdater } from '../../instrumentations/session/sessionManager/sessionManagerUtils'; + +import type { FetchTransportOptions } from './types'; + +const DEFAULT_BUFFER_SIZE = 30; +const DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17 +const DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000; + +const BEACON_BODY_SIZE_LIMIT = 60000; +const TOO_MANY_REQUESTS = 429; +const ACCEPTED = 202; + +export class FetchTransport extends BaseTransport { + readonly name = '@grafana/faro-react-native-sdk:transport-fetch'; + readonly version = VERSION; + + promiseBuffer: PromiseBuffer; + + private readonly rateLimitBackoffMs: number; + private readonly getNow: () => number; + private disabledUntil: Date = new Date(); + + constructor(private options: FetchTransportOptions) { + super(); + + this.rateLimitBackoffMs = options.defaultRateLimitBackoffMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS; + this.getNow = options.getNow ?? (() => Date.now()); + + this.promiseBuffer = createPromiseBuffer({ + size: options.bufferSize ?? DEFAULT_BUFFER_SIZE, + concurrency: options.concurrency ?? DEFAULT_CONCURRENCY, + }); + } + + async send(items: TransportItem[]): Promise { + try { + if (this.disabledUntil > new Date(this.getNow())) { + this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`); + + return Promise.resolve(); + } + + await this.promiseBuffer.add(() => { + const body = JSON.stringify(getTransportBody(items)); + + const { url, requestOptions, apiKey } = this.options; + + const { headers, ...restOfRequestOptions } = requestOptions ?? {}; + + let sessionId; + const sessionMeta = this.metas.value.session; + if (sessionMeta != null) { + sessionId = sessionMeta.id; + } + + return fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(headers ?? {}), + ...(apiKey ? { 'x-api-key': apiKey } : {}), + ...(sessionId ? { 'x-faro-session-id': sessionId } : {}), + }, + body, + keepalive: body.length <= BEACON_BODY_SIZE_LIMIT, + ...(restOfRequestOptions ?? {}), + }) + .then(async (response) => { + if (response.status === ACCEPTED) { + const sessionExpired = response.headers.get('X-Faro-Session-Status') === 'invalid'; + + if (sessionExpired) { + this.extendFaroSession(this.config, this.logDebug); + } + } + + if (response.status === TOO_MANY_REQUESTS) { + this.disabledUntil = this.getRetryAfterDate(response); + this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`); + } + + // read the body so the connection can be closed + response.text().catch(noop); + return response; + }) + .catch((err) => { + this.logError('Failed sending payload to the receiver\n', JSON.parse(body), err); + }); + }); + } catch (err) { + this.logError(err); + } + } + + override getIgnoreUrls(): Patterns { + return ([this.options.url] as Patterns).concat(this.config.ignoreUrls ?? []); + } + + override isBatched(): boolean { + return true; + } + + private getRetryAfterDate(response: Response): Date { + const now = this.getNow(); + const retryAfterHeader = response.headers.get('Retry-After'); + + if (retryAfterHeader) { + const delay = Number(retryAfterHeader); + + if (!isNaN(delay)) { + return new Date(delay * 1000 + now); + } + + const date = Date.parse(retryAfterHeader); + + if (!isNaN(date)) { + return new Date(date); + } + } + + return new Date(now + this.rateLimitBackoffMs); + } + + private extendFaroSession(config: Config, logDebug: BaseExtension['logDebug']) { + const SessionExpiredString = `Session expired`; + + const sessionTrackingConfig = config.sessionTracking; + + if (sessionTrackingConfig?.enabled) { + const { fetchUserSession, storeUserSession } = getSessionManagerByConfig(sessionTrackingConfig); + + getUserSessionUpdater({ fetchUserSession, storeUserSession })({ forceSessionExtend: true }); + + logDebug(`${SessionExpiredString} created new session.`); + } else { + logDebug(`${SessionExpiredString}.`); + } + } +} diff --git a/packages/react-native-sdk/src/transports/fetch/types.ts b/packages/react-native-sdk/src/transports/fetch/types.ts new file mode 100644 index 000000000..a637077d2 --- /dev/null +++ b/packages/react-native-sdk/src/transports/fetch/types.ts @@ -0,0 +1,25 @@ +export interface FetchTransportRequestOptions extends Omit { + headers?: Record; +} + +export interface FetchTransportOptions { + // url of the collector endpoint + url: string; + + // will be added as `x-api-key` header + apiKey?: string; + // how many requests to buffer in total + bufferSize?: number; + // how many requests to execute concurrently + concurrency?: number; + // if rate limit response does not include a Retry-After header, + // how many milliseconds to back off before attempting a request. + // intermediate events will be dropped, not buffered + defaultRateLimitBackoffMs?: number; + // get current date. for mocking purposes in tests + getNow?: ClockFn; + // addition options for global.Fetch + requestOptions?: FetchTransportRequestOptions; +} + +export type ClockFn = () => number; diff --git a/packages/react-native-sdk/src/transports/index.ts b/packages/react-native-sdk/src/transports/index.ts new file mode 100644 index 000000000..61147b17a --- /dev/null +++ b/packages/react-native-sdk/src/transports/index.ts @@ -0,0 +1,6 @@ +export { ConsoleTransport } from './console'; +export type { ConsoleTransportOptions } from './console'; + +export { FetchTransport } from './fetch'; + +export type { ClockFn, FetchTransportOptions, FetchTransportRequestOptions } from './fetch'; diff --git a/packages/react-native-sdk/src/utils/asyncStorage.ts b/packages/react-native-sdk/src/utils/asyncStorage.ts new file mode 100644 index 000000000..fb9cfcfa0 --- /dev/null +++ b/packages/react-native-sdk/src/utils/asyncStorage.ts @@ -0,0 +1,13 @@ +import AsyncStorage from '@react-native-async-storage/async-storage'; + +export async function getItem(key: string): Promise { + return AsyncStorage.getItem(key); +} + +export async function setItem(key: string, value: string): Promise { + await AsyncStorage.setItem(key, value); +} + +export async function removeItem(key: string): Promise { + await AsyncStorage.removeItem(key); +} diff --git a/packages/react-native-sdk/src/utils/index.ts b/packages/react-native-sdk/src/utils/index.ts new file mode 100644 index 000000000..9e2ba49f7 --- /dev/null +++ b/packages/react-native-sdk/src/utils/index.ts @@ -0,0 +1,7 @@ +export { getItem, removeItem, setItem } from './asyncStorage'; + +export { throttle } from './throttle'; + +export { getCircularDependencyReplacer, stringifyExternalJson } from './json'; + +export { getIgnoreUrls } from './url'; diff --git a/packages/react-native-sdk/src/utils/json.test.ts b/packages/react-native-sdk/src/utils/json.test.ts new file mode 100644 index 000000000..5af6e204e --- /dev/null +++ b/packages/react-native-sdk/src/utils/json.test.ts @@ -0,0 +1,19 @@ +import { getCircularDependencyReplacer, stringifyExternalJson } from './json'; + +describe('json', () => { + it('replace circular references with null value', () => { + const replacer = getCircularDependencyReplacer(); + + const obj = { a: 1 }; + (obj as any).circular = obj; + + expect(JSON.stringify(obj, replacer)).toBe('{"a":1,"circular":null}'); + }); + + it('stringifyExternalJson function replaces circular references with null value', () => { + const obj = { a: 1 }; + (obj as any).circular = obj; + + expect(stringifyExternalJson(obj)).toBe('{"a":1,"circular":null}'); + }); +}); diff --git a/packages/react-native-sdk/src/utils/json.ts b/packages/react-native-sdk/src/utils/json.ts new file mode 100644 index 000000000..dbeb5cae4 --- /dev/null +++ b/packages/react-native-sdk/src/utils/json.ts @@ -0,0 +1,22 @@ +export function getCircularDependencyReplacer() { + const valueSeen = new WeakSet(); + return function (_key: string | Symbol, value: unknown) { + if (typeof value === 'object' && value !== null) { + if (valueSeen.has(value)) { + return null; + } + valueSeen.add(value); + } + return value; + }; +} + +type JSONObject = { + [key: string]: JSONValue; +}; +type JSONArray = JSONValue[] & {}; +type JSONValue = string | number | boolean | null | JSONObject | JSONArray; + +export function stringifyExternalJson(json: any = {}) { + return JSON.stringify(json ?? {}, getCircularDependencyReplacer()); +} diff --git a/packages/react-native-sdk/src/utils/throttle.test.ts b/packages/react-native-sdk/src/utils/throttle.test.ts new file mode 100644 index 000000000..deaa3dbe7 --- /dev/null +++ b/packages/react-native-sdk/src/utils/throttle.test.ts @@ -0,0 +1,64 @@ +import { throttle } from './throttle'; + +describe('throttle', () => { + beforeAll(() => { + jest.useFakeTimers(); + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + afterAll(() => { + jest.useRealTimers(); + jest.restoreAllMocks(); + }); + + it('Executes callback immediately for first call and executes the next callback only if delay is reached.', () => { + const mockCallback = jest.fn(); + + const doThrottle = throttle(mockCallback, 500); + + doThrottle(); + expect(mockCallback).toHaveBeenCalledTimes(1); + + jest.advanceTimersByTime(100); + doThrottle(); + expect(mockCallback).toHaveBeenCalledTimes(1); + + jest.advanceTimersByTime(500); + doThrottle(); + expect(mockCallback).toHaveBeenCalledTimes(2); + }); + + it('Applies the args of the last call to callback.', () => { + const mockCallback = jest.fn(); + + const doThrottle = throttle(mockCallback, 500); + + doThrottle('A'); + jest.advanceTimersByTime(200); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(mockCallback).toHaveBeenCalledWith('A'); + + doThrottle('B'); + jest.advanceTimersByTime(200); + expect(mockCallback).toHaveBeenCalledTimes(1); + expect(mockCallback).toHaveBeenCalledWith('A'); + + doThrottle('C'); + jest.advanceTimersByTime(100); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(mockCallback).toHaveBeenCalledWith('A'); + + doThrottle('D'); + jest.advanceTimersByTime(100); + expect(mockCallback).toHaveBeenCalledTimes(2); + expect(mockCallback).toHaveBeenLastCalledWith('C'); + + doThrottle('END'); + jest.advanceTimersByTime(400); + expect(mockCallback).toHaveBeenCalledTimes(3); + expect(mockCallback).toHaveBeenLastCalledWith('END'); + }); +}); diff --git a/packages/react-native-sdk/src/utils/throttle.ts b/packages/react-native-sdk/src/utils/throttle.ts new file mode 100644 index 000000000..31a1d0a98 --- /dev/null +++ b/packages/react-native-sdk/src/utils/throttle.ts @@ -0,0 +1,29 @@ +/** + * Tail based throttle which caches the args of the last call and updates + */ +export function throttle void>(callback: T, delay: number) { + let pause = false; + let lastPending: Parameters | null; + + const timeoutBehavior = () => { + if (lastPending == null) { + pause = false; + return; + } + + callback(...lastPending); + lastPending = null; + setTimeout(timeoutBehavior, delay); + }; + + return (...args: Parameters) => { + if (pause) { + lastPending = args; + return; + } + + callback(...args); + pause = true; + setTimeout(timeoutBehavior, delay); + }; +} diff --git a/packages/react-native-sdk/src/utils/url.ts b/packages/react-native-sdk/src/utils/url.ts new file mode 100644 index 000000000..40e8bf008 --- /dev/null +++ b/packages/react-native-sdk/src/utils/url.ts @@ -0,0 +1,9 @@ +import { faro } from '@grafana/faro-core'; +import type { Transport } from '@grafana/faro-core'; + +/** + * Get all configured ignore URLs. + */ +export function getIgnoreUrls() { + return faro.transports.transports.flatMap((transport: Transport) => transport.getIgnoreUrls()); +} diff --git a/packages/react-native-sdk/src/utils/urls.test.ts b/packages/react-native-sdk/src/utils/urls.test.ts new file mode 100644 index 000000000..be026870c --- /dev/null +++ b/packages/react-native-sdk/src/utils/urls.test.ts @@ -0,0 +1,45 @@ +import { BaseTransport, initializeFaro, VERSION } from '@grafana/faro-core'; +import type { Patterns, TransportItem } from '@grafana/faro-core'; +import { mockConfig } from '@grafana/faro-core/src/testUtils'; + +import { getIgnoreUrls } from './url'; + +class MockTransport extends BaseTransport { + readonly name = '@grafana/transport-mock'; + readonly version = VERSION; + + items: TransportItem[] = []; + + constructor(private ignoreURLs: Patterns = []) { + super(); + } + + send(items: TransportItem[]): void | Promise { + this.items.push(...items); + } + + override isBatched(): boolean { + return true; + } + + override getIgnoreUrls(): Patterns { + return (this.ignoreURLs ?? ([] as Patterns[])).concat(this.config.ignoreUrls ?? []); + } +} + +describe('Urls', () => { + it('should return the correct ignore urls for the given configuration', () => { + const transport = new MockTransport(['http://foo.com']); + + initializeFaro( + mockConfig({ + transports: [transport], + ignoreUrls: ['http://example.com', 'http://example2.com/test'], + }) + ); + + const urls = getIgnoreUrls(); + + expect(urls).toEqual(['http://foo.com', 'http://example.com', 'http://example2.com/test']); + }); +}); diff --git a/packages/react-native-sdk/src/utils/webStorage.test.ts b/packages/react-native-sdk/src/utils/webStorage.test.ts new file mode 100644 index 000000000..c1996c529 --- /dev/null +++ b/packages/react-native-sdk/src/utils/webStorage.test.ts @@ -0,0 +1,35 @@ +import { isWebStorageAvailable } from './webStorage'; + +let windowSpy: jest.SpyInstance; + +// TODO: adapt tests +describe('webStorage', () => { + beforeEach(() => { + windowSpy = jest.spyOn(globalThis, 'window', 'get'); + }); + + afterEach(() => { + windowSpy.mockRestore(); + }); + + it('Returns true if local storage is available.', () => { + const localStorageAvailable = isWebStorageAvailable('localStorage'); + expect(localStorageAvailable).toBe(true); + }); + + it('Returns false if local storage is not available.', () => { + disableLocalStorage(); + const localStorageAvailable = isWebStorageAvailable('localStorage'); + expect(localStorageAvailable).toBe(false); + }); +}); + +function disableLocalStorage() { + windowSpy.mockImplementation(() => ({ + localStorage: { + setItem() { + throw new Error(); + }, + }, + })); +} diff --git a/packages/react-native-sdk/tsconfig.bundle.json b/packages/react-native-sdk/tsconfig.bundle.json new file mode 100644 index 000000000..aca68665a --- /dev/null +++ b/packages/react-native-sdk/tsconfig.bundle.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/bundle/types", + "outDir": "./dist/bundle", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/core.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["./**/*.test.ts"] +} diff --git a/packages/react-native-sdk/tsconfig.cjs.json b/packages/react-native-sdk/tsconfig.cjs.json new file mode 100644 index 000000000..5f0d71eb8 --- /dev/null +++ b/packages/react-native-sdk/tsconfig.cjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.cjs.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/cjs", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/rnSdk.cjs.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../core/tsconfig.cjs.json" }] +} diff --git a/packages/react-native-sdk/tsconfig.esm.json b/packages/react-native-sdk/tsconfig.esm.json new file mode 100644 index 000000000..27760ebc7 --- /dev/null +++ b/packages/react-native-sdk/tsconfig.esm.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/esm", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/rnSdk.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../core/tsconfig.esm.json" }] +} diff --git a/packages/react-native-sdk/tsconfig.json b/packages/react-native-sdk/tsconfig.json new file mode 100644 index 000000000..db2455a0e --- /dev/null +++ b/packages/react-native-sdk/tsconfig.json @@ -0,0 +1,7 @@ +{ + "references": [ + { "path": "./tsconfig.cjs.json" }, + { "path": "./tsconfig.esm.json" }, + { "path": "./tsconfig.spec.json" } + ] +} diff --git a/packages/react-native-sdk/tsconfig.spec.json b/packages/react-native-sdk/tsconfig.spec.json new file mode 100644 index 000000000..ac9b3dc0a --- /dev/null +++ b/packages/react-native-sdk/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.spec.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/spec", + "rootDir": "..", + "tsBuildInfoFile": "../../.cache/tsc/rnSdk.spec.tsbuildinfo" + }, + "include": ["./src"], + "references": [{ "path": "../core/tsconfig.spec.json" }] +} diff --git a/packages/react-native-tracing/.browserslistrc b/packages/react-native-tracing/.browserslistrc new file mode 100644 index 000000000..8528fd685 --- /dev/null +++ b/packages/react-native-tracing/.browserslistrc @@ -0,0 +1 @@ +supports es6-module \ No newline at end of file diff --git a/packages/react-native-tracing/README.md b/packages/react-native-tracing/README.md new file mode 100644 index 000000000..4404d2544 --- /dev/null +++ b/packages/react-native-tracing/README.md @@ -0,0 +1,10 @@ +# @grafana/faro-web-tracing + +This package provides tools for integrating [OpenTelemetry][opentelemetry-js] based tracing with the +[Faro for the web][faro-web-sdk-package]. + +See [quick start document][quick-start] for instructions how to set up and use. + +[faro-web-sdk-package]: https://github.com/grafana/faro-web-sdk/tree/main/packages/web-sdk +[opentelemetry-js]: https://opentelemetry.io/docs/instrumentation/js/ +[quick-start]: https://github.com/grafana/faro-web-sdk/blob/main/docs/sources/tutorials/quick-start-browser.md diff --git a/packages/react-native-tracing/android/build.gradle b/packages/react-native-tracing/android/build.gradle new file mode 100644 index 000000000..c7789ff42 --- /dev/null +++ b/packages/react-native-tracing/android/build.gradle @@ -0,0 +1,23 @@ +buildscript { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 33 + buildToolsVersion "33.0.0" + + defaultConfig { + minSdkVersion 21 + targetSdkVersion 33 + } +} + +dependencies { + implementation "com.facebook.react:react-native:+" +} \ No newline at end of file diff --git a/packages/react-native-tracing/android/src/main/AndroidManifest.xml b/packages/react-native-tracing/android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..e75532bdb --- /dev/null +++ b/packages/react-native-tracing/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/packages/react-native-tracing/android/src/main/java/com/grafana/nativeinstrumentation/NativeInstrumentationModule.java b/packages/react-native-tracing/android/src/main/java/com/grafana/nativeinstrumentation/NativeInstrumentationModule.java new file mode 100644 index 000000000..5b22db2c8 --- /dev/null +++ b/packages/react-native-tracing/android/src/main/java/com/grafana/nativeinstrumentation/NativeInstrumentationModule.java @@ -0,0 +1,97 @@ +package com.grafana.nativeinstrumentation; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; +import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.bridge.ReactMarker; +import com.facebook.react.bridge.ReactMarkerConstants; +import com.facebook.react.uimanager.events.RCTEventEmitter; +import android.os.Process; +import android.os.SystemClock; +import java.math.BigInteger; +import android.util.Log; + +@ReactModule(name = NativeInstrumentationModule.NAME) +public class NativeInstrumentationModule extends ReactContextBaseJavaModule implements RCTEventEmitter { + public static final String NAME = "NativeInstrumentation"; + private static boolean hasAppRestarted = false; + private static int bundleLoadCounter = 0; + + static { + ReactMarker.addListener((name, tag, instanceKey) -> { + if (name == ReactMarkerConstants.PRE_RUN_JS_BUNDLE_START) { + if (!hasAppRestarted) { + if (bundleLoadCounter > 0) { + hasAppRestarted = true; + } + bundleLoadCounter++; + } + } + }); + } + + public NativeInstrumentationModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return NAME; + } + + @ReactMethod(isBlockingSynchronousMethod = true) + public double getStartupTimeSync() throws Exception { + try { + long currentTime = System.currentTimeMillis(); + long processStartTime = Process.getStartUptimeMillis(); + long currentUptime = SystemClock.uptimeMillis(); + + long startupTime = currentTime - currentUptime + processStartTime; + + return BigInteger.valueOf(startupTime).doubleValue(); + } catch (Exception e) { + Log.e(NAME, "Error calculating startup time", e); + + throw e; + } + } + + @ReactMethod + public void getStartupTime(Promise promise) { + try { + WritableMap response = Arguments.createMap(); + + double startupTime = getStartupTimeSync(); + + response.putDouble("startupTime", startupTime); + + promise.resolve(response); + } catch (Exception e) { + promise.reject("STARTUP_TIME_ERROR", "Failed to get startup time: " + e.getMessage(), e); + } + } + + @ReactMethod + public void getHasAppRestarted(Promise promise) { + promise.resolve(hasAppRestarted); + } + + @ReactMethod + public void addListener(String eventName) {} + + @ReactMethod + public void removeListeners(Integer count) {} + + @Override + public void receiveTouches(String eventName, WritableArray touches, WritableArray changedIndices) { + } + + @Override + public void receiveEvent(int targetTag, String eventName, WritableMap event) { + } +} \ No newline at end of file diff --git a/packages/react-native-tracing/android/src/main/java/com/grafana/nativeinstrumentation/NativeInstrumentationPackage.java b/packages/react-native-tracing/android/src/main/java/com/grafana/nativeinstrumentation/NativeInstrumentationPackage.java new file mode 100644 index 000000000..bd06455d5 --- /dev/null +++ b/packages/react-native-tracing/android/src/main/java/com/grafana/nativeinstrumentation/NativeInstrumentationPackage.java @@ -0,0 +1,24 @@ +package com.grafana.nativeinstrumentation; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class NativeInstrumentationPackage implements ReactPackage { + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } + + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + List modules = new ArrayList<>(); + modules.add(new NativeInstrumentationModule(reactContext)); + return modules; + } +} \ No newline at end of file diff --git a/packages/react-native-tracing/ios/NativeInstrumentation.h b/packages/react-native-tracing/ios/NativeInstrumentation.h new file mode 100644 index 000000000..bc53dabdb --- /dev/null +++ b/packages/react-native-tracing/ios/NativeInstrumentation.h @@ -0,0 +1,15 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NativeInstrumentation : NSObject + +- (void)getStartupTime:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject; + +- (void)getHasAppRestarted:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/packages/react-native-tracing/ios/NativeInstrumentation.m b/packages/react-native-tracing/ios/NativeInstrumentation.m new file mode 100644 index 000000000..e1c89b1ed --- /dev/null +++ b/packages/react-native-tracing/ios/NativeInstrumentation.m @@ -0,0 +1,11 @@ +#import + +@interface RCT_EXTERN_REMAP_MODULE(NativeInstrumentation, NativeInstrumentation, NSObject) + +RCT_EXTERN_METHOD(getStartupTime:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) + +RCT_EXTERN_METHOD(getHasAppRestarted:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) + +@end diff --git a/packages/react-native-tracing/ios/NativeInstrumentation.swift b/packages/react-native-tracing/ios/NativeInstrumentation.swift new file mode 100644 index 000000000..906487f75 --- /dev/null +++ b/packages/react-native-tracing/ios/NativeInstrumentation.swift @@ -0,0 +1,79 @@ +import Foundation +import React + +@objc(NativeInstrumentation) +public class NativeInstrumentation: NSObject, RCTBridgeModule { + private static var hasAppRestarted: Bool = false + + @objc + public static func requiresMainQueueSetup() -> Bool { + return false + } + + @objc + public static func moduleName() -> String! { + return "NativeInstrumentation" + } + + override init() { + super.init() + NotificationCenter.default.addObserver( + self, + selector: #selector(handleBundleLoadStart(_:)), + name: NSNotification.Name("RCTJavaScriptWillStartLoadingNotification"), + object: nil + ) + } + + @objc private func handleBundleLoadStart(_ notification: Notification) { + if NativeInstrumentation.hasAppRestarted { + return + } + + NativeInstrumentation.hasAppRestarted = true + } + + @objc + public func getStartupTime(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) { + do { + var mib = [CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()] + var size = MemoryLayout.size + var kp = kinfo_proc() + + let result = mib.withUnsafeMutableBytes { mibBytes in + withUnsafeMutablePointer(to: &size) { sizeBytes in + withUnsafeMutablePointer(to: &kp) { kpBytes in + sysctl(mibBytes.baseAddress?.assumingMemoryBound(to: Int32.self), 4, + kpBytes, + sizeBytes, + nil, 0) + } + } + } + + let startTimeMs: Int64 + if result == 0 { + let startTime = kp.kp_proc.p_un.__p_starttime + startTimeMs = Int64(startTime.tv_sec) * 1000 + Int64(startTime.tv_usec) / 1000 + } else { + throw NSError(domain: "NativeInstrumentation", + code: Int(result), + userInfo: [NSLocalizedDescriptionKey: "Failed to get process info"]) + } + + let response = ["startupTime": startTimeMs] + resolve(response) + } catch { + reject("STARTUP_TIME_ERROR", "Failed to get startup time: \(error.localizedDescription)", error) + } + } + + @objc + public func getHasAppRestarted(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) { + resolve(NativeInstrumentation.hasAppRestarted) + } + + deinit { + NotificationCenter.default.removeObserver(self) + } +} diff --git a/packages/react-native-tracing/jest.config.js b/packages/react-native-tracing/jest.config.js new file mode 100644 index 000000000..1396c53ae --- /dev/null +++ b/packages/react-native-tracing/jest.config.js @@ -0,0 +1,7 @@ +const { jestBaseConfig } = require('../../jest.config.base.js'); + +module.exports = { + ...jestBaseConfig, + roots: ['packages/web-tracing/src'], + testEnvironment: 'jsdom', +}; diff --git a/packages/react-native-tracing/package.json b/packages/react-native-tracing/package.json new file mode 100644 index 000000000..1b8b39c17 --- /dev/null +++ b/packages/react-native-tracing/package.json @@ -0,0 +1,84 @@ +{ + "name": "@grafana/react-native-tracing", + "version": "1.12.2", + "description": "Faro react-native tracing implementation.", + "keywords": [ + "observability", + "apm", + "rum", + "logs", + "traces", + "metrics", + "browser", + "opentelemetry" + ], + "license": "Apache-2.0", + "author": "Grafana Labs", + "homepage": "https://github.com/grafana/faro-web-sdk", + "sideEffects": false, + "repository": { + "type": "git", + "url": "https://github.com/grafana/faro-web-sdk.git", + "directory": "packages/web-tracing" + }, + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "files": [ + ".browserslistrc", + "dist", + "README.md", + "LICENSE", + "android", + "ios", + "react-native-tracing.podspec" + ], + "scripts": { + "start": "yarn watch", + "build": "run-s 'build:*'", + "build:compile": "run-p 'build:compile:*'", + "build:compile:cjs": "tsc --build tsconfig.cjs.json", + "build:compile:esm": "tsc --build tsconfig.esm.json", + "build:compile:bundle": "run-s 'build:compile:bundle:*'", + "build:compile:bundle:create": "rollup -c ./rollup.config.js", + "build:compile:bundle:remove-extras": "rimraf dist/bundle/dist", + "watch": "run-s watch:compile", + "watch:compile": "yarn build:compile:cjs -w", + "clean": "rimraf dist/ yarn-error.log", + "quality": "run-s 'quality:*'", + "quality:test": "jest", + "quality:format": "prettier --cache --cache-location=../../.cache/prettier/webTracing --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint": "run-s 'quality:lint:*'", + "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/webTracing --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"", + "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/webTracing --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"", + "quality:lint:md": "markdownlint README.md", + "quality:circular-deps": "madge --circular ." + }, + "dependencies": { + "@grafana/react-native-sdk": "^1.12.2", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-zone": "1.26.0", + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.53.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation-fetch": "^0.53.0", + "@opentelemetry/instrumentation-xml-http-request": "^0.53.0", + "@opentelemetry/otlp-transformer": "^0.53.0", + "@opentelemetry/resources": "^1.26.0", + "@opentelemetry/sdk-trace-web": "^1.26.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "devDependencies": { + "@types/react": "^17.0.0", + "@types/react-native": "^0.63.0", + "react": "^17.0.0", + "react-native": "^0.63.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-native": "^0.63.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/react-native-tracing/react-native-tracing.podspec b/packages/react-native-tracing/react-native-tracing.podspec new file mode 100644 index 000000000..b2339ebd2 --- /dev/null +++ b/packages/react-native-tracing/react-native-tracing.podspec @@ -0,0 +1,24 @@ +require 'json' + +package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + +Pod::Spec.new do |s| + s.name = 'react-native-tracing' + s.version = package['version'] + s.summary = package['description'] + s.license = package['license'] + s.authors = package['author'] + s.homepage = package['homepage'] + s.platform = :ios, "11.0" + s.source = { :git => "https://github.com/grafana/faro-web-sdk.git", :tag => "v#{s.version}" } + s.source_files = "ios/**/*.{h,m,mm,swift}" + s.dependency "React-Core" + + s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', + 'SWIFT_VERSION' => '5.0', + 'CLANG_ENABLE_MODULES' => 'YES' + } + + s.swift_version = '5.0' +end \ No newline at end of file diff --git a/packages/react-native-tracing/rollup.config.js b/packages/react-native-tracing/rollup.config.js new file mode 100644 index 000000000..e7fc21638 --- /dev/null +++ b/packages/react-native-tracing/rollup.config.js @@ -0,0 +1,3 @@ +const { getRollupConfigBase } = require('../../rollup.config.base.js'); + +module.exports = getRollupConfigBase('rnTracing'); diff --git a/packages/react-native-tracing/src/dependencies.ts b/packages/react-native-tracing/src/dependencies.ts new file mode 100644 index 000000000..0abed738b --- /dev/null +++ b/packages/react-native-tracing/src/dependencies.ts @@ -0,0 +1,7 @@ +import type { API } from '@grafana/faro-core'; + +export let api: API; + +export function setDependencies(faro: API): void { + api = faro; +} diff --git a/packages/react-native-tracing/src/faroNativeInstrumentation.ts b/packages/react-native-tracing/src/faroNativeInstrumentation.ts new file mode 100644 index 000000000..553631575 --- /dev/null +++ b/packages/react-native-tracing/src/faroNativeInstrumentation.ts @@ -0,0 +1,14 @@ +import { BaseInstrumentation, VERSION } from '@grafana/react-native-sdk'; + +import { setDependencies } from './dependencies'; + +const INSTRUMENTATION_NAME = '@grafana/native-instrumentation'; + +export class NativeInstrumentation extends BaseInstrumentation { + readonly name = INSTRUMENTATION_NAME; + readonly version = VERSION; + + initialize(): void { + setDependencies(this.api); + } +} diff --git a/packages/react-native-tracing/src/faroTraceExporter.ts b/packages/react-native-tracing/src/faroTraceExporter.ts new file mode 100644 index 000000000..d54513e7f --- /dev/null +++ b/packages/react-native-tracing/src/faroTraceExporter.ts @@ -0,0 +1,24 @@ +import { ExportResultCode } from '@opentelemetry/core'; +import type { ExportResult } from '@opentelemetry/core'; +import { createExportTraceServiceRequest } from '@opentelemetry/otlp-transformer'; +import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-web'; + +import { sendFaroEvents } from './faroTraceExporter.utils'; +import type { FaroTraceExporterConfig } from './types'; + +export class FaroTraceExporter implements SpanExporter { + constructor(private config: FaroTraceExporterConfig) {} + + export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void { + const traceEvent = createExportTraceServiceRequest(spans, { useHex: true, useLongBits: false }); + + this.config.api.pushTraces(traceEvent); + sendFaroEvents(traceEvent.resourceSpans); + + resultCallback({ code: ExportResultCode.SUCCESS }); + } + + shutdown(): Promise { + return Promise.resolve(undefined); + } +} diff --git a/packages/react-native-tracing/src/faroTraceExporter.utils.test.ts b/packages/react-native-tracing/src/faroTraceExporter.utils.test.ts new file mode 100644 index 000000000..cf11cae08 --- /dev/null +++ b/packages/react-native-tracing/src/faroTraceExporter.utils.test.ts @@ -0,0 +1,336 @@ +import { initializeFaro } from '@grafana/faro-core'; +import { mockConfig } from '@grafana/faro-core/src/testUtils'; + +import { sendFaroEvents } from './faroTraceExporter.utils'; + +describe('faroTraceExporter.utils', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('Emits no faro events if no client spans are contained ', () => { + const faro = initializeFaro(mockConfig()); + + const mockPushEvent = jest.fn(); + jest.spyOn(faro.api, 'pushEvent').mockImplementationOnce(mockPushEvent); + + // remove scopeSpan which contains client span + const data = { + ...testData[0], + scopeSpans: testData[0]?.scopeSpans.map((s) => ({ ...s })), + }; + + data.scopeSpans!.pop(); + + sendFaroEvents([data as any]); + + expect(mockPushEvent).toBeCalledTimes(0); + }); + + it('Creates a Faro event for client spans only', () => { + const faro = initializeFaro(mockConfig()); + + const mockPushEvent = jest.fn(); + jest.spyOn(faro.api, 'pushEvent').mockImplementationOnce(mockPushEvent); + + sendFaroEvents(testData); + + expect(mockPushEvent).toBeCalledTimes(1); + expect(mockPushEvent.mock.lastCall[0]).toBe('faro.tracing.fetch'); + expect(mockPushEvent.mock.lastCall[1]).toStrictEqual({ + component: 'fetch', + session_id: 'my-session-id', + 'http.host': 'my-host', + 'http.method': 'GET', + 'http.response_content_length': '127', + 'http.scheme': 'http', + 'http.status_code': '401', + 'http.status_text': 'Unauthorized', + 'http.url': 'http://foo/bar', + 'http.user_agent': 'my-user-agent', + }); + }); + + it('Uses whole instrumentation name if no "-" is part of the name', () => { + const faro = initializeFaro(mockConfig()); + + const mockPushEvent = jest.fn(); + jest.spyOn(faro.api, 'pushEvent').mockImplementationOnce(mockPushEvent); + + // add scope name without "-" + const data = { + ...testData[0], + scopeSpans: testData[0]?.scopeSpans.map((s) => ({ ...s })), + }; + data.scopeSpans!.at(-1)!.scope.name = '@foo/coolName'; + + sendFaroEvents([data as any]); + + expect(mockPushEvent).toBeCalledTimes(1); + expect(mockPushEvent.mock.lastCall[0]).toBe('faro.tracing.coolName'); + }); + + it('Call Faro event API with traceID and spanID of contained in teh span', () => { + const faro = initializeFaro(mockConfig()); + + const mockPushEvent = jest.fn(); + jest.spyOn(faro.api, 'pushEvent').mockImplementationOnce(mockPushEvent); + + // add scope name without "-" + const data = { + ...testData[0], + scopeSpans: testData[0]?.scopeSpans.map((s) => ({ ...s })), + }; + data.scopeSpans!.at(-1)!.scope.name = '@foo/coolName'; + + sendFaroEvents([data as any]); + + expect(mockPushEvent).toBeCalledTimes(1); + expect(mockPushEvent.mock.lastCall[3]).toStrictEqual({ + spanContext: { + spanId: '4c47d5f85e4b2aec', + traceId: '7fb8581e3db5ebc6be4e36a7a8817cfe', + }, + }); + }); +}); + +// some unnecessary parts are removed to shorten the object a bit. +const testData = [ + { + resource: { + attributes: [], + droppedAttributesCount: 0, + }, + scopeSpans: [ + { + scope: { + name: '@opentelemetry/instrumentation-document-load', + version: '0.35.0', + }, + spans: [ + { + traceId: 'b3eb030d2a6a3ea28fd81a2c3c865d32', + spanId: '146cbe6578eedc77', + parentSpanId: '411fbeb357bad860', + name: 'resourceFetch', + kind: 1, + startTimeUnixNano: '1709051097380000000', + endTimeUnixNano: '1709051097419000000', + attributes: [ + { + key: 'session_id', + value: { + stringValue: '7Zk2kA92sT', + }, + }, + { + key: 'http.url', + value: { + stringValue: + 'http://localhost:5173/@fs/Users/marcoschaefer/Code/Repos/Grafana/faro-web-sdk/packages/core/dist/esm/api/traces/index.js', + }, + }, + { + key: 'http.response_content_length', + value: { + intValue: 652, + }, + }, + ], + droppedAttributesCount: 0, + events: [ + { + attributes: [], + name: 'fetchStart', + timeUnixNano: '1709051097380000000', + droppedAttributesCount: 0, + }, + ], + droppedEventsCount: 0, + status: { + code: 0, + }, + links: [], + droppedLinksCount: 0, + }, + ], + }, + { + scope: { + name: '@grafana/faro-react', + version: '1.3.9', + }, + spans: [ + { + traceId: 'e2e8ca244a7f149ca0f8e820df2d2ec1', + spanId: 'f4e18e624b397865', + name: 'componentMount', + kind: 1, + startTimeUnixNano: '1709051097617000000', + endTimeUnixNano: '1709051097617000000', + attributes: [ + { + key: 'session_id', + value: { + stringValue: '7Zk2kA92sT', + }, + }, + { + key: 'react.component.name', + value: { + stringValue: 'CounterComponent', + }, + }, + ], + droppedAttributesCount: 0, + events: [], + droppedEventsCount: 0, + status: { + code: 0, + }, + links: [], + droppedLinksCount: 0, + }, + ], + }, + { + scope: { + name: '@opentelemetry/instrumentation-fetch', + version: '0.45.1', + }, + spans: [ + { + // this is the only span which is of kind=3 (client) + traceId: '7fb8581e3db5ebc6be4e36a7a8817cfe', + spanId: '4c47d5f85e4b2aec', + parentSpanId: 'da5a27b83e0f2871', + name: 'HTTP GET', + kind: 3, + startTimeUnixNano: '1709051097594000000', + endTimeUnixNano: '1709051097609000000', + attributes: [ + { + key: 'session_id', + value: { + stringValue: 'my-session-id', + }, + }, + { + key: 'component', + value: { + stringValue: 'fetch', + }, + }, + { + key: 'http.method', + value: { + stringValue: 'GET', + }, + }, + { + key: 'http.url', + value: { + stringValue: 'http://foo/bar', + }, + }, + { + key: 'http.status_code', + value: { + intValue: 401, + }, + }, + { + key: 'http.status_text', + value: { + stringValue: 'Unauthorized', + }, + }, + { + key: 'http.host', + value: { + stringValue: 'my-host', + }, + }, + { + key: 'http.scheme', + value: { + stringValue: 'http', + }, + }, + { + key: 'http.user_agent', + value: { + stringValue: 'my-user-agent', + }, + }, + { + key: 'http.response_content_length', + value: { + intValue: 127, + }, + }, + ], + droppedAttributesCount: 0, + events: [ + { + attributes: [], + name: 'fetchStart', + timeUnixNano: '1709051097594000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'domainLookupStart', + timeUnixNano: '1709051097594000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'domainLookupEnd', + timeUnixNano: '1709051097594000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'connectStart', + timeUnixNano: '1709051097594000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'connectEnd', + timeUnixNano: '1709051097594000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'requestStart', + timeUnixNano: '1709051097596000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'responseStart', + timeUnixNano: '1709051097597000000', + droppedAttributesCount: 0, + }, + { + attributes: [], + name: 'responseEnd', + timeUnixNano: '1709051097597000000', + droppedAttributesCount: 0, + }, + ], + droppedEventsCount: 0, + status: { + code: 0, + }, + links: [], + droppedLinksCount: 0, + }, + ], + }, + ], + }, +]; diff --git a/packages/react-native-tracing/src/faroTraceExporter.utils.ts b/packages/react-native-tracing/src/faroTraceExporter.utils.ts new file mode 100644 index 000000000..6e734854b --- /dev/null +++ b/packages/react-native-tracing/src/faroTraceExporter.utils.ts @@ -0,0 +1,47 @@ +import type { SpanContext } from '@opentelemetry/api'; +import { ESpanKind, type IResourceSpans } from '@opentelemetry/otlp-transformer'; + +import { faro, unknownString } from '@grafana/faro-core'; +import type { EventAttributes as FaroEventAttributes } from '@grafana/react-native-sdk'; + +export function sendFaroEvents(resourceSpans: IResourceSpans[] = []) { + for (const resourceSpan of resourceSpans) { + const { scopeSpans } = resourceSpan; + + for (const scopeSpan of scopeSpans) { + const { scope, spans = [] } = scopeSpan; + + for (const span of spans) { + if (span.kind !== ESpanKind.SPAN_KIND_CLIENT) { + continue; + } + + const spanContext: Pick = { + traceId: span.traceId.toString(), + spanId: span.spanId.toString(), + }; + + const faroEventAttributes: FaroEventAttributes = {}; + + for (const attribute of span.attributes) { + faroEventAttributes[attribute.key] = String(Object.values(attribute.value)[0]); + } + + const index = (scope?.name ?? '').indexOf('-'); + let eventName = unknownString; + + if (scope?.name) { + if (index === -1) { + eventName = scope.name.split('/')[1] ?? scope.name; + } + + if (index > -1) { + eventName = scope?.name.substring(index + 1); + } + } + + faro.api.pushEvent(`faro.tracing.${eventName}`, faroEventAttributes, undefined, { spanContext }); + } + } + } +} diff --git a/packages/react-native-tracing/src/faroXhrInstrumentation.ts b/packages/react-native-tracing/src/faroXhrInstrumentation.ts new file mode 100644 index 000000000..419e5dee0 --- /dev/null +++ b/packages/react-native-tracing/src/faroXhrInstrumentation.ts @@ -0,0 +1,42 @@ +import type { Span } from '@opentelemetry/api'; +import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request'; +import type { XMLHttpRequestInstrumentationConfig } from '@opentelemetry/instrumentation-xml-http-request'; +import type { OpenFunction } from '@opentelemetry/instrumentation-xml-http-request/build/src/types'; + +type Parent = { + _createSpan: (xhr: XMLHttpRequest, url: string, method: string) => Span | undefined; +}; + +export class FaroXhrInstrumentation extends XMLHttpRequestInstrumentation { + private parentCreateSpan: Parent['_createSpan']; + + constructor(config: XMLHttpRequestInstrumentationConfig = {}) { + super(config); + + const self = this as any as Parent; + this.parentCreateSpan = self._createSpan.bind(this); + } + + // Patching the parent's private method to handle url type string or URL + protected override _patchOpen() { + return (original: OpenFunction): OpenFunction => { + const plugin = this; + return function patchOpen(this: XMLHttpRequest, ...args): void { + const method: string = args[0]; + let url: string | URL = args[1]; + + if (isInstanceOfURL(url)) { + url = url.href; + } + + plugin.parentCreateSpan(this, url, method); + + return original.apply(this, args); + }; + }; + } +} + +function isInstanceOfURL(item: any): item is URL { + return item instanceof URL; +} diff --git a/packages/react-native-tracing/src/getDefaultInstrumentations.test.ts b/packages/react-native-tracing/src/getDefaultInstrumentations.test.ts new file mode 100644 index 000000000..1c83733a8 --- /dev/null +++ b/packages/react-native-tracing/src/getDefaultInstrumentations.test.ts @@ -0,0 +1,64 @@ +import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch'; +import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request'; + +import { getDefaultOTELInstrumentations } from './getDefaultOTELInstrumentations'; + +jest.mock('@opentelemetry/instrumentation-fetch'); +jest.mock('@opentelemetry/instrumentation-xml-http-request'); + +describe('getDefaultOTELInstrumentations', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should return an array of instrumentations', () => { + const instrumentations = getDefaultOTELInstrumentations(); + expect(instrumentations).toBeInstanceOf(Array); + expect(instrumentations[0]).toBeInstanceOf(FetchInstrumentation); + expect(instrumentations[1]).toBeInstanceOf(XMLHttpRequestInstrumentation); + }); + + it('should apply default options', () => { + getDefaultOTELInstrumentations(); + + expect(FetchInstrumentation).toHaveBeenCalledWith({ + ignoreNetworkEvents: true, + applyCustomAttributesOnSpan: expect.any(Function), + }); + + expect(XMLHttpRequestInstrumentation).toHaveBeenCalledWith({ + ignoreNetworkEvents: true, + applyCustomAttributesOnSpan: expect.any(Function), + }); + }); + + it('should apply custom options', () => { + const ignoreUrls = ['example.com']; + const propagateTraceHeaderCorsUrls = ['example2.com']; + + getDefaultOTELInstrumentations({ + ignoreUrls, + propagateTraceHeaderCorsUrls, + fetchInstrumentationOptions: { + ignoreNetworkEvents: false, + }, + xhrInstrumentationOptions: { + ignoreNetworkEvents: false, + }, + }); + + expect(FetchInstrumentation).toHaveBeenCalledWith({ + ignoreUrls, + propagateTraceHeaderCorsUrls, + ignoreNetworkEvents: false, + applyCustomAttributesOnSpan: expect.any(Function), + }); + + expect(XMLHttpRequestInstrumentation).toHaveBeenCalledWith({ + ignoreUrls, + propagateTraceHeaderCorsUrls, + ignoreNetworkEvents: false, + applyCustomAttributesOnSpan: expect.any(Function), + }); + }); +}); diff --git a/packages/react-native-tracing/src/getDefaultOTELInstrumentations.ts b/packages/react-native-tracing/src/getDefaultOTELInstrumentations.ts new file mode 100644 index 000000000..c40cdab1f --- /dev/null +++ b/packages/react-native-tracing/src/getDefaultOTELInstrumentations.ts @@ -0,0 +1,49 @@ +// @ts-nocheck +import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch'; + +import { FaroXhrInstrumentation } from './faroXhrInstrumentation'; +import { + fetchCustomAttributeFunctionWithDefaults, + xhrCustomAttributeFunctionWithDefaults, +} from './instrumentationUtils'; +import type { DefaultInstrumentationsOptions, InstrumentationOption } from './types'; + +export function getDefaultOTELInstrumentations(options: DefaultInstrumentationsOptions = {}): InstrumentationOption[] { + const { fetchInstrumentationOptions, xhrInstrumentationOptions, ...sharedOptions } = options; + + const fetchOpts = createFetchInstrumentationOptions(fetchInstrumentationOptions, sharedOptions); + const xhrOpts = createXhrInstrumentationOptions(xhrInstrumentationOptions, sharedOptions); + + return [new FetchInstrumentation(fetchOpts), new FaroXhrInstrumentation(xhrOpts)]; +} +function createFetchInstrumentationOptions( + fetchInstrumentationOptions: DefaultInstrumentationsOptions['fetchInstrumentationOptions'], + sharedOptions: Record +) { + return { + ...sharedOptions, + ignoreNetworkEvents: true, + // keep this here to overwrite the defaults above if provided by the users + ...fetchInstrumentationOptions, + // always keep this function + applyCustomAttributesOnSpan: fetchCustomAttributeFunctionWithDefaults( + fetchInstrumentationOptions?.applyCustomAttributesOnSpan + ), + }; +} + +function createXhrInstrumentationOptions( + xhrInstrumentationOptions: DefaultInstrumentationsOptions['xhrInstrumentationOptions'], + sharedOptions: Record +) { + return { + ...sharedOptions, + ignoreNetworkEvents: true, + // keep this here to overwrite the defaults above if provided by the users + ...xhrInstrumentationOptions, + // always keep this function + applyCustomAttributesOnSpan: xhrCustomAttributeFunctionWithDefaults( + xhrInstrumentationOptions?.applyCustomAttributesOnSpan + ), + }; +} diff --git a/packages/react-native-tracing/src/index.ts b/packages/react-native-tracing/src/index.ts new file mode 100644 index 000000000..56a753946 --- /dev/null +++ b/packages/react-native-tracing/src/index.ts @@ -0,0 +1,20 @@ +export { FaroTraceExporter } from './faroTraceExporter'; + +export { FaroSessionSpanProcessor } from './sessionSpanProcessor'; + +export { getDefaultOTELInstrumentations } from './getDefaultOTELInstrumentations'; + +export { TracingInstrumentation } from './instrumentation'; + +export { getSamplingDecision } from './sampler'; + +export type { FaroTraceExporterConfig, TracingInstrumentationOptions } from './types'; + +export { setSpanStatusOnFetchError, fetchCustomAttributeFunctionWithDefaults } from './instrumentationUtils'; + +// react-navigation integration + +export { initializeReactNavigationInstrumentation, ReactNavigationIntegration } from './react-navigation'; + +export { wrap } from './wrapHOC'; +export { NativeInstrumentation } from './faroNativeInstrumentation'; diff --git a/packages/react-native-tracing/src/instrumentation.ts b/packages/react-native-tracing/src/instrumentation.ts new file mode 100644 index 000000000..53aef988a --- /dev/null +++ b/packages/react-native-tracing/src/instrumentation.ts @@ -0,0 +1,92 @@ +import { context, trace } from '@opentelemetry/api'; +import { W3CTraceContextPropagator } from '@opentelemetry/core'; +import { registerInstrumentations } from '@opentelemetry/instrumentation'; +import { Resource, type ResourceAttributes } from '@opentelemetry/resources'; +import { BatchSpanProcessor, WebTracerProvider } from '@opentelemetry/sdk-trace-web'; +import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'; + +import { BaseInstrumentation, type Transport, VERSION } from '@grafana/react-native-sdk'; + +import { FaroTraceExporter } from './faroTraceExporter'; +import { getDefaultOTELInstrumentations } from './getDefaultOTELInstrumentations'; +import { getSamplingDecision } from './sampler'; +import { FaroSessionSpanProcessor } from './sessionSpanProcessor'; +import type { TracingInstrumentationOptions } from './types'; + +// the providing of app name here is not great +// should delay initialization and provide the full Faro config, +// taking app name from it + +export class TracingInstrumentation extends BaseInstrumentation { + name = '@grafana/faro-react-native-tracing'; + version = VERSION; + + static SCHEDULED_BATCH_DELAY_MS = 1000; + + constructor(private options: TracingInstrumentationOptions = {}) { + super(); + } + + initialize(): void { + const options = this.options; + const attributes: ResourceAttributes = {}; + + if (this.config.app.name) { + attributes[ATTR_SERVICE_NAME] = this.config.app.name; + } + + if (this.config.app.version) { + attributes[ATTR_SERVICE_VERSION] = this.config.app.version; + } + + Object.assign(attributes, options.resourceAttributes); + + const resource = Resource.default().merge(new Resource(attributes)); + + const provider = new WebTracerProvider({ + resource, + sampler: { + shouldSample: () => { + return { + decision: getSamplingDecision(this.api.getSession()), + }; + }, + }, + }); + + provider.addSpanProcessor( + options.spanProcessor ?? + new FaroSessionSpanProcessor( + new BatchSpanProcessor(new FaroTraceExporter({ api: this.api }), { + scheduledDelayMillis: TracingInstrumentation.SCHEDULED_BATCH_DELAY_MS, + maxExportBatchSize: 30, + }), + this.metas + ) + ); + + provider.register({ + propagator: options.propagator ?? new W3CTraceContextPropagator(), + contextManager: options.contextManager, + }); + + const { propagateTraceHeaderCorsUrls, fetchInstrumentationOptions, xhrInstrumentationOptions } = + this.options.instrumentationOptions ?? {}; + + registerInstrumentations({ + instrumentations: + options.instrumentations ?? + getDefaultOTELInstrumentations({ + ignoreUrls: this.getIgnoreUrls(), + propagateTraceHeaderCorsUrls, + fetchInstrumentationOptions, + xhrInstrumentationOptions, + }), + }); + this.api.initOTEL(trace, context); + } + + private getIgnoreUrls(): Array { + return this.transports.transports.flatMap((transport: Transport) => transport.getIgnoreUrls()); + } +} diff --git a/packages/react-native-tracing/src/instrumentationUtils.test.ts b/packages/react-native-tracing/src/instrumentationUtils.test.ts new file mode 100644 index 000000000..f91871b4e --- /dev/null +++ b/packages/react-native-tracing/src/instrumentationUtils.test.ts @@ -0,0 +1,77 @@ +import { SpanStatusCode } from '@opentelemetry/api'; + +import { fetchCustomAttributeFunctionWithDefaults, setSpanStatusOnFetchError } from './instrumentationUtils'; +import * as instrumentationUtilsMock from './instrumentationUtils'; + +describe('faroTraceExporter.utils', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + test.each([500, 599, 400, 499, new Error()])('set span status on fetch error', (result) => { + const span = { setStatus: jest.fn() } as any; + const request = {} as Request; + const response = result instanceof Error ? result : ({ status: result } as Response); + + setSpanStatusOnFetchError(span, request, response); + + expect(span.setStatus).toBeCalledWith({ code: SpanStatusCode.ERROR }); + }); + + test.each([200, 300, 399])('does not set span status on fetch success', (result) => { + const span = { setStatus: jest.fn() } as any; + const request = {} as Request; + const response = { status: result } as Response; + + setSpanStatusOnFetchError(span, request, response); + + expect(span.setStatus).not.toBeCalled(); + }); + + it('calls custom setSpanStatusOnFetchError from fetchInstrumentationOptions and callback if provided', () => { + const mock = jest.fn(); + jest.spyOn(instrumentationUtilsMock, 'setSpanStatusOnFetchError').mockImplementationOnce(mock); + + const span = { setStatus: jest.fn() } as any; + const request = {} as Request; + const response = { status: 500 } as Response; + const callback = jest.fn(); + + fetchCustomAttributeFunctionWithDefaults(callback)(span, request, response); + + expect(span.setStatus).toBeCalledWith({ code: SpanStatusCode.ERROR }); + expect(callback).toBeCalledWith(span, request, response); + }); + + test.each([500, 599, 400, 499])('set span status on XMLHttpRequest error', (result) => { + const span = { setStatus: jest.fn() } as any; + const xhr = { status: result } as XMLHttpRequest; + + instrumentationUtilsMock.setSpanStatusOnXMLHttpRequestError(span, xhr); + + expect(span.setStatus).toBeCalledWith({ code: SpanStatusCode.ERROR }); + }); + + test.each([200, 300, 399])('does not set span status on XMLHttpRequest success', (result) => { + const span = { setStatus: jest.fn() } as any; + const xhr = { status: result } as XMLHttpRequest; + + instrumentationUtilsMock.setSpanStatusOnXMLHttpRequestError(span, xhr); + + expect(span.setStatus).not.toBeCalled(); + }); + + it('calls custom setSpanStatusOnFetchError from xhrInstrumentationOptions and callback if provided', () => { + const mock = jest.fn(); + jest.spyOn(instrumentationUtilsMock, 'setSpanStatusOnXMLHttpRequestError').mockImplementationOnce(mock); + + const span = { setStatus: jest.fn() } as any; + const xhr = { status: 500 } as XMLHttpRequest; + const callback = jest.fn(); + + instrumentationUtilsMock.xhrCustomAttributeFunctionWithDefaults(callback)(span, xhr); + + expect(span.setStatus).toBeCalledWith({ code: SpanStatusCode.ERROR }); + expect(callback).toBeCalledWith(span, xhr); + }); +}); diff --git a/packages/react-native-tracing/src/instrumentationUtils.ts b/packages/react-native-tracing/src/instrumentationUtils.ts new file mode 100644 index 000000000..57692aaac --- /dev/null +++ b/packages/react-native-tracing/src/instrumentationUtils.ts @@ -0,0 +1,53 @@ +import { type Span, SpanStatusCode } from '@opentelemetry/api'; +import type { FetchCustomAttributeFunction } from '@opentelemetry/instrumentation-fetch'; +import type { XHRCustomAttributeFunction } from '@opentelemetry/instrumentation-xml-http-request'; + +export interface FetchError { + status?: number; + message: string; +} + +/** + * Adds HTTP status code to every span. + * + * The fetch instrumentation does not always set the span status to error as defined by the spec. + * To work around that issue we manually set the span status. + * + * Issue: https://github.com/open-telemetry/opentelemetry-js/issues/3564 + * Spec: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/trace/semantic_conventions/http.md#status + */ +export function setSpanStatusOnFetchError(span: Span, _request: Request | RequestInit, result: Response | FetchError) { + const httpStatusCode = result instanceof Error ? 0 : result.status; + setSpanStatus(span, httpStatusCode); +} + +export function setSpanStatusOnXMLHttpRequestError(span: Span, xhr: XMLHttpRequest) { + setSpanStatus(span, xhr.status); +} + +function setSpanStatus(span: Span, httpStatusCode?: number) { + if (httpStatusCode == null) { + return; + } + + const isError = httpStatusCode === 0; + const isClientOrServerError = httpStatusCode >= 400 && httpStatusCode < 600; + + if (isError || isClientOrServerError) { + span.setStatus({ code: SpanStatusCode.ERROR }); + } +} + +export function fetchCustomAttributeFunctionWithDefaults(callback?: FetchCustomAttributeFunction) { + return (span: Span, request: Request | RequestInit, result: Response | FetchError) => { + setSpanStatusOnFetchError(span, request, result); + callback?.(span, request, result); + }; +} + +export function xhrCustomAttributeFunctionWithDefaults(callback?: XHRCustomAttributeFunction) { + return (span: Span, xhr: XMLHttpRequest) => { + setSpanStatusOnXMLHttpRequestError(span, xhr); + callback?.(span, xhr); + }; +} diff --git a/packages/react-native-tracing/src/react-navigation/dependencies.ts b/packages/react-native-tracing/src/react-navigation/dependencies.ts new file mode 100644 index 000000000..6adbae7ed --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/dependencies.ts @@ -0,0 +1,9 @@ +import type { API, InternalLogger } from '@grafana/faro-web-sdk'; + +export let internalLogger: InternalLogger; +export let api: API; + +export function setDependencies(newInternalLogger: InternalLogger, newApi: API): void { + internalLogger = newInternalLogger; + api = newApi; +} diff --git a/packages/react-native-tracing/src/react-navigation/handlers.ts b/packages/react-native-tracing/src/react-navigation/handlers.ts new file mode 100644 index 000000000..3f9644979 --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/handlers.ts @@ -0,0 +1,119 @@ +import { SpanStatusCode, type Tracer } from '@opentelemetry/api'; + +import { EVENT_ROUTE_CHANGE } from '@grafana/faro-core'; + +import { api, internalLogger } from './dependencies'; +import { + type NavigationContainer, + type NavigationState, + ROUTE_CHANGE_TIMEOUT_MS, + SPAN_ATTRIBUTES, + SPAN_NAME, +} from './types'; + +/** + * Cleans up the navigation state and marks the span as failed. + */ +function discardNavigation(state: NavigationState, reason: string): void { + if (state.activeSpan) { + state.activeSpan.setStatus({ code: SpanStatusCode.ERROR, message: reason }); + state.activeSpan.end(); + state.activeSpan = undefined; + } + + if (state.stateChangeTimeout) { + clearTimeout(state.stateChangeTimeout); + state.stateChangeTimeout = undefined; + } +} + +/** + * Handles the start of a navigation action. + * Creates a new span and records the source route. + */ +export function handleNavigationStart( + state: NavigationState, + tracer: Tracer, + currentRoute: { name: string } | undefined +): void { + if (!currentRoute) { + return; + } + + // Clean up existing navigation if any + if (state.activeSpan) { + internalLogger.debug('Interrupting active navigation'); + discardNavigation(state, 'Navigation interrupted'); + } + // Record source route + state.fromRoute = currentRoute.name; + + // Start new navigation span + state.activeSpan = tracer.startSpan(SPAN_NAME, { + attributes: { + [SPAN_ATTRIBUTES.type]: 'navigation', + [SPAN_ATTRIBUTES.fromRoute]: state.fromRoute, + }, + }); + + // Set timeout for navigation completion + state.stateChangeTimeout = setTimeout(() => { + internalLogger.debug('Navigation timeout exceeded'); + discardNavigation(state, 'Navigation timeout'); + }, ROUTE_CHANGE_TIMEOUT_MS); +} + +/** + * Handles the completion of a navigation action. + * Updates and completes the navigation span. + */ +export function handleNavigationComplete(state: NavigationState, currentRoute: { name: string } | undefined): void { + if (!currentRoute || !state.activeSpan) { + return; + } + + // Clear timeout since navigation completed + if (state.stateChangeTimeout) { + clearTimeout(state.stateChangeTimeout); + state.stateChangeTimeout = undefined; + } + + const { activeSpan, fromRoute } = state; + + // Update span with final route information + activeSpan.setAttributes({ + [SPAN_ATTRIBUTES.toRoute]: currentRoute.name, + }); + + // Complete the navigation span + activeSpan.setStatus({ code: SpanStatusCode.OK }); + activeSpan.end(); + state.activeSpan = undefined; + + // Update view and emit events + api.setView({ name: currentRoute.name }); + + api.pushEvent(EVENT_ROUTE_CHANGE, { + fromRoute: fromRoute, + toRoute: currentRoute.name, + }); + + // Update route state + state.fromRoute = currentRoute.name; +} + +/** + * Initializes route tracking for the initial screen. + */ +export function initializeInitialRoute(navigationContainer: NavigationContainer, state: NavigationState): void { + const initialRoute = navigationContainer.getCurrentRoute(); + if (initialRoute && !state.isInitialized) { + api.setView({ name: initialRoute.name }); + api.pushEvent(EVENT_ROUTE_CHANGE, { + fromRoute: state.fromRoute, + toRoute: initialRoute.name, + }); + state.fromRoute = initialRoute.name; + state.isInitialized = true; + } +} diff --git a/packages/react-native-tracing/src/react-navigation/index.ts b/packages/react-native-tracing/src/react-navigation/index.ts new file mode 100644 index 000000000..8f98d719f --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/index.ts @@ -0,0 +1,3 @@ +export { initializeReactNavigationInstrumentation } from './initialize'; +export { ReactNavigationIntegration } from './instrumentation'; +export type { NavigationContainerRef } from './types'; diff --git a/packages/react-native-tracing/src/react-navigation/initialize.ts b/packages/react-native-tracing/src/react-navigation/initialize.ts new file mode 100644 index 000000000..8a8bcbcaf --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/initialize.ts @@ -0,0 +1,11 @@ +import { registerFaroReactNavigationContainer } from './registerFaroReactNavigationContainer'; +import type { ReactNavigationInstrumentation } from './types'; + +/** + * Initializes React Navigation instrumentation for Faro + */ +export function initializeReactNavigationInstrumentation(): ReactNavigationInstrumentation { + return { + registerFaroReactNavigationContainer, + }; +} diff --git a/packages/react-native-tracing/src/react-navigation/instrumentation.ts b/packages/react-native-tracing/src/react-navigation/instrumentation.ts new file mode 100644 index 000000000..78fcf2d54 --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/instrumentation.ts @@ -0,0 +1,18 @@ +import { BaseInstrumentation, VERSION } from '@grafana/faro-core'; + +import { setDependencies } from './dependencies'; +import { metaPage } from './metaPage'; + +export class ReactNavigationIntegration extends BaseInstrumentation { + name = '@grafana/faro-react-native-navigation-tracing'; + version = VERSION; + + constructor() { + super(); + } + + initialize(): void { + setDependencies(this.internalLogger, this.api); + this.metas.add(metaPage); + } +} diff --git a/packages/react-native-tracing/src/react-navigation/metaPage.ts b/packages/react-native-tracing/src/react-navigation/metaPage.ts new file mode 100644 index 000000000..fb1b2b038 --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/metaPage.ts @@ -0,0 +1,17 @@ +import type { Meta, MetaItem } from '@grafana/faro-core'; + +import type { NavigationState } from './types'; + +export const navigationState: NavigationState = { + activeSpan: undefined, + fromRoute: 'startup', + isInitialized: false, // Not used yet + stateChangeTimeout: undefined, +}; + +export const metaPage: MetaItem> = () => ({ + page: { + id: navigationState.fromRoute, + url: navigationState.fromRoute, + }, +}); diff --git a/packages/react-native-tracing/src/react-navigation/registerFaroReactNavigationContainer.ts b/packages/react-native-tracing/src/react-navigation/registerFaroReactNavigationContainer.ts new file mode 100644 index 000000000..75374f4c9 --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/registerFaroReactNavigationContainer.ts @@ -0,0 +1,42 @@ +import { api, internalLogger } from './dependencies'; +import { handleNavigationComplete, handleNavigationStart, initializeInitialRoute } from './handlers'; +import { navigationState } from './metaPage'; +import type { NavigationContainerRef } from './types'; + +/** + * Registers route change tracking for React Navigation. + * Tracks navigation timing and emits route change events. + * + * @param navigationContainerRef - Ref to a NavigationContainer + */ +export function registerFaroReactNavigationContainer(navigationContainerRef: NavigationContainerRef): void { + const navigationContainer = navigationContainerRef.current; + + if (!navigationContainer) { + internalLogger.error('Received invalid navigation container ref'); + return; + } + + const otel = api.getOTEL(); + + if (!otel) { + internalLogger.error('OpenTelemetry not initialized'); + return; + } + + const tracer = otel.trace.getTracer('react-navigation'); + + initializeInitialRoute(navigationContainer, navigationState); + + // Listen for navigation event start (when an action 'navigate' is dispatched) + navigationContainer.addListener('__unsafe_action__', () => { + internalLogger.debug('Navigation start: ', navigationContainer.getCurrentRoute()); + handleNavigationStart(navigationState, tracer, navigationContainer.getCurrentRoute()); + }); + + // Listen for navigation event complete (when the action is completed) + navigationContainer.addListener('state', () => { + internalLogger.debug('Navigation complete: ', navigationContainer.getCurrentRoute()); + handleNavigationComplete(navigationState, navigationContainer.getCurrentRoute()); + }); +} diff --git a/packages/react-native-tracing/src/react-navigation/types.ts b/packages/react-native-tracing/src/react-navigation/types.ts new file mode 100644 index 000000000..2e32be6b9 --- /dev/null +++ b/packages/react-native-tracing/src/react-navigation/types.ts @@ -0,0 +1,35 @@ +import type { Span } from '@opentelemetry/api'; + +export interface NavigationRoute { + name: string; + key: string; + params?: Record; +} + +export interface NavigationContainer { + addListener: (type: string, listener: () => void) => void; + getCurrentRoute: () => NavigationRoute; +} + +export type NavigationContainerRef = { current: NavigationContainer }; + +export interface ReactNavigationInstrumentation { + registerFaroReactNavigationContainer: (navigationContainerRef: NavigationContainerRef) => void; +} + +export interface NavigationState { + activeSpan: Span | undefined; + fromRoute: string; + isInitialized: boolean; + stateChangeTimeout?: ReturnType; +} + +export const SPAN_NAME = 'route-change'; + +export const SPAN_ATTRIBUTES = { + type: 'navigation.type', + fromRoute: 'navigation.from_route', + toRoute: 'navigation.to_route', +} as const; + +export const ROUTE_CHANGE_TIMEOUT_MS = 10000; diff --git a/packages/react-native-tracing/src/sampler.test.ts b/packages/react-native-tracing/src/sampler.test.ts new file mode 100644 index 000000000..6e836e4e7 --- /dev/null +++ b/packages/react-native-tracing/src/sampler.test.ts @@ -0,0 +1,29 @@ +import { SamplingDecision } from '@opentelemetry/sdk-trace-web'; + +import { getSamplingDecision } from './sampler'; + +describe('Sampler', () => { + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('Set SamplingDecision to NOT_RECORD (0) if session is not part of the sample', () => { + const samplingDecision = getSamplingDecision({ + attributes: { + isSampled: 'false', + }, + }); + + expect(samplingDecision).toBe(SamplingDecision.NOT_RECORD); + }); + + it('Set SamplingDecision to RECORD_AND_SAMPLED (2) if session is part of the sample', () => { + const samplingDecision = getSamplingDecision({ + attributes: { + isSampled: 'true', + }, + }); + + expect(samplingDecision).toBe(SamplingDecision.RECORD_AND_SAMPLED); + }); +}); diff --git a/packages/react-native-tracing/src/sampler.ts b/packages/react-native-tracing/src/sampler.ts new file mode 100644 index 000000000..64b26cb14 --- /dev/null +++ b/packages/react-native-tracing/src/sampler.ts @@ -0,0 +1,10 @@ +import { SamplingDecision } from '@opentelemetry/sdk-trace-web'; + +import type { MetaSession } from '@grafana/react-native-sdk'; + +export function getSamplingDecision(sessionMeta: MetaSession = {}): SamplingDecision { + const isSessionSampled = sessionMeta.attributes?.['isSampled'] === 'true'; + const samplingDecision = isSessionSampled ? SamplingDecision.RECORD_AND_SAMPLED : SamplingDecision.NOT_RECORD; + + return samplingDecision; +} diff --git a/packages/react-native-tracing/src/sessionSpanProcessor.ts b/packages/react-native-tracing/src/sessionSpanProcessor.ts new file mode 100644 index 000000000..239ae6ee3 --- /dev/null +++ b/packages/react-native-tracing/src/sessionSpanProcessor.ts @@ -0,0 +1,37 @@ +import type { Context } from '@opentelemetry/api'; +import type { ReadableSpan, Span, SpanProcessor } from '@opentelemetry/sdk-trace-web'; + +import type { Metas } from '@grafana/react-native-sdk'; + +export class FaroSessionSpanProcessor implements SpanProcessor { + constructor( + private processor: SpanProcessor, + private metas: Metas + ) {} + + forceFlush(): Promise { + return this.processor.forceFlush(); + } + + onStart(span: Span, parentContext: Context): void { + const session = this.metas.value.session; + + if (session?.id) { + span.attributes['session.id'] = session.id; + /** + * @deprecated will be removed in the future and has been replaced by ATTR_SESSION_ID (session.id) + */ + span.attributes['session_id'] = session.id; + } + + this.processor.onStart(span, parentContext); + } + + onEnd(span: ReadableSpan): void { + this.processor.onEnd(span); + } + + shutdown(): Promise { + return this.processor.shutdown(); + } +} diff --git a/packages/react-native-tracing/src/types.ts b/packages/react-native-tracing/src/types.ts new file mode 100644 index 000000000..8a426bd27 --- /dev/null +++ b/packages/react-native-tracing/src/types.ts @@ -0,0 +1,43 @@ +import type { ContextManager, TextMapPropagator } from '@opentelemetry/api'; +import type { Instrumentation } from '@opentelemetry/instrumentation'; +import type { FetchCustomAttributeFunction } from '@opentelemetry/instrumentation-fetch'; +import type { XHRCustomAttributeFunction } from '@opentelemetry/instrumentation-xml-http-request'; +import type { ResourceAttributes } from '@opentelemetry/resources'; +import type { SpanProcessor } from '@opentelemetry/sdk-trace-web'; + +import type { Patterns } from '@grafana/faro-core'; +import type { API } from '@grafana/react-native-sdk'; + +// type got remove by with experimental/v0.52.0 and is replaced by the following type: +// See: https://github.com/open-telemetry/opentelemetry-js/releases/tag/experimental%2Fv0.52.0 +export type InstrumentationOption = Instrumentation | Instrumentation[]; + +export interface FaroTraceExporterConfig { + api: API; +} + +export interface TracingInstrumentationOptions { + resourceAttributes?: ResourceAttributes; + propagator?: TextMapPropagator; + contextManager?: ContextManager; + instrumentations?: InstrumentationOption[]; + spanProcessor?: SpanProcessor; + instrumentationOptions?: Omit; +} + +export type MatchUrlDefinitions = Patterns; + +export type DefaultInstrumentationsOptions = { + ignoreUrls?: MatchUrlDefinitions; + propagateTraceHeaderCorsUrls?: MatchUrlDefinitions; + + fetchInstrumentationOptions?: { + applyCustomAttributesOnSpan?: FetchCustomAttributeFunction; + ignoreNetworkEvents?: boolean; + }; + + xhrInstrumentationOptions?: { + applyCustomAttributesOnSpan?: XHRCustomAttributeFunction; + ignoreNetworkEvents?: boolean; + }; +}; diff --git a/packages/react-native-tracing/src/wrapHOC.tsx b/packages/react-native-tracing/src/wrapHOC.tsx new file mode 100644 index 000000000..a1b781858 --- /dev/null +++ b/packages/react-native-tracing/src/wrapHOC.tsx @@ -0,0 +1,46 @@ +import React, { useEffect } from 'react'; +// @ts-ignore +// eslint-disable-next-line import/namespace +import { Alert, NativeModules } from 'react-native'; + +import { api } from './dependencies'; + +interface StartupMetrics { + startupTime: number; +} + +const measureStartupTime = async (): Promise => { + try { + const hasAppRestarted = await NativeModules['NativeInstrumentation'].getHasAppRestarted(); + + if (hasAppRestarted) { + return; + } + + const metrics: StartupMetrics = await NativeModules['NativeInstrumentation'].getStartupTime(); + + const currentTime = Date.now(); + const startupDurationMs = currentTime - metrics.startupTime; + + api.pushMeasurement({ + type: 'app_startup_time', + values: { + startup_duration: startupDurationMs / 1000, + }, + timestamp: new Date().toISOString(), + }); + } catch (error: unknown) { + console.warn('[NativeInstrumentation] Failed to measure startup time:', error); + } +}; + +export function wrap

(WrappedComponent: React.ComponentType

) { + return function WithStartupTracking(props: P) { + useEffect(() => { + measureStartupTime(); + }, []); + + // @ts-ignore + return ; + }; +} diff --git a/packages/react-native-tracing/tsconfig.bundle.json b/packages/react-native-tracing/tsconfig.bundle.json new file mode 100644 index 000000000..aca68665a --- /dev/null +++ b/packages/react-native-tracing/tsconfig.bundle.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/bundle/types", + "outDir": "./dist/bundle", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/core.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["./**/*.test.ts"] +} diff --git a/packages/react-native-tracing/tsconfig.cjs.json b/packages/react-native-tracing/tsconfig.cjs.json new file mode 100644 index 000000000..be65fcff9 --- /dev/null +++ b/packages/react-native-tracing/tsconfig.cjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.cjs.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/cjs", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/rnTracing.cjs.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../core/tsconfig.cjs.json" }, { "path": "../react-native-sdk/tsconfig.cjs.json" }] +} diff --git a/packages/react-native-tracing/tsconfig.esm.json b/packages/react-native-tracing/tsconfig.esm.json new file mode 100644 index 000000000..3aa61fb54 --- /dev/null +++ b/packages/react-native-tracing/tsconfig.esm.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.esm.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/esm", + "rootDir": "./src", + "tsBuildInfoFile": "../../.cache/tsc/rnTracing.esm.tsbuildinfo" + }, + "include": ["./src"], + "exclude": ["**/*.test.ts"], + "references": [{ "path": "../core/tsconfig.esm.json" }, { "path": "../react-native-sdk/tsconfig.esm.json" }] +} diff --git a/packages/react-native-tracing/tsconfig.json b/packages/react-native-tracing/tsconfig.json new file mode 100644 index 000000000..db2455a0e --- /dev/null +++ b/packages/react-native-tracing/tsconfig.json @@ -0,0 +1,7 @@ +{ + "references": [ + { "path": "./tsconfig.cjs.json" }, + { "path": "./tsconfig.esm.json" }, + { "path": "./tsconfig.spec.json" } + ] +} diff --git a/packages/react-native-tracing/tsconfig.spec.json b/packages/react-native-tracing/tsconfig.spec.json new file mode 100644 index 000000000..8f8f707fd --- /dev/null +++ b/packages/react-native-tracing/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.spec.json", + "compilerOptions": { + "declarationDir": "./dist/types", + "outDir": "./dist/spec", + "rootDir": "..", + "tsBuildInfoFile": "../../.cache/tsc/rnTracing.spec.tsbuildinfo" + }, + "include": ["./src"], + "references": [{ "path": "../core/tsconfig.spec.json" }] +} diff --git a/rollup.config.base.js b/rollup.config.base.js index 4181f5562..6444823ce 100644 --- a/rollup.config.base.js +++ b/rollup.config.base.js @@ -28,6 +28,18 @@ const modules = { globalName: 'GrafanaFaroWebTracing', externals: ['webSdk'], }, + rnSdk: { + name: '@grafana/react-native-sdk', + bundleName: 'react-native-sdk', + globalName: 'GrafanaFaroReactNativeSdk', + externals: [], + }, + rnTracing: { + name: '@grafana/react-native-tracing', + bundleName: 'react-native-tracing', + globalName: 'GrafanaFaroReactNativeTracing', + externals: ['rnSdk'], + }, transportOtlpHttp: { name: '@grafana/faro-transport-otlp-http', bundleName: 'faro-transport-otlp-http', @@ -58,31 +70,63 @@ const modules = { globalName: 'GrafanaFaroInstrumentationK6Browser', externals: [], }, + instrumentationWebSocket: { + name: '@grafana/faro-instrumentation-websocket', + bundleName: 'faro-instrumentation-websocket', + globalName: 'GrafanaFaroInstrumentationWebSocket', + externals: [], + }, + instrumentationOtelAxios: { + name: '@grafana/faro-instrumentation-otel-axios', + bundleName: 'faro-instrumentation-otel-axios', + globalName: 'GrafanaFaroInstrumentationOtelAxios', + externals: [], + }, + instrumentationOtelReduxSaga: { + name: '@grafana/faro-instrumentation-otel-redux-saga', + bundleName: 'faro-instrumentation-otel-redux-saga', + globalName: 'GrafanaFaroInstrumentationOtelReduxSaga', + externals: [], + }, }; exports.getRollupConfigBase = (moduleName) => { const module = modules[moduleName]; - return { + const isReactNative = moduleName.startsWith('rn'); + + const baseConfig = { input: './src/index.ts', output: { file: `./dist/bundle/${module.bundleName}.iife.js`, format: 'iife', - globals: module.externals.reduce( - (acc, external) => ({ - ...acc, - [modules[external].name]: modules[external].globalName, - }), - {} - ), + globals: { + 'react-native': 'ReactNative', + react: 'React', + ...module.externals.reduce( + (acc, external) => ({ + ...acc, + [modules[external].name]: modules[external].globalName, + }), + {} + ), + }, name: module.globalName, }, - external: module.externals.map((external) => modules[external].name), + external: ['react-native', 'react', ...module.externals.map((external) => modules[external].name)], plugins: [ resolve({ browser: true, + preferBuiltins: false, + extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], + moduleDirectories: ['node_modules'], + }), + commonjs({ + ignore: isReactNative ? ['react-native'] : [], + requireReturnsDefault: 'auto', + transformMixedEsModules: true, + exclude: isReactNative ? ['node_modules/react-native/**'] : [], }), - commonjs(), typescript({ cacheDir: '../../.cache/rollup', inlineSources: false, @@ -93,4 +137,21 @@ exports.getRollupConfigBase = (moduleName) => { terser(), ], }; + + if (isReactNative) { + baseConfig.onwarn = (warning, warn) => { + // Suppress certain warnings for React Native + if (warning.code === 'CIRCULAR_DEPENDENCY') { + return; + } + + if (warning.code === 'THIS_IS_UNDEFINED') { + return; + } + + warn(warning); + }; + } + + return baseConfig; }; diff --git a/yarn.lock b/yarn.lock index 487ed72e6..60880994b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,20 +5,13 @@ __metadata: version: 8 cacheKey: 10c0 -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: 10c0/53c2b231a61a46792b39a0d43bc4f4f776bb4542aa57ee04930676802e5501282c2fc8aac14e4cd1f1120ff8b52616b6ff5ab539ad30aa2277d726444b71619f - languageName: node - linkType: hard - "@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10c0/92ce5915f8901d8c7cd4f4e6e2fe7b9fd335a29955b400caa52e0e5b12ca3796ada7c2f10e78c9c5b0f9c2539dff0ffea7b19850a56e1487aa083531e1e46d43 + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed languageName: node linkType: hard @@ -35,18 +28,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.27.1": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" dependencies: @@ -57,37 +39,14 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.27.2": - version: 7.27.5 - resolution: "@babel/compat-data@npm:7.27.5" - checksum: 10c0/da2751fcd0b58eea958f2b2f7ff7d6de1280712b709fa1ad054b73dc7d31f589e353bb50479b9dc96007935f3ed3cada68ac5b45ce93086b7122ddc32e60dc00 - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4": - version: 7.27.4 - resolution: "@babel/core@npm:7.27.4" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.27.3" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-module-transforms": "npm:^7.27.3" - "@babel/helpers": "npm:^7.27.4" - "@babel/parser": "npm:^7.27.4" - "@babel/template": "npm:^7.27.2" - "@babel/traverse": "npm:^7.27.4" - "@babel/types": "npm:^7.27.3" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/d2d17b106a8d91d3eda754bb3f26b53a12eb7646df73c2b2d2e9b08d90529186bc69e3823f70a96ec6e5719dc2372fb54e14ad499da47ceeb172d2f7008787b5 +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7": + version: 7.28.0 + resolution: "@babel/compat-data@npm:7.28.0" + checksum: 10c0/c4e527302bcd61052423f757355a71c3bc62362bac13f7f130de16e439716f66091ff5bdecda418e8fa0271d4c725f860f0ee23ab7bf6e769f7a8bb16dfcb531 languageName: node linkType: hard -"@babel/core@npm:^7.28.0": +"@babel/core@npm:^7.0.0, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": version: 7.28.0 resolution: "@babel/core@npm:7.28.0" dependencies: @@ -110,20 +69,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.27.3, @babel/generator@npm:^7.27.5": - version: 7.27.5 - resolution: "@babel/generator@npm:7.27.5" - dependencies: - "@babel/parser": "npm:^7.27.5" - "@babel/types": "npm:^7.27.3" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10c0/8f649ef4cd81765c832bb11de4d6064b035ffebdecde668ba7abee68a7b0bce5c9feabb5dc5bb8aeba5bd9e5c2afa3899d852d2bd9ca77a711ba8c8379f416f0 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.28.0": +"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0, @babel/generator@npm:^7.5.0": version: 7.28.0 resolution: "@babel/generator@npm:7.28.0" dependencies: @@ -136,7 +82,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.27.2": +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": "npm:^7.27.3" + checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": version: 7.27.2 resolution: "@babel/helper-compilation-targets@npm:7.27.2" dependencies: @@ -149,6 +104,60 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + regexpu-core: "npm:^6.2.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.5": + version: 0.6.5 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + debug: "npm:^4.4.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.22.10" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.24.7 + resolution: "@babel/helper-environment-visitor@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/36ece78882b5960e2d26abf13cf15ff5689bf7c325b10a2895a74a499e712de0d305f8d78bb382dd3c05cfba7e47ec98fe28aab5674243e0625cd38438dd0b2d + languageName: node + linkType: hard + "@babel/helper-globals@npm:^7.28.0": version: 7.28.0 resolution: "@babel/helper-globals@npm:7.28.0" @@ -156,6 +165,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-module-imports@npm:7.27.1" @@ -166,7 +185,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.27.3": +"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-module-transforms@npm:7.27.3" dependencies: @@ -179,38 +198,62 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.25.9 - resolution: "@babel/helper-plugin-utils@npm:7.25.9" - checksum: 10c0/483066a1ba36ff16c0116cd24f93de05de746a603a777cd695ac7a1b034928a65a4ecb35f255761ca56626435d7abdb73219eba196f9aa83b6c3c3169325599d +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.27.1": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.27.1 resolution: "@babel/helper-plugin-utils@npm:7.27.1" checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 +"@babel/helper-remap-async-to-generator@npm:^7.18.9, @babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.27.1": +"@babel/helper-replace-supers@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + resolution: "@babel/helper-replace-supers@npm:7.27.1" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 languageName: node linkType: hard @@ -228,57 +271,147 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.27.4, @babel/helpers@npm:^7.27.6": - version: 7.27.6 - resolution: "@babel/helpers@npm:7.27.6" +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-wrap-function@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.27.6": + version: 7.28.2 + resolution: "@babel/helpers@npm:7.28.2" dependencies: "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.27.6" - checksum: 10c0/448bac96ef8b0f21f2294a826df9de6bf4026fd023f8a6bb6c782fe3e61946801ca24381490b8e58d861fee75cd695a1882921afbf1f53b0275ee68c938bd6d3 + "@babel/types": "npm:^7.28.2" + checksum: 10c0/f3e7b21517e2699c4ca193663ecfb1bf1b2ae2762d8ba4a9f1786feaca0d6984537fc60bf2206e92c43640a6dada6b438f523cc1ad78610d0151aeb061b37f63 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9": - version: 7.26.2 - resolution: "@babel/parser@npm:7.26.2" +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.26.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/parser@npm:7.28.0" dependencies: - "@babel/types": "npm:^7.26.0" + "@babel/types": "npm:^7.28.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 + checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 languageName: node linkType: hard -"@babel/parser@npm:^7.24.4, @babel/parser@npm:^7.25.3": - version: 7.26.3 - resolution: "@babel/parser@npm:7.26.3" +"@babel/plugin-external-helpers@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-external-helpers@npm:7.27.1" dependencies: - "@babel/types": "npm:^7.26.3" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/48f736374e61cfd10ddbf7b80678514ae1f16d0e88bc793d2b505d73d9b987ea786fc8c2f7ee8f8b8c467df062030eb07fd0eb2168f0f541ca1f542775852cad + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e4373b71acadc227b4fbcfad43b499cd0ca26d92995a3131acf8d714a3c0b54919ee4027c0ca2ff4557e74dc6771d9e0f11df5814e9397a81739096e0d02630b languageName: node linkType: hard -"@babel/parser@npm:^7.27.2, @babel/parser@npm:^7.27.4, @babel/parser@npm:^7.27.5": - version: 7.27.5 - resolution: "@babel/parser@npm:7.27.5" +"@babel/plugin-proposal-async-generator-functions@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" dependencies: - "@babel/types": "npm:^7.27.3" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/f7faaebf21cc1f25d9ca8ac02c447ed38ef3460ea95be7ea760916dcf529476340d72a5a6010c6641d9ed9d12ad827c8424840277ec2295c5b082ba0f291220a + "@babel/helper-environment-visitor": "npm:^7.18.9" + "@babel/helper-plugin-utils": "npm:^7.20.2" + "@babel/helper-remap-async-to-generator": "npm:^7.18.9" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0f4bc01805704ae4840536acc9888c50a32250e9188d025063bd17fe77ed171a12361c3dc83ce99664dcd73aec612accb8da95b0d8b825c854931b2860c0bfb5 languageName: node linkType: hard -"@babel/parser@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/parser@npm:7.28.0" +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.18.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: - "@babel/types": "npm:^7.28.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 + "@babel/helper-create-class-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d5172ac6c9948cdfc387e94f3493ad86cb04035cf7433f86b5d358270b1b9752dc25e176db0c5d65892a246aca7bdb4636672e15626d7a7de4bc0bd0040168d9 + languageName: node + linkType: hard + +"@babel/plugin-proposal-export-default-from@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-proposal-export-default-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6e0756e0692245854028caea113dad2dc11fcdd479891a59d9a614a099e7e321f2bd25a1e3dd6f3b36ba9506a76f072f63adbf676e5ed51e7eeac277612e3db2 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f6629158196ee9f16295d16db75825092ef543f8b98f4dfdd516e642a0430c7b1d69319ee676d35485d9b86a53ade6de0b883490d44de6d4336d38cdeccbe0bf + languageName: node + linkType: hard + +"@babel/plugin-proposal-numeric-separator@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.18.6" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a83a65c6ec0d2293d830e9db61406d246f22d8ea03583d68460cb1b6330c6699320acce1b45f66ba3c357830720e49267e3d99f95088be457c66e6450fbfe3fa + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.20.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" + dependencies: + "@babel/compat-data": "npm:^7.20.5" + "@babel/helper-compilation-targets": "npm:^7.20.7" + "@babel/helper-plugin-utils": "npm:^7.20.2" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-transform-parameters": "npm:^7.20.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b9818749bb49d8095df64c45db682448d04743d96722984cbfd375733b2585c26d807f84b4fdb28474f2d614be6a6ffe3d96ffb121840e9e5345b2ccc0438bd8 + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.18.6" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ab20153d9e95e0b73004fdf86b6a2d219be2a0ace9ca76cd9eccddb680c913fec173bca54d761b1bc6044edde0a53811f3e515908c3b16d2d81cfec1e2e17391 + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.0.0, @babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.20.0": + version: 7.21.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.20.0" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b524a61b1de3f3ad287cd1e98c2a7f662178d21cd02205b0d615512e475f0159fa1b569fa7e34c8ed67baef689c0136fa20ba7d1bf058d186d30736a581a723f languageName: node linkType: hard @@ -304,7 +437,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13": +"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -326,6 +459,39 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-dynamic-import@npm:^7.0.0, @babel/plugin-syntax-dynamic-import@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-default-from@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-syntax-export-default-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9aa62f5916950f3e5f91657895f4635b1c77e108e453ef12c30dc7670c3441bdd65cd28be20d6ddc9003ed471cc98465785a14cd76c61f077c1c84264f1f28ca + languageName: node + linkType: hard + +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.18.0, @babel/plugin-syntax-flow@npm:^7.2.0, @babel/plugin-syntax-flow@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-flow@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4d34ca47044398665cbe0293baea7be230ca4090bc7981ffba5273402a215c95976c6f811c7b32f10b326cc6aab6886f26c29630c429aa45c3f350c5ccdfdbbf + languageName: node + linkType: hard + "@babel/plugin-syntax-import-attributes@npm:^7.24.7": version: 7.27.1 resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" @@ -359,7 +525,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.27.1": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" dependencies: @@ -381,7 +547,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" dependencies: @@ -403,7 +569,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": +"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" dependencies: @@ -425,7 +591,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": +"@babel/plugin-syntax-optional-chaining@npm:^7.0.0, @babel/plugin-syntax-optional-chaining@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" dependencies: @@ -469,115 +635,461 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.27.1": +"@babel/plugin-transform-arrow-functions@npm:^7.0.0": version: 7.27.1 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031 + checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.27.1": +"@babel/plugin-transform-async-to-generator@npm:^7.20.0": version: 7.27.1 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" + resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2 + checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.26.10 - resolution: "@babel/runtime@npm:7.26.10" +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/6dc6d88c7908f505c4f7770fb4677dfa61f68f659b943c2be1f2a99cb6680343462867abf2d49822adc435932919b36c77ac60125793e719ea8745f2073d3745 + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde languageName: node linkType: hard -"@babel/template@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" +"@babel/plugin-transform-block-scoping@npm:^7.0.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.2" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/787d85e72a92917e735aa54e23062fa777031f8a07046e67f5026eff3d91e64eb535575dd1df917b0011bee014ae51287478af14c1d4ba60bc81e326bc044cfc languageName: node linkType: hard -"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.27.4": - version: 7.27.4 - resolution: "@babel/traverse@npm:7.27.4" +"@babel/plugin-transform-classes@npm:^7.0.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-classes@npm:7.28.0" dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.27.3" - "@babel/parser": "npm:^7.27.4" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.27.3" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/6de8aa2a0637a6ee6d205bf48b9e923928a02415771fdec60085ed754dcdf605e450bb3315c2552fa51c31a4662275b45d5ae4ad527ce55a7db9acebdbbbb8ed + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3b213b43104fe99dd7e79401a86d09e545836e057a70ffe77e8196a87bf67ae167e502ae90afdf0d1a2be683be5652514aaeda743bd984e583523dd8ecfef887 languageName: node linkType: hard -"@babel/traverse@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/traverse@npm:7.28.0" +"@babel/plugin-transform-computed-properties@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.0" - debug: "npm:^4.3.1" - checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.26.0, @babel/types@npm:^7.3.0": - version: 7.26.0 - resolution: "@babel/types@npm:7.26.0" +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.20.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cc7ccafa952b3ff7888544d5688cfafaba78c69ce1e2f04f3233f4f78c9de5e46e9695f5ea42c085b0c0cfa39b10f366d362a2be245b6d35b66d3eb1d427ccb2 languageName: node linkType: hard -"@babel/types@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/types@npm:7.26.3" +"@babel/plugin-transform-exponentiation-operator@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/966c5242c5e55c8704bf7a7418e7be2703a0afa4d19a8480999d5a4ef13d095dd60686615fe5983cb7593b4b06ba3a7de8d6ca501c1d78bdd233a10d90be787b + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d languageName: node linkType: hard -"@babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6": - version: 7.27.6 - resolution: "@babel/types@npm:7.27.6" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.20.0, @babel/plugin-transform-flow-strip-types@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.27.1" dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/39d556be114f2a6d874ea25ad39826a9e3a0e98de0233ae6d932f6d09a4b222923a90a7274c635ed61f1ba49bbd345329226678800900ad1c8d11afabd573aaf + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-syntax-flow": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c61c43244aacdcd479ad9ba618e1c095a5db7e4eadc3d19249602febc4e97153230273c014933f5fe4e92062fa56dab9bed4bc430197d5b2ffeb2158a4bf6786 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-assign@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-assign@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3aa28124ea34e9919f5e7012a42e189320bbc84845f724aa4704677f135cb812eed98d9b0d0fa79026bd978863ab5cea32b4642ba48e9ae642028f3c3c3a842b languageName: node linkType: hard -"@babel/types@npm:^7.28.0": +"@babel/plugin-transform-object-super@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.0.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f5f86d2ad92be3e962158f344c2e385e23e2dfae7c8c7dc32138fb2cc46f63f5e50386c9f6c6fc16dbf1792c7bb650ad92c18203d0c2c0bd875bc28b0b80ef30 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.0.0, @babel/plugin-transform-react-jsx-source@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1a08637c39fc78c9760dd4a3ed363fdbc762994bf83ed7872ad5bda0232fcd0fc557332f2ce36b522c0226dfd9cc8faac6b88eddda535f24825198a689e571af + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.0.0": version: 7.28.1 - resolution: "@babel/types@npm:7.28.1" + resolution: "@babel/plugin-transform-regenerator@npm:7.28.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6c9e6eb80ce9c0bde0876c80979e078fbc85dc802272cba4ee72b5b1c858472e38167c418917e4f0d4384ce888706d95544a8d266880c0e199e167e078168b67 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.0.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-runtime@npm:7.28.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/71eba1e6aaafacb2ec0fd468394c7aeaff32265b21424bd9b2d963368a4a5260547e06976bb34e2553a7179463c3a3a4c2a4552256b5112c8b7dcadb7bd5bb07 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-spread@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.27.1, @babel/plugin-transform-typescript@npm:^7.5.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-typescript@npm:7.28.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/049c2bd3407bbf5041d8c95805a4fadee6d176e034f6b94ce7967b92a846f1e00f323cf7dfbb2d06c93485f241fb8cf4c10520e30096a6059d251b94e80386e9 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.0.0": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a + languageName: node + linkType: hard + +"@babel/preset-flow@npm:^7.13.13": + version: 7.27.1 + resolution: "@babel/preset-flow@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-transform-flow-strip-types": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/252216c91ba3cc126f10c81c1df495ef2c622687d17373bc619354a7fb7280ea83f434ed1e7149dbddd712790d16ab60f5b864d007edd153931d780f834e52c1 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.13.0": + version: 7.27.1 + resolution: "@babel/preset-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 + languageName: node + linkType: hard + +"@babel/register@npm:^7.0.0, @babel/register@npm:^7.13.16": + version: 7.27.1 + resolution: "@babel/register@npm:7.27.1" + dependencies: + clone-deep: "npm:^4.0.1" + find-cache-dir: "npm:^2.0.0" + make-dir: "npm:^2.1.0" + pirates: "npm:^4.0.6" + source-map-support: "npm:^0.5.16" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9584f6c5d980aa7eb6f56f56dfc12fa01a47ab11d542908192cb455a5249d489ab24efcd5de7c1b8be0fb47cd5594e4ee5652c58ba9b857fb81e783541c6a0ff + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.28.2 + resolution: "@babel/runtime@npm:7.28.2" + checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 + languageName: node + linkType: hard + +"@babel/template@npm:^7.0.0, @babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/traverse@npm:7.28.0" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.0" + debug: "npm:^4.3.1" + checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2": + version: 7.28.2 + resolution: "@babel/types@npm:7.28.2" dependencies: "@babel/helper-string-parser": "npm:^7.27.1" "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/5e99b346c11ee42ffb0cadc28159fe0b184d865a2cc1593df79b199772a534f6453969b4942aa5e4a55a3081863096e1cc3fc1c724d826926dc787cf229b845d + checksum: 10c0/24b11c9368e7e2c291fe3c1bcd1ed66f6593a3975f479cbb9dd7b8c8d8eab8a962b0d2fca616c043396ce82500ac7d23d594fbbbd013828182c01596370a0b10 languageName: node linkType: hard @@ -588,6 +1100,18 @@ __metadata: languageName: node linkType: hard +"@cnakazawa/watch@npm:^1.0.3": + version: 1.0.4 + resolution: "@cnakazawa/watch@npm:1.0.4" + dependencies: + exec-sh: "npm:^0.3.2" + minimist: "npm:^1.2.0" + bin: + watch: cli.js + checksum: 10c0/8678b6f582bdc5ffe59c0d45c2ad21f4ea1d162ec7ddb32e85078fca481c26958f27bcdef6007b8e9a066da090ccf9d31e1753f8de1e5f32466a04227d70dc31 + languageName: node + linkType: hard + "@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": version: 1.6.0 resolution: "@colors/colors@npm:1.6.0" @@ -697,69 +1221,41 @@ __metadata: languageName: node linkType: hard -"@dependents/detective-less@npm:^5.0.0": - version: 5.0.0 - resolution: "@dependents/detective-less@npm:5.0.0" +"@dependents/detective-less@npm:^5.0.1": + version: 5.0.1 + resolution: "@dependents/detective-less@npm:5.0.1" dependencies: gonzales-pe: "npm:^4.3.0" - node-source-walk: "npm:^7.0.0" - checksum: 10c0/247868509d5df31d9692c3c40bec69ea04ab5c9a3360f26a9e77468fe87c4d8cf92fbb79c92c1910338b1c72d777b8fa75a8959299258b0737f4e705c87b661c + node-source-walk: "npm:^7.0.1" + checksum: 10c0/699a81aa94be40c84f1ce7feddb425763352360752dddb8e7bfe531641f5a2553d52b4cf81fa2e08fc7c591262ecccb5ff21f443ede037748e490c33c6fac784 languageName: node linkType: hard -"@emnapi/core@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/core@npm:1.3.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.1" - tslib: "npm:^2.4.0" - checksum: 10c0/d3be1044ad704e2c486641bc18908523490f28c7d38bd12d9c1d4ce37d39dae6c4aecd2f2eaf44c6e3bd90eaf04e0591acc440b1b038cdf43cce078a355a0ea0 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.4.3": - version: 1.4.3 - resolution: "@emnapi/core@npm:1.4.3" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.2" - tslib: "npm:^2.4.0" - checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7 - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.1.0": - version: 1.3.1 - resolution: "@emnapi/runtime@npm:1.3.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.4.3": - version: 1.4.3 - resolution: "@emnapi/runtime@npm:1.4.3" +"@emnapi/core@npm:^1.1.0, @emnapi/core@npm:^1.4.3": + version: 1.4.5 + resolution: "@emnapi/core@npm:1.4.5" dependencies: + "@emnapi/wasi-threads": "npm:1.0.4" tslib: "npm:^2.4.0" - checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b + checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f languageName: node linkType: hard -"@emnapi/wasi-threads@npm:1.0.1": - version: 1.0.1 - resolution: "@emnapi/wasi-threads@npm:1.0.1" +"@emnapi/runtime@npm:^1.1.0, @emnapi/runtime@npm:^1.4.3": + version: 1.4.5 + resolution: "@emnapi/runtime@npm:1.4.5" dependencies: tslib: "npm:^2.4.0" - checksum: 10c0/1e0c8036b8d53e9b07cc9acf021705ef6c86ab6b13e1acda7fffaf541a2d3565072afb92597419173ced9ea14f6bf32fce149106e669b5902b825e8b499e5c6c + checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b languageName: node linkType: hard -"@emnapi/wasi-threads@npm:1.0.2": - version: 1.0.2 - resolution: "@emnapi/wasi-threads@npm:1.0.2" +"@emnapi/wasi-threads@npm:1.0.4": + version: 1.0.4 + resolution: "@emnapi/wasi-threads@npm:1.0.4" dependencies: tslib: "npm:^2.4.0" - checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e + checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313 languageName: node linkType: hard @@ -783,193 +1279,189 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/aix-ppc64@npm:0.25.0" +"@esbuild/aix-ppc64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/aix-ppc64@npm:0.25.8" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm64@npm:0.25.0" +"@esbuild/android-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/android-arm64@npm:0.25.8" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm@npm:0.25.0" +"@esbuild/android-arm@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/android-arm@npm:0.25.8" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-x64@npm:0.25.0" +"@esbuild/android-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/android-x64@npm:0.25.8" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-arm64@npm:0.25.0" +"@esbuild/darwin-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/darwin-arm64@npm:0.25.8" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-x64@npm:0.25.0" +"@esbuild/darwin-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/darwin-x64@npm:0.25.8" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-arm64@npm:0.25.0" +"@esbuild/freebsd-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/freebsd-arm64@npm:0.25.8" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-x64@npm:0.25.0" +"@esbuild/freebsd-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/freebsd-x64@npm:0.25.8" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm64@npm:0.25.0" +"@esbuild/linux-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-arm64@npm:0.25.8" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm@npm:0.25.0" +"@esbuild/linux-arm@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-arm@npm:0.25.8" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ia32@npm:0.25.0" +"@esbuild/linux-ia32@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-ia32@npm:0.25.8" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-loong64@npm:0.25.0" +"@esbuild/linux-loong64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-loong64@npm:0.25.8" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-mips64el@npm:0.25.0" +"@esbuild/linux-mips64el@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-mips64el@npm:0.25.8" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ppc64@npm:0.25.0" +"@esbuild/linux-ppc64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-ppc64@npm:0.25.8" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-riscv64@npm:0.25.0" +"@esbuild/linux-riscv64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-riscv64@npm:0.25.8" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-s390x@npm:0.25.0" +"@esbuild/linux-s390x@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-s390x@npm:0.25.8" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-x64@npm:0.25.0" +"@esbuild/linux-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/linux-x64@npm:0.25.8" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-arm64@npm:0.25.0" +"@esbuild/netbsd-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/netbsd-arm64@npm:0.25.8" conditions: os=netbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-x64@npm:0.25.0" +"@esbuild/netbsd-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/netbsd-x64@npm:0.25.8" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-arm64@npm:0.25.0" +"@esbuild/openbsd-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/openbsd-arm64@npm:0.25.8" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-x64@npm:0.25.0" +"@esbuild/openbsd-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/openbsd-x64@npm:0.25.8" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/sunos-x64@npm:0.25.0" +"@esbuild/openharmony-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/openharmony-arm64@npm:0.25.8" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/sunos-x64@npm:0.25.8" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-arm64@npm:0.25.0" +"@esbuild/win32-arm64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/win32-arm64@npm:0.25.8" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-ia32@npm:0.25.0" +"@esbuild/win32-ia32@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/win32-ia32@npm:0.25.8" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-x64@npm:0.25.0" +"@esbuild/win32-x64@npm:0.25.8": + version: 0.25.8 + resolution: "@esbuild/win32-x64@npm:0.25.8" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.7.0": +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.7.0": version: 4.7.0 resolution: "@eslint-community/eslint-utils@npm:4.7.0" dependencies: @@ -981,9 +1473,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 languageName: node linkType: hard @@ -1004,10 +1496,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 languageName: node linkType: hard @@ -1028,7 +1520,7 @@ __metadata: languageName: node linkType: hard -"@grafana/faro-core@npm:^1.19.0, @grafana/faro-core@workspace:packages/core": +"@grafana/faro-core@npm:^1.12.2, @grafana/faro-core@npm:^1.19.0, @grafana/faro-core@workspace:packages/core": version: 0.0.0-use.local resolution: "@grafana/faro-core@workspace:packages/core" dependencies: @@ -1107,6 +1599,38 @@ __metadata: languageName: unknown linkType: soft +"@grafana/faro-instrumentation-otel-axios@workspace:experimental/instrumentation-otel-axios": + version: 0.0.0-use.local + resolution: "@grafana/faro-instrumentation-otel-axios@workspace:experimental/instrumentation-otel-axios" + dependencies: + "@grafana/faro-core": "npm:^1.12.2" + "@opentelemetry/api": "npm:^1.9.0" + peerDependencies: + axios: "*" + languageName: unknown + linkType: soft + +"@grafana/faro-instrumentation-otel-redux-saga@workspace:experimental/instrumentation-otel-redux-saga": + version: 0.0.0-use.local + resolution: "@grafana/faro-instrumentation-otel-redux-saga@workspace:experimental/instrumentation-otel-redux-saga" + dependencies: + "@grafana/faro-core": "npm:^1.12.2" + "@opentelemetry/api": "npm:^1.9.0" + redux-saga: "npm:^1.3.0" + peerDependencies: + redux-saga: ^1 + languageName: unknown + linkType: soft + +"@grafana/faro-instrumentation-websocket@workspace:experimental/instrumentation-websocket": + version: 0.0.0-use.local + resolution: "@grafana/faro-instrumentation-websocket@workspace:experimental/instrumentation-websocket" + dependencies: + "@grafana/faro-core": "npm:^1.12.2" + "@remix-run/web-fetch": "npm:^4.3.4" + languageName: unknown + linkType: soft + "@grafana/faro-react@npm:^1.19.0, @grafana/faro-react@workspace:packages/react": version: 0.0.0-use.local resolution: "@grafana/faro-react@workspace:packages/react" @@ -1172,6 +1696,50 @@ __metadata: languageName: unknown linkType: soft +"@grafana/react-native-sdk@npm:^1.12.2, @grafana/react-native-sdk@workspace:packages/react-native-sdk": + version: 0.0.0-use.local + resolution: "@grafana/react-native-sdk@workspace:packages/react-native-sdk" + dependencies: + "@grafana/faro-core": "npm:^1.12.2" + "@react-native-async-storage/async-storage": "npm:1.15.5" + "@types/ua-parser-js": "npm:^0.7.36" + react-native: "npm:0.72.6" + react-native-device-info: "npm:^14.0.2" + ua-parser-js: "npm:^1.0.32" + user-agent-data-types: "npm:^0.4.2" + web-vitals: "npm:^4.0.1" + peerDependencies: + "@react-native-async-storage/async-storage": ">= 1.15.5" + react-native: ">=0.70.0" + languageName: unknown + linkType: soft + +"@grafana/react-native-tracing@workspace:packages/react-native-tracing": + version: 0.0.0-use.local + resolution: "@grafana/react-native-tracing@workspace:packages/react-native-tracing" + dependencies: + "@grafana/react-native-sdk": "npm:^1.12.2" + "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/context-zone": "npm:1.26.0" + "@opentelemetry/core": "npm:^1.26.0" + "@opentelemetry/exporter-trace-otlp-http": "npm:^0.53.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/instrumentation-fetch": "npm:^0.53.0" + "@opentelemetry/instrumentation-xml-http-request": "npm:^0.53.0" + "@opentelemetry/otlp-transformer": "npm:^0.53.0" + "@opentelemetry/resources": "npm:^1.26.0" + "@opentelemetry/sdk-trace-web": "npm:^1.26.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/react": "npm:^17.0.0" + "@types/react-native": "npm:^0.63.0" + react: "npm:^17.0.0" + react-native: "npm:^0.63.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-native: ^0.63.0 + languageName: unknown + linkType: soft + "@grpc/grpc-js@npm:^1.7.1, @grpc/grpc-js@npm:^1.9.0": version: 1.13.4 resolution: "@grpc/grpc-js@npm:1.13.4" @@ -1183,8 +1751,8 @@ __metadata: linkType: hard "@grpc/proto-loader@npm:^0.7.13": - version: 0.7.13 - resolution: "@grpc/proto-loader@npm:0.7.13" + version: 0.7.15 + resolution: "@grpc/proto-loader@npm:0.7.15" dependencies: lodash.camelcase: "npm:^4.3.0" long: "npm:^5.0.0" @@ -1192,7 +1760,28 @@ __metadata: yargs: "npm:^17.7.2" bin: proto-loader-gen-types: build/bin/proto-loader-gen-types.js - checksum: 10c0/dc8ed7aa1454c15e224707cc53d84a166b98d76f33606a9f334c7a6fb1aedd3e3614dcd2c2b02a6ffaf140587d19494f93b3a56346c6c2e26bc564f6deddbbf3 + checksum: 10c0/514a134a724b56d73d0a202b7e02c84479da21e364547bacb2f4995ebc0d52412a1a21653add9f004ebd146c1e6eb4bcb0b8846fdfe1bfa8a98ed8f3d203da4a + languageName: node + linkType: hard + +"@hapi/address@npm:2.x.x": + version: 2.1.4 + resolution: "@hapi/address@npm:2.1.4" + checksum: 10c0/d43068dd090fa1cb9324232b8cbe3235cd9106d5b8f5280262bddff27e95f383bee887bd30931f7765e10b111169681b92ff6ae46cc608686e65a17315f5c4bb + languageName: node + linkType: hard + +"@hapi/bourne@npm:1.x.x": + version: 1.3.2 + resolution: "@hapi/bourne@npm:1.3.2" + checksum: 10c0/c0f22d8577e36a86b12de7fd2356cb373a509c859ccdca3e73b017ade85fa7510235c2da46e32a530bee241ee056f7dac5af3f764585148694315d0847a20a8a + languageName: node + linkType: hard + +"@hapi/hoek@npm:8.x.x, @hapi/hoek@npm:^8.3.0": + version: 8.5.1 + resolution: "@hapi/hoek@npm:8.5.1" + checksum: 10c0/3279747618d3be88e384af2be9aff8366dd0cbdba61d37f162d896fe4432f90b3986f96f0e5815429a72e7b6b7293429a4aaff42c234e42ee6a66bb1f9fb14dd languageName: node linkType: hard @@ -1203,6 +1792,27 @@ __metadata: languageName: node linkType: hard +"@hapi/joi@npm:^15.0.3": + version: 15.1.1 + resolution: "@hapi/joi@npm:15.1.1" + dependencies: + "@hapi/address": "npm:2.x.x" + "@hapi/bourne": "npm:1.x.x" + "@hapi/hoek": "npm:8.x.x" + "@hapi/topo": "npm:3.x.x" + checksum: 10c0/85170aa4a7d014d66b9db5a403d0790153756edfae52e0c6012309991b1ca10ed43700b28e68aa0b438704e0f7377b20bc212be01ac7cf64028a2fc8debb4da8 + languageName: node + linkType: hard + +"@hapi/topo@npm:3.x.x": + version: 3.1.6 + resolution: "@hapi/topo@npm:3.1.6" + dependencies: + "@hapi/hoek": "npm:^8.3.0" + checksum: 10c0/9948100dc6a3081bf29e88c7c2657a1612e46fe701d6f0cf5a5d3d656344c9cc6199d5489c563f231b65213288293673dec7d32845c59882a0f26c07dc461980 + languageName: node + linkType: hard + "@hapi/topo@npm:^5.1.0": version: 5.1.0 resolution: "@hapi/topo@npm:5.1.0" @@ -1212,14 +1822,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" + "@humanwhocodes/object-schema": "npm:^2.0.3" debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e languageName: node linkType: hard @@ -1230,10 +1840,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c languageName: node linkType: hard @@ -1244,6 +1854,22 @@ __metadata: languageName: node linkType: hard +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 10c0/7da011805b259ec5c955f01cee903da72ad97c5e6f01ca96197267d3f33103d5b2f8a1af192140f3aa64526c593c8d098ae366c2b11f7f17645d12387c2fd420 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.0": + version: 5.0.0 + resolution: "@isaacs/brace-expansion@npm:5.0.0" + dependencies: + "@isaacs/balanced-match": "npm:^4.0.1" + checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -1308,6 +1934,17 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^24.9.0": + version: 24.9.0 + resolution: "@jest/console@npm:24.9.0" + dependencies: + "@jest/source-map": "npm:^24.9.0" + chalk: "npm:^2.0.1" + slash: "npm:^2.0.0" + checksum: 10c0/7fffdd61898c1ecc9d05023a28fdcb5447a87ee78bdd0a8e4e9b8e6a8f770a1093ff46e2816fe5e1321cc0f07623cc46ea937890de5a746f59d18588aa82bd91 + languageName: node + linkType: hard + "@jest/core@npm:30.0.5": version: 30.0.5 resolution: "@jest/core@npm:30.0.5" @@ -1349,6 +1986,15 @@ __metadata: languageName: node linkType: hard +"@jest/create-cache-key-function@npm:^29.2.1": + version: 29.7.0 + resolution: "@jest/create-cache-key-function@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + checksum: 10c0/5c47ef62205264adf77b1ff26b969ce9fe84920b8275c3c5e83f4236859d6ae5e4e7027af99eef04a8e334c4e424d44af3e167972083406070aca733ac2a2795 + languageName: node + linkType: hard + "@jest/diff-sequences@npm:30.0.1": version: 30.0.1 resolution: "@jest/diff-sequences@npm:30.0.1" @@ -1389,12 +2035,15 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:30.0.2": - version: 30.0.2 - resolution: "@jest/expect-utils@npm:30.0.2" +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" dependencies: - "@jest/get-type": "npm:30.0.1" - checksum: 10c0/70d40c364170bb3cfabfb53bf24605f0bcb076c3968bdd3a9d9b9e102d3b918e666c53c1866e6bf5d6a0552aa6f7b611e406d5967723a6f8e99f235d01c94469 + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + checksum: 10c0/c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 languageName: node linkType: hard @@ -1431,6 +2080,31 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^24.9.0": + version: 24.9.0 + resolution: "@jest/fake-timers@npm:24.9.0" + dependencies: + "@jest/types": "npm:^24.9.0" + jest-message-util: "npm:^24.9.0" + jest-mock: "npm:^24.9.0" + checksum: 10c0/ce0d8146bfd2e2822eb45aaf6965a858bd4e6a490fd30f0f3bc5941edd2fca33942e1a37bba3d85d3dbc275c18cb362e8c4f0805a2e246ec09bbeb6b4c8b1364 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c + languageName: node + linkType: hard + "@jest/get-type@npm:30.0.1": version: 30.0.1 resolution: "@jest/get-type@npm:30.0.1" @@ -1496,15 +2170,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/schemas@npm:30.0.1" - dependencies: - "@sinclair/typebox": "npm:^0.34.0" - checksum: 10c0/27977359edc4b33293af7c85c53de5014a87c29b9ab98b0a827fedfc6635abdb522aad8c3ff276080080911f519699b094bd6f4e151b43f0cc5856ccc83c04a7 - languageName: node - linkType: hard - "@jest/schemas@npm:30.0.5": version: 30.0.5 resolution: "@jest/schemas@npm:30.0.5" @@ -1546,6 +2211,17 @@ __metadata: languageName: node linkType: hard +"@jest/source-map@npm:^24.9.0": + version: 24.9.0 + resolution: "@jest/source-map@npm:24.9.0" + dependencies: + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.1.15" + source-map: "npm:^0.6.0" + checksum: 10c0/3c897d605a5ca36cff02aac53bbb7d47fc4c50d7565b678d8d3353979933297260b5baf74cc4140809447b9e0700262385ba77f64f76068abad3ba66481dcdf4 + languageName: node + linkType: hard + "@jest/test-result@npm:30.0.5": version: 30.0.5 resolution: "@jest/test-result@npm:30.0.5" @@ -1558,6 +2234,17 @@ __metadata: languageName: node linkType: hard +"@jest/test-result@npm:^24.9.0": + version: 24.9.0 + resolution: "@jest/test-result@npm:24.9.0" + dependencies: + "@jest/console": "npm:^24.9.0" + "@jest/types": "npm:^24.9.0" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + checksum: 10c0/450d068a39ace6219883d820c9fa17d9e455bd5c03b03f0a5d3924d860cdd2e36234cc15367bc42f18421ac42365c33fbe6077d860b7659b719d4d39de9d1331 + languageName: node + linkType: hard + "@jest/test-sequencer@npm:30.0.5": version: 30.0.5 resolution: "@jest/test-sequencer@npm:30.0.5" @@ -1593,21 +2280,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/types@npm:30.0.1" - dependencies: - "@jest/pattern": "npm:30.0.1" - "@jest/schemas": "npm:30.0.1" - "@types/istanbul-lib-coverage": "npm:^2.0.6" - "@types/istanbul-reports": "npm:^3.0.4" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.33" - chalk: "npm:^4.1.2" - checksum: 10c0/407469331e74f9bb1ffd40202c3a8cece2fd07ba535adeb60557bdcee13713cf2f14cf78869ba7ef50a7e6fe0ed7cc97ec775056dd640fc0a332e8fbfaec1ee8 - languageName: node - linkType: hard - "@jest/types@npm:30.0.5": version: 30.0.5 resolution: "@jest/types@npm:30.0.5" @@ -1623,18 +2295,70 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" +"@jest/types@npm:^24.9.0": + version: 24.9.0 + resolution: "@jest/types@npm:24.9.0" dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^1.1.1" + "@types/yargs": "npm:^13.0.0" + checksum: 10c0/990b03f5e27de292a7fea6b12cd87256dd281263afe37020cad5dceb0b775945a528bafdbc2e41bf8a29c346f94a7aa5580517c5c65a2b33f245f43d3b9b4694 + languageName: node + linkType: hard + +"@jest/types@npm:^25.5.0": + version: 25.5.0 + resolution: "@jest/types@npm:25.5.0" + dependencies: + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^1.1.1" + "@types/yargs": "npm:^15.0.0" + chalk: "npm:^3.0.0" + checksum: 10c0/f47c6e98c99d3fd562f2be6c339f41d3c7092e9587b8524fe71411f9c8b8e71f50475278a10e534f56c729ccd3e3b55e3aa20e4b0a2c5c47ded1ba53e0aef286 languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.12": +"@jest/types@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/types@npm:26.6.2" + dependencies: + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^15.0.0" + chalk: "npm:^4.0.0" + checksum: 10c0/5b9b957f38a002895eb04bbb8c3dda6fccce8e2551f3f44b02f1f43063a78e8bedce73cd4330b53ede00ae005de5cd805982fbb2ec6ab9feacf96344240d5db2 + languageName: node + linkType: hard + +"@jest/types@npm:^27.5.1": + version: 27.5.1 + resolution: "@jest/types@npm:27.5.1" + dependencies: + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^16.0.0" + chalk: "npm:^4.0.0" + checksum: 10c0/4598b302398db0eb77168b75a6c58148ea02cc9b9f21c5d1bbe985c1c9257110a5653cf7b901c3cab87fba231e3fed83633687f1c0903b4bc6939ab2a8452504 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.12 resolution: "@jridgewell/gen-mapping@npm:0.3.12" dependencies: @@ -1645,40 +2369,26 @@ __metadata: linkType: hard "@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: 10c0/0dbc9e29bc640bbbdc5b9876d2859c69042bfcf1423c1e6421bcca53e826660bff4e41c7d4bcb8dbea696404231a6f902f76ba41835d049e20f2dd6cffb713bf - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e languageName: node linkType: hard "@jridgewell/source-map@npm:^0.3.3": - version: 0.3.6 - resolution: "@jridgewell/source-map@npm:0.3.6" + version: 0.3.10 + resolution: "@jridgewell/source-map@npm:0.3.10" dependencies: "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" - checksum: 10c0/6a4ecc713ed246ff8e5bdcc1ef7c49aaa93f7463d948ba5054dda18b02dcc6a055e2828c577bcceee058f302ce1fc95595713d44f5c45e43d459f88d267f2f04 + checksum: 10c0/cf6a51808bc710eb91a9e6c5e250c1af5714299c8de3db2b74e273a27ba7313f37c198ba332a512b7657fa23fed125c0147bfb1b925cadc9697a89cebecad0d8 languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.4 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" + checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 languageName: node linkType: hard @@ -1692,17 +2402,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.28": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": version: 0.3.29 resolution: "@jridgewell/trace-mapping@npm:0.3.29" dependencies: @@ -1719,9 +2419,9 @@ __metadata: languageName: node linkType: hard -"@lerna/create@npm:8.2.3": - version: 8.2.3 - resolution: "@lerna/create@npm:8.2.3" +"@lerna/create@npm:8.2.4": + version: 8.2.4 + resolution: "@lerna/create@npm:8.2.4" dependencies: "@npmcli/arborist": "npm:7.5.4" "@npmcli/package-json": "npm:5.2.0" @@ -1756,7 +2456,6 @@ __metadata: js-yaml: "npm:4.1.0" libnpmpublish: "npm:9.0.9" load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" make-dir: "npm:4.0.0" minimatch: "npm:3.0.5" multimatch: "npm:5.0.0" @@ -1793,7 +2492,7 @@ __metadata: write-pkg: "npm:4.0.0" yargs: "npm:17.7.2" yargs-parser: "npm:21.1.1" - checksum: 10c0/e484e41cff8233bdaca72872c96abe5b10423033b0c6464c55fc56a87c43f01ee236ef2cae616a5a93beb2c432e87866f8e15a16e46ea2b3949938d796ec6c78 + checksum: 10c0/9a3aee341523f95cd3bf0c2742baedd7ba35a97c0245ee581d0670df9b14317b2ef7c1e6820812b16974449fee9a3156e5e9259add76f760618ee6686494680f languageName: node linkType: hard @@ -1809,13 +2508,13 @@ __metadata: linkType: hard "@napi-rs/wasm-runtime@npm:^0.2.11": - version: 0.2.11 - resolution: "@napi-rs/wasm-runtime@npm:0.2.11" + version: 0.2.12 + resolution: "@napi-rs/wasm-runtime@npm:0.2.12" dependencies: "@emnapi/core": "npm:^1.4.3" "@emnapi/runtime": "npm:^1.4.3" - "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/049bd14c58b99fbe0967b95e9921c5503df196b59be22948d2155f17652eb305cff6728efd8685338b855da7e476dd2551fbe3a313fc2d810938f0717478441e + "@tybys/wasm-util": "npm:^0.10.0" + checksum: 10c0/6d07922c0613aab30c6a497f4df297ca7c54e5b480e00035e0209b872d5c6aab7162fc49477267556109c2c7ed1eb9c65a174e27e9b87568106a87b0a6e3ca7d languageName: node linkType: hard @@ -2073,8 +2772,8 @@ __metadata: linkType: hard "@nx/devkit@npm:>=17.1.2 < 21": - version: 20.1.0 - resolution: "@nx/devkit@npm:20.1.0" + version: 20.8.2 + resolution: "@nx/devkit@npm:20.8.2" dependencies: ejs: "npm:^3.1.7" enquirer: "npm:~2.3.6" @@ -2086,76 +2785,76 @@ __metadata: yargs-parser: "npm:21.1.1" peerDependencies: nx: ">= 19 <= 21" - checksum: 10c0/395a34b47ab4f446e3b10693a368441c3502bcc4961727491746b0683cf297ad27954293d29d10c003978c65d32073951877df480bccd44a9e297a811e43d6a1 + checksum: 10c0/9b91ac41d9c303e26ca1812913851233f2cfc17e71f68196a249ae55cf5866d85932b29c92c99e0865c68715bda1ec7e29330e07cebc4b78aab168af79d8c47a languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-darwin-arm64@npm:20.1.0" +"@nx/nx-darwin-arm64@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-darwin-arm64@npm:20.8.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-darwin-x64@npm:20.1.0" +"@nx/nx-darwin-x64@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-darwin-x64@npm:20.8.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nx/nx-freebsd-x64@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-freebsd-x64@npm:20.1.0" +"@nx/nx-freebsd-x64@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-freebsd-x64@npm:20.8.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.1.0" +"@nx/nx-linux-arm-gnueabihf@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.8.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-linux-arm64-gnu@npm:20.1.0" +"@nx/nx-linux-arm64-gnu@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-linux-arm64-gnu@npm:20.8.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-linux-arm64-musl@npm:20.1.0" +"@nx/nx-linux-arm64-musl@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-linux-arm64-musl@npm:20.8.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-linux-x64-gnu@npm:20.1.0" +"@nx/nx-linux-x64-gnu@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-linux-x64-gnu@npm:20.8.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-linux-x64-musl@npm:20.1.0" +"@nx/nx-linux-x64-musl@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-linux-x64-musl@npm:20.8.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-win32-arm64-msvc@npm:20.1.0" +"@nx/nx-win32-arm64-msvc@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-win32-arm64-msvc@npm:20.8.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:20.1.0": - version: 20.1.0 - resolution: "@nx/nx-win32-x64-msvc@npm:20.1.0" +"@nx/nx-win32-x64-msvc@npm:20.8.2": + version: 20.8.2 + resolution: "@nx/nx-win32-x64-msvc@npm:20.8.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2168,17 +2867,17 @@ __metadata: linkType: hard "@octokit/core@npm:^5.0.2": - version: 5.2.0 - resolution: "@octokit/core@npm:5.2.0" + version: 5.2.2 + resolution: "@octokit/core@npm:5.2.2" dependencies: "@octokit/auth-token": "npm:^4.0.0" "@octokit/graphql": "npm:^7.1.0" - "@octokit/request": "npm:^8.3.1" - "@octokit/request-error": "npm:^5.1.0" + "@octokit/request": "npm:^8.4.1" + "@octokit/request-error": "npm:^5.1.1" "@octokit/types": "npm:^13.0.0" before-after-hook: "npm:^2.2.0" universal-user-agent: "npm:^6.0.0" - checksum: 10c0/9dc5cf55b335da382f340ef74c8009c06a1f7157b0530d3ff6cacf179887811352dcd405448e37849d73f17b28970b7817995be2260ce902dad52b91905542f0 + checksum: 10c0/b4484d85552303b839613e2133dcd064fa06a7c10fe0ebd11ba8f67cb8e3384e48983c589f4d1dc0fa3754857784e3d90ff4eab9782e118baf13ddd1b834957c languageName: node linkType: hard @@ -2203,10 +2902,10 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^23.0.1": - version: 23.0.1 - resolution: "@octokit/openapi-types@npm:23.0.1" - checksum: 10c0/ab734ceb26343d9f051a59503b8cb5bdc7fec9ca044b60511b227179bec73141dd9144a6b2d68bcd737741881b136c1b7d5392da89ae2e35e39acc489e5eb4c1 +"@octokit/openapi-types@npm:^24.2.0": + version: 24.2.0 + resolution: "@octokit/openapi-types@npm:24.2.0" + checksum: 10c0/8f47918b35e9b7f6109be6f7c8fc3a64ad13a48233112b29e92559e64a564b810eb3ebf81b4cd0af1bb2989d27b9b95cca96e841ec4e23a3f68703cefe62fd9e languageName: node linkType: hard @@ -2248,7 +2947,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request-error@npm:^5.1.0, @octokit/request-error@npm:^5.1.1": +"@octokit/request-error@npm:^5.1.1": version: 5.1.1 resolution: "@octokit/request-error@npm:5.1.1" dependencies: @@ -2259,7 +2958,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^8.3.1, @octokit/request@npm:^8.4.1": +"@octokit/request@npm:^8.4.1": version: 8.4.1 resolution: "@octokit/request@npm:8.4.1" dependencies: @@ -2284,11 +2983,11 @@ __metadata: linkType: hard "@octokit/types@npm:^13.0.0, @octokit/types@npm:^13.1.0, @octokit/types@npm:^13.7.0, @octokit/types@npm:^13.8.0": - version: 13.8.0 - resolution: "@octokit/types@npm:13.8.0" + version: 13.10.0 + resolution: "@octokit/types@npm:13.10.0" dependencies: - "@octokit/openapi-types": "npm:^23.0.1" - checksum: 10c0/e08c2fcf10e374f18e4c9fa12a6ada33a40f112d1209012a39f0ce40ae7aa9dcf0598b6007b467f63cc4a97e7b1388d6eed34ddef61494655e08b5a95afaad97 + "@octokit/openapi-types": "npm:^24.2.0" + checksum: 10c0/f66a401b89d653ec28e5c1529abdb7965752db4d9d40fa54c80e900af4c6bf944af6bd0a83f5b4f1eecb72e3d646899dfb27ffcf272ac243552de7e3b97a038d languageName: node linkType: hard @@ -2301,7 +3000,16 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.9.0": +"@opentelemetry/api-logs@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/api-logs@npm:0.53.0" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: 10c0/969ad3bbb74e3de6fdfe8eb9b3ab86d3dc284ca7bffd0ca67eef64efd08c97a4305696afe0b7b03e5d356f15d0a1a67ac517e5fa7d1ddee6fdc249eef2209fcb + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.9.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" checksum: 10c0/9aae2fe6e8a3a3eeb6c1fdef78e1939cf05a0f37f8a4fae4d6bf2e09eb1e06f966ece85805626e01ba5fab48072b94f19b835449e58b6d26720ee19a58298add @@ -2317,6 +3025,48 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/context-zone-peer-dep@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/context-zone-peer-dep@npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + zone.js: ^0.10.2 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 + checksum: 10c0/68544bd004c08d1388569f126737fa1108e546f569658c8626c29a829a6f1fccf417e4fecb7b6bbd21959205fff70164b3d600e491418848c78edda646e7d087 + languageName: node + linkType: hard + +"@opentelemetry/context-zone@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/context-zone@npm:1.26.0" + dependencies: + "@opentelemetry/context-zone-peer-dep": "npm:1.26.0" + zone.js: "npm:^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0" + checksum: 10c0/eb5707b14651928208e718207a6275f5980a7cc0dd73031fc672efb7380e847e98e5837b25f6d08f1474a119b81c65d0bdc5f61e689959459a5b9aac9912c431 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/core@npm:1.26.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/8038a3b9124a0b3b48dceb3949f88726c6853eac33b79fc049856f78dcf4b7ee453db1e6f4d5205a79b315caba809cb7d2f853946cf14773e50ce6a87fd5260e + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.26.0": + version: 1.30.1 + resolution: "@opentelemetry/core@npm:1.30.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.28.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/4c25ba50a6137c2ba9ca563fb269378f3c9ca6fd1b3f15dbb6eff78eebf5656f281997cbb7be8e51c01649fd6ad091083fcd8a42dd9b5dfac907dc06d7cfa092 + languageName: node + linkType: hard + "@opentelemetry/core@npm:2.0.1, @opentelemetry/core@npm:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/core@npm:2.0.1" @@ -2470,6 +3220,21 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/exporter-trace-otlp-http@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.53.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/otlp-exporter-base": "npm:0.53.0" + "@opentelemetry/otlp-transformer": "npm:0.53.0" + "@opentelemetry/resources": "npm:1.26.0" + "@opentelemetry/sdk-trace-base": "npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/234fd44b87608e9332e9756a93db41b86ea5a976fb3b66242b79df05bce73256435fe767fd1dd2304ffac6fc8c49ea44c6b31b52fbff12d4ca120e2b49efce30 + languageName: node + linkType: hard + "@opentelemetry/exporter-trace-otlp-proto@npm:0.203.0": version: 0.203.0 resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.203.0" @@ -2526,6 +3291,20 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-fetch@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-fetch@npm:0.53.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/instrumentation": "npm:0.53.0" + "@opentelemetry/sdk-trace-web": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/e95078303717e859682845eaf6f38e2e32fc295dd9d1344d27aba5de25b104b01633c191b46c3315bf976da4bebd607bbfa16c07ca22d4238ca57a9447bb5c02 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-http@npm:^0.203.0": version: 0.203.0 resolution: "@opentelemetry/instrumentation-http@npm:0.203.0" @@ -2582,16 +3361,46 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-xml-http-request@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-xml-http-request@npm:0.53.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/instrumentation": "npm:0.53.0" + "@opentelemetry/sdk-trace-web": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/bf491ee0082524f94a0bc62cda82a2ae1f86c17f87db5c6b0b456eb9ee2a16045326a96394875b66bcefbe69b1ecace099426536f881fe7d4be87b27cb9c8d92 + languageName: node + linkType: hard + "@opentelemetry/instrumentation@npm:0.203.0, @opentelemetry/instrumentation@npm:^0.203.0": version: 0.203.0 resolution: "@opentelemetry/instrumentation@npm:0.203.0" dependencies: - "@opentelemetry/api-logs": "npm:0.203.0" + "@opentelemetry/api-logs": "npm:0.203.0" + import-in-the-middle: "npm:^1.8.1" + require-in-the-middle: "npm:^7.1.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/b9de27ea7b42c54b1d0dab15dac62d4fc71c781bb6a48e90fa4ce8ce97be1b78e1fa9f05f58c39f68ca0e4a5590b8538d04209482f6b0632958926f7e80a28c1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.53.0, @opentelemetry/instrumentation@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.53.0" + "@types/shimmer": "npm:^1.2.0" import-in-the-middle: "npm:^1.8.1" require-in-the-middle: "npm:^7.1.1" + semver: "npm:^7.5.2" + shimmer: "npm:^1.2.1" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/b9de27ea7b42c54b1d0dab15dac62d4fc71c781bb6a48e90fa4ce8ce97be1b78e1fa9f05f58c39f68ca0e4a5590b8538d04209482f6b0632958926f7e80a28c1 + checksum: 10c0/943e289926812272cb77cda5e0a6b662bc6a92812b66420ceeca1c764f2e3a13364f6bbed7c9e84a17ad677474101ea3c598ef6a6cca982c35bfd24be6f6a25e languageName: node linkType: hard @@ -2607,6 +3416,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/otlp-exporter-base@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.53.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/otlp-transformer": "npm:0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/bc68d59106c095627bfbc522b9c3c7e1770e0d9e5e5abfd1912585209cd892ded1ac06002c57015ca51c5335fed2f82ab6c1fb7ac23686621eb72cc890c4dfdc + languageName: node + linkType: hard + "@opentelemetry/otlp-grpc-exporter-base@npm:0.203.0": version: 0.203.0 resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.203.0" @@ -2638,6 +3459,23 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/otlp-transformer@npm:0.53.0, @opentelemetry/otlp-transformer@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/otlp-transformer@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.53.0" + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" + "@opentelemetry/sdk-logs": "npm:0.53.0" + "@opentelemetry/sdk-metrics": "npm:1.26.0" + "@opentelemetry/sdk-trace-base": "npm:1.26.0" + protobufjs: "npm:^7.3.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/d9a43bb00ce5386aeb477cd95e72cd86114ed01b2e11e8f39c3988aa2bb56cbda16b533ffd55396ed374961c32e1cc76face565e21b6cedcc85e844776912666 + languageName: node + linkType: hard + "@opentelemetry/propagator-b3@npm:2.0.1": version: 2.0.1 resolution: "@opentelemetry/propagator-b3@npm:2.0.1" @@ -2660,6 +3498,30 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/resources@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/resources@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/62ffbf7edee8676055661cf608b32a52bfa46fedb1a88830b4d4d0faf6664edbcbf7922034d3690d11fe9ebef9d9f5ffcb05645e8c7b27c707bf57d5289617e9 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.30.1, @opentelemetry/resources@npm:^1.26.0": + version: 1.30.1 + resolution: "@opentelemetry/resources@npm:1.30.1" + dependencies: + "@opentelemetry/core": "npm:1.30.1" + "@opentelemetry/semantic-conventions": "npm:1.28.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/688e73258283c80662bfa9a858aaf73bf3b832a18d96e546d0dddfa6dcec556cdfa087a1d0df643435293406009e4122d7fb7eeea69aa87b539d3bab756fba74 + languageName: node + linkType: hard + "@opentelemetry/resources@npm:2.0.1, @opentelemetry/resources@npm:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/resources@npm:2.0.1" @@ -2685,6 +3547,31 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/sdk-logs@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/sdk-logs@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.53.0" + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.10.0" + checksum: 10c0/bd47e9a70966c53ac7b394ba0f27a4400b4fdebfbe781027f53457954b79b1c821301936bc87f5fe09a462af579c02c4fa27f353b6d9a1dca0b760cc284ec068 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/640a0dcfa4af73a029ef57b51f8ecc1d08dfb0c3a5242552876fab36c7f9ae7c410fa52dbc5202a2d8675fcfe61df3c49205079963f1c11acfe42981d1d01a76 + languageName: node + linkType: hard + "@opentelemetry/sdk-metrics@npm:2.0.1": version: 2.0.1 resolution: "@opentelemetry/sdk-metrics@npm:2.0.1" @@ -2729,6 +3616,32 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/sdk-trace-base@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/0d5fc19179375f1599edae91b7232f432faf8631746835a10d0cd0c4907d0ca3ed156cc8087d4e78efdfbd9ba5ba414cc9e1399172c2aa68d7e0cd5190394d87 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.30.1": + version: 1.30.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.30.1" + dependencies: + "@opentelemetry/core": "npm:1.30.1" + "@opentelemetry/resources": "npm:1.30.1" + "@opentelemetry/semantic-conventions": "npm:1.28.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/77019dc3efaeceb41b4c54dd83b92f0ccd81ecceca544cbbe8e0aee4b2c8727724bdb9dcecfe00622c16d60946ae4beb69a5c0e7d85c4bc7ef425bd84f8b970c + languageName: node + linkType: hard + "@opentelemetry/sdk-trace-base@npm:2.0.1": version: 2.0.1 resolution: "@opentelemetry/sdk-trace-base@npm:2.0.1" @@ -2755,6 +3668,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/sdk-trace-web@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-trace-web@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/sdk-trace-base": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/64faabaf3626b3e81b2a531734268b64a88c98c5c4c733f192a46e533b248613b059ff2d2df64d25cff3539460742e9fcc1f397f6beb19be092978a53d5cb6fb + languageName: node + linkType: hard + "@opentelemetry/sdk-trace-web@npm:2.0.1, @opentelemetry/sdk-trace-web@npm:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/sdk-trace-web@npm:2.0.1" @@ -2767,6 +3693,33 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/sdk-trace-web@npm:^1.26.0": + version: 1.30.1 + resolution: "@opentelemetry/sdk-trace-web@npm:1.30.1" + dependencies: + "@opentelemetry/core": "npm:1.30.1" + "@opentelemetry/sdk-trace-base": "npm:1.30.1" + "@opentelemetry/semantic-conventions": "npm:1.28.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/8dd2901b5eef68a5896da0ad11f04c8990ce4ef2dcbec27bbc02d7e193097c270ba5f4c9ca363ea10fb53ca7cc515f18d9dc383a69a17720cd0590474c0ffdaf + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" + checksum: 10c0/b859773ba06b7e53dd9c6b45a171bf3000e405733adbf462ae91004ed011bc80edb5beecb817fb344a085adfd06045ab5b729c9bd0f1479650ad377134fb798c + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.28.0": + version: 1.28.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.28.0" + checksum: 10c0/deb8a0f744198071e70fea27143cf7c9f7ecb7e4d7b619488c917834ea09b31543c1c2bcea4ec5f3cf68797f0ef3549609c14e859013d9376400ac1499c2b9cb + languageName: node + linkType: hard + "@opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.28.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.32.0": version: 1.36.0 resolution: "@opentelemetry/semantic-conventions@npm:1.36.0" @@ -2785,114 +3738,114 @@ __metadata: languageName: node linkType: hard -"@parcel/watcher-android-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-android-arm64@npm:2.5.0" +"@parcel/watcher-android-arm64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-android-arm64@npm:2.5.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@parcel/watcher-darwin-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-darwin-arm64@npm:2.5.0" +"@parcel/watcher-darwin-arm64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-darwin-arm64@npm:2.5.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@parcel/watcher-darwin-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-darwin-x64@npm:2.5.0" +"@parcel/watcher-darwin-x64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-darwin-x64@npm:2.5.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@parcel/watcher-freebsd-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-freebsd-x64@npm:2.5.0" +"@parcel/watcher-freebsd-x64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-freebsd-x64@npm:2.5.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@parcel/watcher-linux-arm-glibc@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.0" +"@parcel/watcher-linux-arm-glibc@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@parcel/watcher-linux-arm-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.0" +"@parcel/watcher-linux-arm-musl@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@parcel/watcher-linux-arm64-glibc@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.0" +"@parcel/watcher-linux-arm64-glibc@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@parcel/watcher-linux-arm64-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.0" +"@parcel/watcher-linux-arm64-musl@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@parcel/watcher-linux-x64-glibc@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.0" +"@parcel/watcher-linux-x64-glibc@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@parcel/watcher-linux-x64-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.0" +"@parcel/watcher-linux-x64-musl@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@parcel/watcher-win32-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-win32-arm64@npm:2.5.0" +"@parcel/watcher-win32-arm64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-win32-arm64@npm:2.5.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@parcel/watcher-win32-ia32@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-win32-ia32@npm:2.5.0" +"@parcel/watcher-win32-ia32@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-win32-ia32@npm:2.5.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@parcel/watcher-win32-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-win32-x64@npm:2.5.0" +"@parcel/watcher-win32-x64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-win32-x64@npm:2.5.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@parcel/watcher@npm:^2.4.1": - version: 2.5.0 - resolution: "@parcel/watcher@npm:2.5.0" - dependencies: - "@parcel/watcher-android-arm64": "npm:2.5.0" - "@parcel/watcher-darwin-arm64": "npm:2.5.0" - "@parcel/watcher-darwin-x64": "npm:2.5.0" - "@parcel/watcher-freebsd-x64": "npm:2.5.0" - "@parcel/watcher-linux-arm-glibc": "npm:2.5.0" - "@parcel/watcher-linux-arm-musl": "npm:2.5.0" - "@parcel/watcher-linux-arm64-glibc": "npm:2.5.0" - "@parcel/watcher-linux-arm64-musl": "npm:2.5.0" - "@parcel/watcher-linux-x64-glibc": "npm:2.5.0" - "@parcel/watcher-linux-x64-musl": "npm:2.5.0" - "@parcel/watcher-win32-arm64": "npm:2.5.0" - "@parcel/watcher-win32-ia32": "npm:2.5.0" - "@parcel/watcher-win32-x64": "npm:2.5.0" + version: 2.5.1 + resolution: "@parcel/watcher@npm:2.5.1" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.5.1" + "@parcel/watcher-darwin-arm64": "npm:2.5.1" + "@parcel/watcher-darwin-x64": "npm:2.5.1" + "@parcel/watcher-freebsd-x64": "npm:2.5.1" + "@parcel/watcher-linux-arm-glibc": "npm:2.5.1" + "@parcel/watcher-linux-arm-musl": "npm:2.5.1" + "@parcel/watcher-linux-arm64-glibc": "npm:2.5.1" + "@parcel/watcher-linux-arm64-musl": "npm:2.5.1" + "@parcel/watcher-linux-x64-glibc": "npm:2.5.1" + "@parcel/watcher-linux-x64-musl": "npm:2.5.1" + "@parcel/watcher-win32-arm64": "npm:2.5.1" + "@parcel/watcher-win32-ia32": "npm:2.5.1" + "@parcel/watcher-win32-x64": "npm:2.5.1" detect-libc: "npm:^1.0.3" is-glob: "npm:^4.0.3" micromatch: "npm:^4.0.5" @@ -2925,7 +3878,7 @@ __metadata: optional: true "@parcel/watcher-win32-x64": optional: true - checksum: 10c0/9bad727d8b11e5d150ec47459254544c583adaa47d047b8ef65e1c74aede1a0767dc7fc6b8997649dae07318d6ef39caba6a1c405d306398d5bcd47074ec5d29 + checksum: 10c0/8f35073d0c0b34a63d4c8d2213482f0ebc6a25de7b2cdd415d19cb929964a793cb285b68d1d50bfb732b070b3c82a2fdb4eb9c250eab709a1cd9d63345455a82 languageName: node linkType: hard @@ -2936,10 +3889,10 @@ __metadata: languageName: node linkType: hard -"@pkgr/core@npm:^0.2.4": - version: 0.2.7 - resolution: "@pkgr/core@npm:0.2.7" - checksum: 10c0/951f5ebf2feb6e9dbc202d937f1a364d60f2bf0e3e53594251bcc1d9d2ed0df0a919c49ba162a9499fce73cf46ebe4d7959a8dfbac03511dbe79b69f5fedb804 +"@pkgr/core@npm:^0.2.9": + version: 0.2.9 + resolution: "@pkgr/core@npm:0.2.9" + checksum: 10c0/ac8e4e8138b1a7a4ac6282873aef7389c352f1f8b577b4850778f5182e4a39a5241facbe48361fec817f56d02b51691b383010843fb08b34a8e8ea3614688fd5 languageName: node linkType: hard @@ -3002,35 +3955,495 @@ __metadata: languageName: node linkType: hard -"@protobufjs/path@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/path@npm:1.1.2" - checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@react-aria/ssr@npm:^3.5.0": + version: 3.9.10 + resolution: "@react-aria/ssr@npm:3.9.10" + dependencies: + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/44acb4c441d9c5d65aab94aa81fd8368413cf2958ab458582296dd78f6ba4783583f2311fa986120060e5c26b54b1f01e8910ffd17e4f41ccc5fc8c357d84089 + languageName: node + linkType: hard + +"@react-native-async-storage/async-storage@npm:1.15.5": + version: 1.15.5 + resolution: "@react-native-async-storage/async-storage@npm:1.15.5" + dependencies: + deep-assign: "npm:^3.0.0" + peerDependencies: + react-native: ^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || 1000.0.0 + checksum: 10c0/c9d18318059d86cb8bdc747482d2d1812ab8b56dca6c0d29eeb8c21710c986eb94e7e8c98b97bccc519346e86926e70e30b06fe3648d4b800cc4a052eca54d1e + languageName: node + linkType: hard + +"@react-native-community/cli-clean@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-clean@npm:11.3.7" + dependencies: + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + prompts: "npm:^2.4.0" + checksum: 10c0/86424ccd79a3baf24e3a292b915d0d706adc98168b32f6c089ca72330ecfdbaaf344a587049c456a1f31782db6463f27d6f0d227b6f1a124bb1561707c6ecd23 + languageName: node + linkType: hard + +"@react-native-community/cli-config@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-config@npm:11.3.7" + dependencies: + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + cosmiconfig: "npm:^5.1.0" + deepmerge: "npm:^4.3.0" + glob: "npm:^7.1.3" + joi: "npm:^17.2.1" + checksum: 10c0/394aeca9598000ecd1d2d4de5740e7d359e215fff6cd5e570d5cfafe5b4ef6f17419f050831bbd709ce3db24738416051ce1e8acb6a1d92896e67f8152315ac6 + languageName: node + linkType: hard + +"@react-native-community/cli-debugger-ui@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-debugger-ui@npm:11.3.7" + dependencies: + serve-static: "npm:^1.13.1" + checksum: 10c0/c5e0c9eedd5d754fc7c3af0b6d73822ee4750de93846228e62dc6885f5c74673ecb22d379d6eff69fd5c25fb4ac7a98201f7019d379bd058d780965fdc11155e + languageName: node + linkType: hard + +"@react-native-community/cli-debugger-ui@npm:^4.13.1": + version: 4.13.1 + resolution: "@react-native-community/cli-debugger-ui@npm:4.13.1" + dependencies: + serve-static: "npm:^1.13.1" + checksum: 10c0/2db8e7db912a7dab2bf91d93ce35747e3b9c4cad4b8980a132a9ac7efd918524720dd7c773da446682a2546bc103369ec1f5d4d32184a54c11baae48f2a20895 + languageName: node + linkType: hard + +"@react-native-community/cli-doctor@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-doctor@npm:11.3.7" + dependencies: + "@react-native-community/cli-config": "npm:11.3.7" + "@react-native-community/cli-platform-android": "npm:11.3.7" + "@react-native-community/cli-platform-ios": "npm:11.3.7" + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + command-exists: "npm:^1.2.8" + envinfo: "npm:^7.7.2" + execa: "npm:^5.0.0" + hermes-profile-transformer: "npm:^0.0.6" + ip: "npm:^1.1.5" + node-stream-zip: "npm:^1.9.1" + ora: "npm:^5.4.1" + prompts: "npm:^2.4.0" + semver: "npm:^7.5.2" + strip-ansi: "npm:^5.2.0" + sudo-prompt: "npm:^9.0.0" + wcwidth: "npm:^1.0.1" + yaml: "npm:^2.2.1" + checksum: 10c0/367798b8b253a5fed7936394adc5584ad40549766c6158031506d17e7f86392eb43565c2ae7742837896df0e496e359a5f952f8cb0eba96d42278b4cc8e138ae + languageName: node + linkType: hard + +"@react-native-community/cli-hermes@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-hermes@npm:11.3.7" + dependencies: + "@react-native-community/cli-platform-android": "npm:11.3.7" + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + hermes-profile-transformer: "npm:^0.0.6" + ip: "npm:^1.1.5" + checksum: 10c0/1afa7094980512a4e256964876e5ef4bc51d13a237ff3e26a85bceeca876f3fdda0a60562c8fe998ec9d75ebda8d1569e51be92c8d54bf2c60898ed3a1b14cb9 + languageName: node + linkType: hard + +"@react-native-community/cli-hermes@npm:^4.13.0": + version: 4.13.0 + resolution: "@react-native-community/cli-hermes@npm:4.13.0" + dependencies: + "@react-native-community/cli-platform-android": "npm:^4.13.0" + "@react-native-community/cli-tools": "npm:^4.13.0" + chalk: "npm:^3.0.0" + hermes-profile-transformer: "npm:^0.0.6" + ip: "npm:^1.1.5" + checksum: 10c0/fdcebac78eb2eddd5d854a8dbb5ced47361bce1528ae2b7488dab307650ee0d80a6787f6cd0f0c39e35b7f10fe60b4075855eeaf5e4e10efb540d3a8b1d700b9 + languageName: node + linkType: hard + +"@react-native-community/cli-platform-android@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-platform-android@npm:11.3.7" + dependencies: + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + glob: "npm:^7.1.3" + logkitty: "npm:^0.7.1" + checksum: 10c0/292819aee382c7934791489ef03cbad79d84d74402aa553bfa68a3f15b91801600b8977e15f5371ecc16c10e8cc06d54bfea91f50af00f1668d188759095eded + languageName: node + linkType: hard + +"@react-native-community/cli-platform-android@npm:^4.10.0, @react-native-community/cli-platform-android@npm:^4.13.0": + version: 4.13.0 + resolution: "@react-native-community/cli-platform-android@npm:4.13.0" + dependencies: + "@react-native-community/cli-tools": "npm:^4.13.0" + chalk: "npm:^3.0.0" + execa: "npm:^1.0.0" + fs-extra: "npm:^8.1.0" + glob: "npm:^7.1.3" + jetifier: "npm:^1.6.2" + lodash: "npm:^4.17.15" + logkitty: "npm:^0.7.1" + slash: "npm:^3.0.0" + xmldoc: "npm:^1.1.2" + checksum: 10c0/03f6f384f706a0e95c3ee501409c79e7eb2cce23465242f6abf57394fa1d9d884b60206177ea19d0364d9388e76cd38a1915903ec02479ef4b2b5ef154e323c0 + languageName: node + linkType: hard + +"@react-native-community/cli-platform-ios@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-platform-ios@npm:11.3.7" + dependencies: + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-xml-parser: "npm:^4.0.12" + glob: "npm:^7.1.3" + ora: "npm:^5.4.1" + checksum: 10c0/a0ebaf57dca9bade46f794f18baf133711d0bb2f6f2cedef43faecb18045c2774d37631b17b4f6ff22f2ba42d92d233f1aae2dbb47a807df77cc39a7a6f5bd9a + languageName: node + linkType: hard + +"@react-native-community/cli-platform-ios@npm:^4.10.0": + version: 4.13.0 + resolution: "@react-native-community/cli-platform-ios@npm:4.13.0" + dependencies: + "@react-native-community/cli-tools": "npm:^4.13.0" + chalk: "npm:^3.0.0" + glob: "npm:^7.1.3" + js-yaml: "npm:^3.13.1" + lodash: "npm:^4.17.15" + plist: "npm:^3.0.1" + xcode: "npm:^2.0.0" + checksum: 10c0/9fa02a72ca0884eb23281dcb6dfc06ac4046ca57e48b8091171a5dfb3b8fc08fd9b85858f7e537bc360640aa80ab91f3d8354d8e4fb7f03fbccd246b77ea27c5 + languageName: node + linkType: hard + +"@react-native-community/cli-plugin-metro@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-plugin-metro@npm:11.3.7" + dependencies: + "@react-native-community/cli-server-api": "npm:11.3.7" + "@react-native-community/cli-tools": "npm:11.3.7" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + metro: "npm:0.76.8" + metro-config: "npm:0.76.8" + metro-core: "npm:0.76.8" + metro-react-native-babel-transformer: "npm:0.76.8" + metro-resolver: "npm:0.76.8" + metro-runtime: "npm:0.76.8" + readline: "npm:^1.3.0" + checksum: 10c0/b482879c07e037224c5801c96ce6ca11f1b0c2aa5f32d54b1cb943bec7b40661afc801ff6fcbd32dff08830ad7105ac95f76a066d7088014aefb0eab5f781eba + languageName: node + linkType: hard + +"@react-native-community/cli-server-api@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-server-api@npm:11.3.7" + dependencies: + "@react-native-community/cli-debugger-ui": "npm:11.3.7" + "@react-native-community/cli-tools": "npm:11.3.7" + compression: "npm:^1.7.1" + connect: "npm:^3.6.5" + errorhandler: "npm:^1.5.1" + nocache: "npm:^3.0.1" + pretty-format: "npm:^26.6.2" + serve-static: "npm:^1.13.1" + ws: "npm:^7.5.1" + checksum: 10c0/df499556679bf1df8055cc0f92ebef36619827bc03f9ef237d3d6bd6419e362425ae91d97169cf7d5fcc9460cb6a3851c0b82a1552e940273aa2bebe35561ae9 + languageName: node + linkType: hard + +"@react-native-community/cli-server-api@npm:^4.13.1": + version: 4.13.1 + resolution: "@react-native-community/cli-server-api@npm:4.13.1" + dependencies: + "@react-native-community/cli-debugger-ui": "npm:^4.13.1" + "@react-native-community/cli-tools": "npm:^4.13.0" + compression: "npm:^1.7.1" + connect: "npm:^3.6.5" + errorhandler: "npm:^1.5.0" + nocache: "npm:^2.1.0" + pretty-format: "npm:^25.1.0" + serve-static: "npm:^1.13.1" + ws: "npm:^1.1.0" + checksum: 10c0/0cd54581514cb1cf6068ab6c745db2fdfa2700e24c584b27ce9e21e46e0f76b4ef08fa6d6999f13581a5cf7afab4fe6b5511cccd9c6b076e376ac1c096f70f46 + languageName: node + linkType: hard + +"@react-native-community/cli-tools@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-tools@npm:11.3.7" + dependencies: + appdirsjs: "npm:^1.2.4" + chalk: "npm:^4.1.2" + find-up: "npm:^5.0.0" + mime: "npm:^2.4.1" + node-fetch: "npm:^2.6.0" + open: "npm:^6.2.0" + ora: "npm:^5.4.1" + semver: "npm:^7.5.2" + shell-quote: "npm:^1.7.3" + checksum: 10c0/d1d66b5c8f46153c00a25c62331fda300518acb679813901097699e012f9b001bbfe8a5440c4028d51ca3abdea0b94aef578143f91010000e2bbd8a2269c0d55 + languageName: node + linkType: hard + +"@react-native-community/cli-tools@npm:^4.13.0": + version: 4.13.0 + resolution: "@react-native-community/cli-tools@npm:4.13.0" + dependencies: + chalk: "npm:^3.0.0" + lodash: "npm:^4.17.15" + mime: "npm:^2.4.1" + node-fetch: "npm:^2.6.0" + open: "npm:^6.2.0" + shell-quote: "npm:1.6.1" + checksum: 10c0/0fb26bc56272a970373bf8b635f27dcdd34281c0d1b159663bbf80ecd642291ff4f0fa4d19f4f52c0a07cc5506a7e340d3a6e89806bcdbcd450f63b35342f8e5 + languageName: node + linkType: hard + +"@react-native-community/cli-types@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli-types@npm:11.3.7" + dependencies: + joi: "npm:^17.2.1" + checksum: 10c0/64e345c25dce2704950fa0214415e53d6af3c3d40d97a81ec21dd6bea254471a6f055ea515d0d0b7f412af3f2f09f511f5332df9c9337545c2e2e22dae8bfc01 + languageName: node + linkType: hard + +"@react-native-community/cli-types@npm:^4.10.1": + version: 4.10.1 + resolution: "@react-native-community/cli-types@npm:4.10.1" + checksum: 10c0/7d7ecb06c35ec3b6f172426452f3b1b2a97758022f3121f03c5619d365bc7b833bea25862a6b67d2162b2e416d8534871b089f4f86bf3df6d731c621dd0070bd + languageName: node + linkType: hard + +"@react-native-community/cli@npm:11.3.7": + version: 11.3.7 + resolution: "@react-native-community/cli@npm:11.3.7" + dependencies: + "@react-native-community/cli-clean": "npm:11.3.7" + "@react-native-community/cli-config": "npm:11.3.7" + "@react-native-community/cli-debugger-ui": "npm:11.3.7" + "@react-native-community/cli-doctor": "npm:11.3.7" + "@react-native-community/cli-hermes": "npm:11.3.7" + "@react-native-community/cli-plugin-metro": "npm:11.3.7" + "@react-native-community/cli-server-api": "npm:11.3.7" + "@react-native-community/cli-tools": "npm:11.3.7" + "@react-native-community/cli-types": "npm:11.3.7" + chalk: "npm:^4.1.2" + commander: "npm:^9.4.1" + execa: "npm:^5.0.0" + find-up: "npm:^4.1.0" + fs-extra: "npm:^8.1.0" + graceful-fs: "npm:^4.1.3" + prompts: "npm:^2.4.0" + semver: "npm:^7.5.2" + bin: + react-native: build/bin.js + checksum: 10c0/635eb4111369310de7c6e9bdd04119062e8c38e68bc8ca18560594fe5f5f022f62c60f7807281a4ba26ba82eaa793af7c70264dfdf57e5571edbbd850056d685 + languageName: node + linkType: hard + +"@react-native-community/cli@npm:^4.10.0": + version: 4.14.0 + resolution: "@react-native-community/cli@npm:4.14.0" + dependencies: + "@hapi/joi": "npm:^15.0.3" + "@react-native-community/cli-debugger-ui": "npm:^4.13.1" + "@react-native-community/cli-hermes": "npm:^4.13.0" + "@react-native-community/cli-server-api": "npm:^4.13.1" + "@react-native-community/cli-tools": "npm:^4.13.0" + "@react-native-community/cli-types": "npm:^4.10.1" + chalk: "npm:^3.0.0" + command-exists: "npm:^1.2.8" + commander: "npm:^2.19.0" + cosmiconfig: "npm:^5.1.0" + deepmerge: "npm:^3.2.0" + envinfo: "npm:^7.7.2" + execa: "npm:^1.0.0" + find-up: "npm:^4.1.0" + fs-extra: "npm:^8.1.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.1.3" + inquirer: "npm:^3.0.6" + leven: "npm:^3.1.0" + lodash: "npm:^4.17.15" + metro: "npm:^0.59.0" + metro-config: "npm:^0.59.0" + metro-core: "npm:^0.59.0" + metro-react-native-babel-transformer: "npm:^0.59.0" + metro-resolver: "npm:^0.59.0" + minimist: "npm:^1.2.0" + mkdirp: "npm:^0.5.1" + node-stream-zip: "npm:^1.9.1" + ora: "npm:^3.4.0" + pretty-format: "npm:^25.2.0" + semver: "npm:^6.3.0" + serve-static: "npm:^1.13.1" + strip-ansi: "npm:^5.2.0" + sudo-prompt: "npm:^9.0.0" + wcwidth: "npm:^1.0.1" + peerDependencies: + react-native: ">=0.62.0-rc.0 <0.64.0" + bin: + react-native: build/bin.js + checksum: 10c0/a347c799f461f09e41b32976caf9da3ed621e9699a7555bdb40edd72ef899874776623dc8762951ccd877b40ac170c8e1878700fbd2ed971344000e7490e5016 + languageName: node + linkType: hard + +"@react-native/assets-registry@npm:^0.72.0": + version: 0.72.0 + resolution: "@react-native/assets-registry@npm:0.72.0" + checksum: 10c0/54fa36c0679b4126ed436c28332720a4db6b81c9d5117093a5c7a589cdda34340022f683e74d91a8d389dc37c18ad80678ae38eb70d06767747d3b73fe4cd50e + languageName: node + linkType: hard + +"@react-native/codegen@npm:^0.72.7": + version: 0.72.8 + resolution: "@react-native/codegen@npm:0.72.8" + dependencies: + "@babel/parser": "npm:^7.20.0" + flow-parser: "npm:^0.206.0" + glob: "npm:^7.1.1" + invariant: "npm:^2.2.4" + jscodeshift: "npm:^0.14.0" + mkdirp: "npm:^0.5.1" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: 10c0/16ae3151263c2e21386ac79e9e2d3b55cabaed7c75743d4e985964d4da3f4162f1702e82cb62089b2150f711ee779ca4d3c8aef23137bcc98080fef40b1801a5 + languageName: node + linkType: hard + +"@react-native/gradle-plugin@npm:^0.72.11": + version: 0.72.11 + resolution: "@react-native/gradle-plugin@npm:0.72.11" + checksum: 10c0/18ce50162c6a02baedbe3b00b83f60999b09c29c22c9841147af3a885e4b59e5e3ca74aff83d7bd962d3f5683632eb02e63c9bd76267e1723fefbfc04b896118 + languageName: node + linkType: hard + +"@react-native/js-polyfills@npm:^0.72.1": + version: 0.72.1 + resolution: "@react-native/js-polyfills@npm:0.72.1" + checksum: 10c0/e4a77d6c8b35da0fede25fcdb97cbd6f332554d06542d48709dbbe9029fde43b3a3063f60da609b94640c19e85eddf1ef554f848eab72e64008a74c03a238279 + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:*": + version: 0.80.2 + resolution: "@react-native/normalize-colors@npm:0.80.2" + checksum: 10c0/688ce6b0b97d1e9915e98a091ee87ce8ec1b44f1565b7b7089321ee5e5506efd32fc6e1537c87dd2c58b6bca5cc637938d0e7f5aa65bf2773ef0b9aa6338ff06 + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:^0.72.0": + version: 0.72.0 + resolution: "@react-native/normalize-colors@npm:0.72.0" + checksum: 10c0/741615ff23bead068a8a74e7b24fb2bcf074c9c4522f7329e8372597552eb26c3cdb6c0984dd564da9e5c3d1b61ec07b2e29f12a14f326d6e589480317dd833f + languageName: node + linkType: hard + +"@react-native/virtualized-lists@npm:^0.72.8": + version: 0.72.8 + resolution: "@react-native/virtualized-lists@npm:0.72.8" + dependencies: + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + peerDependencies: + react-native: "*" + checksum: 10c0/1fe43afeacf5aacec270d7f64b9ce6c69afe1c65d1e487fff75e647d1f57114527f2223602d546b95fc982b348a6f1773db66184a2e90ba434f4f013f3991bac + languageName: node + linkType: hard + +"@redux-saga/core@npm:^1.3.0": + version: 1.3.0 + resolution: "@redux-saga/core@npm:1.3.0" + dependencies: + "@babel/runtime": "npm:^7.6.3" + "@redux-saga/deferred": "npm:^1.2.1" + "@redux-saga/delay-p": "npm:^1.2.1" + "@redux-saga/is": "npm:^1.1.3" + "@redux-saga/symbols": "npm:^1.1.3" + "@redux-saga/types": "npm:^1.2.1" + typescript-tuple: "npm:^2.2.1" + checksum: 10c0/a2e5e4f5df3db6d7fda41c804d5dac41f8bd4dfe55980671394c2dd1d65719b4365d561734fcb8d08844c5ab0fb59d44400da31565ca7ddd60aeec3a28281aef + languageName: node + linkType: hard + +"@redux-saga/deferred@npm:^1.2.1": + version: 1.2.1 + resolution: "@redux-saga/deferred@npm:1.2.1" + checksum: 10c0/7042a36e1a799e9602395eb90fb1fa7521c0043743b13cbb9c7a13893be732ba35c0415524b99e420f5e130c103f9e565e5854e49e4d64d09a0f4bb835ba3e72 + languageName: node + linkType: hard + +"@redux-saga/delay-p@npm:^1.2.1": + version: 1.2.1 + resolution: "@redux-saga/delay-p@npm:1.2.1" + dependencies: + "@redux-saga/symbols": "npm:^1.1.3" + checksum: 10c0/27566d6b95779d046aef47225d06d8b00a9fe934fa1b713b518359df065b9f7e9512ca5f1ab7a55314664de6a3d89d69490d64e6fda229884c3678f199581f37 languageName: node linkType: hard -"@protobufjs/pool@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/pool@npm:1.1.0" - checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 +"@redux-saga/is@npm:^1.1.3": + version: 1.1.3 + resolution: "@redux-saga/is@npm:1.1.3" + dependencies: + "@redux-saga/symbols": "npm:^1.1.3" + "@redux-saga/types": "npm:^1.2.1" + checksum: 10c0/f516755b89b4bc7a69f18765fd0be29fbe92c91b5d783c4a9baf81c8fca404c5743f2d391d90527b7d26153170d7e992c27a578f5bfb5bb5cc04c20864d9fdbb languageName: node linkType: hard -"@protobufjs/utf8@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/utf8@npm:1.1.0" - checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 +"@redux-saga/symbols@npm:^1.1.3": + version: 1.1.3 + resolution: "@redux-saga/symbols@npm:1.1.3" + checksum: 10c0/71141bf8fe74420d0929f3c08e8ebfb54bda47ef4177dc46045c73de2f4b5762f176e80c573bce5ac77bc3cb39aa872e943ecbd80b9b317a571c93986c8b9f22 languageName: node linkType: hard -"@react-aria/ssr@npm:^3.5.0": - version: 3.8.0 - resolution: "@react-aria/ssr@npm:3.8.0" - dependencies: - "@swc/helpers": "npm:^0.5.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 10c0/c218d93f4be967da97aec354fc6a7c486ac7b04f86ebed5853165ead444b3d94761b239a809fbbdf29bb4ed9ea99c2a55131910a2bb483a94bb7e0321d8924b7 +"@redux-saga/types@npm:^1.2.1": + version: 1.2.1 + resolution: "@redux-saga/types@npm:1.2.1" + checksum: 10c0/38dc478c5e20dc52511ee122d0011fc71d26266a300ed1b66ec7863c8075aa27cc1ef1ba79dcc4aac0682912e3257ff4cddc52b9be55ee873a4e8f1a1bc7ee7c languageName: node linkType: hard @@ -3056,21 +4469,74 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.16.0": - version: 1.16.0 - resolution: "@remix-run/router@npm:1.16.0" - checksum: 10c0/234e66b4d7266aff6d111a43f5560f00ffdc91de0b5cd447f1fdf1de1a8b3a6ac326eb52302356e23b095e71a8f4da914e40239af5f121de2ec2994f101b8db0 +"@remix-run/router@npm:1.23.0": + version: 1.23.0 + resolution: "@remix-run/router@npm:1.23.0" + checksum: 10c0/eaef5cb46a1e413f7d1019a75990808307e08e53a39d4cf69c339432ddc03143d725decef3d6b9b5071b898da07f72a4a57c4e73f787005fcf10162973d8d7d7 + languageName: node + linkType: hard + +"@remix-run/web-blob@npm:^3.1.0": + version: 3.1.0 + resolution: "@remix-run/web-blob@npm:3.1.0" + dependencies: + "@remix-run/web-stream": "npm:^1.1.0" + web-encoding: "npm:1.1.5" + checksum: 10c0/045796facac919f276a0014c0a7eb397b9b54f3833b1d481363cecf30cb1c21dccc63e208e01522f10f389c87294f785be982370bd4dc3521371dfb549849dab + languageName: node + linkType: hard + +"@remix-run/web-fetch@npm:^4.3.4": + version: 4.4.2 + resolution: "@remix-run/web-fetch@npm:4.4.2" + dependencies: + "@remix-run/web-blob": "npm:^3.1.0" + "@remix-run/web-file": "npm:^3.1.0" + "@remix-run/web-form-data": "npm:^3.1.0" + "@remix-run/web-stream": "npm:^1.1.0" + "@web3-storage/multipart-parser": "npm:^1.0.0" + abort-controller: "npm:^3.0.0" + data-uri-to-buffer: "npm:^3.0.1" + mrmime: "npm:^1.0.0" + checksum: 10c0/15399b435d91f833782d8a23fc43142929187ea7c59468b2997993e90f55e88e9dd4516e9e179e6342f2d7ee568ff1d6bce4b316e91ed47c74405700b45b9259 + languageName: node + linkType: hard + +"@remix-run/web-file@npm:^3.1.0": + version: 3.1.0 + resolution: "@remix-run/web-file@npm:3.1.0" + dependencies: + "@remix-run/web-blob": "npm:^3.1.0" + checksum: 10c0/78397543a75f6d9652263d1a595411bbbf46a90f5ef82ca39612f5f65c8bf14bdab7381d10b51e67e515fa2a2939c2a72c7ff16a03060a0c108c387134aa4c5d + languageName: node + linkType: hard + +"@remix-run/web-form-data@npm:^3.1.0": + version: 3.1.0 + resolution: "@remix-run/web-form-data@npm:3.1.0" + dependencies: + web-encoding: "npm:1.1.5" + checksum: 10c0/cc94913b8416d3a2b48930bad0ccc0aaf1f4deb0e240cd1b32ddc0c37de5918b8617a9e33f734c7373b0afd654b284ff0709b947e335f5a6fa3a6611974d20ef + languageName: node + linkType: hard + +"@remix-run/web-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "@remix-run/web-stream@npm:1.1.0" + dependencies: + web-streams-polyfill: "npm:^3.1.1" + checksum: 10c0/5f59ba3a86832d146dcf59b92a4fb22a21f2f8c2843f0b814ef41605237498b8372240cf4efdcd86458a08d9451ef0574c3d127b6f82117f77ad6110034973d3 languageName: node linkType: hard "@restart/hooks@npm:^0.4.9": - version: 0.4.11 - resolution: "@restart/hooks@npm:0.4.11" + version: 0.4.16 + resolution: "@restart/hooks@npm:0.4.16" dependencies: dequal: "npm:^2.0.3" peerDependencies: react: ">=16.8.0" - checksum: 10c0/5abbe06a9f6382b8dd618697f4da1f08420b30de574eada81db220e6b223480b761afb26ba58c736ca08abd84b9bf3682cdd05330c1bfcd50a37844a40032c1e + checksum: 10c0/b6a0f1db046cdec28737092ab5defdfb25fad498d37d218646f7f123aed02a5078b1c89ae631bda14d9ee35f7bb8c9e0f15379b1a45003144dc30cd15e8ba668 languageName: node linkType: hard @@ -3186,18 +4652,18 @@ __metadata: linkType: hard "@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.0": - version: 5.1.0 - resolution: "@rollup/pluginutils@npm:5.1.0" + version: 5.2.0 + resolution: "@rollup/pluginutils@npm:5.2.0" dependencies: "@types/estree": "npm:^1.0.0" estree-walker: "npm:^2.0.2" - picomatch: "npm:^2.3.1" + picomatch: "npm:^4.0.2" peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - checksum: 10c0/c7bed15711f942d6fdd3470fef4105b73991f99a478605e13d41888963330a6f9e32be37e6ddb13f012bc7673ff5e54f06f59fd47109436c1c513986a8a7612d + checksum: 10c0/794890d512751451bcc06aa112366ef47ea8f9125dac49b1abf72ff8b079518b09359de9c60a013b33266541634e765ae61839c749fae0edb59a463418665c55 languageName: node linkType: hard @@ -3388,9 +4854,9 @@ __metadata: linkType: hard "@sigstore/protobuf-specs@npm:^0.3.2": - version: 0.3.2 - resolution: "@sigstore/protobuf-specs@npm:0.3.2" - checksum: 10c0/108eed419181ff599763f2d28ff5087e7bce9d045919de548677520179fe77fb2e2b7290216c93c7a01bdb2972b604bf44599273c991bbdf628fbe1b9b70aacb + version: 0.3.3 + resolution: "@sigstore/protobuf-specs@npm:0.3.3" + checksum: 10c0/e0a68795fa19e437fca2c3993e5a57e989642d65434beda54b29017c1629176cc8abeb81bb1e0923259cdfb19fe1fee6f1b8680a8f8240dc14c7a7de2bbae7af languageName: node linkType: hard @@ -3437,13 +4903,13 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.34.0": - version: 0.34.37 - resolution: "@sinclair/typebox@npm:0.34.37" - checksum: 10c0/22fff01853d8f35e8a1f0be004e91a0c3ced16f35b8d7e915392e91bf021190bcba45102cd148679c53440c4ed228b31d7a2635461ea5d089ef581f6254ecfb4 + version: 0.34.38 + resolution: "@sinclair/typebox@npm:0.34.38" + checksum: 10c0/c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 languageName: node linkType: hard -"@sinonjs/commons@npm:^3.0.1": +"@sinonjs/commons@npm:^3.0.0, @sinonjs/commons@npm:^3.0.1": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" dependencies: @@ -3452,6 +4918,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 10c0/2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^13.0.0": version: 13.0.5 resolution: "@sinonjs/fake-timers@npm:13.0.5" @@ -3489,11 +4964,11 @@ __metadata: linkType: hard "@swc/helpers@npm:^0.5.0": - version: 0.5.3 - resolution: "@swc/helpers@npm:0.5.3" + version: 0.5.17 + resolution: "@swc/helpers@npm:0.5.17" dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/7003b9dafad38e27a4474a3dcf78d2aee85ce4bb7ee171ecc2d5b533768fb4f8fc9dbd6a1c3a9df5f8001e61ff416b93681e0a7dcbdc0df109b3e09c50cd4615 + tslib: "npm:^2.8.0" + checksum: 10c0/fe1f33ebb968558c5a0c595e54f2e479e4609bff844f9ca9a2d1ffd8dd8504c26f862a11b031f48f75c95b0381c2966c3dd156e25942f90089badd24341e7dbb languageName: node linkType: hard @@ -3506,12 +4981,12 @@ __metadata: languageName: node linkType: hard -"@ts-graphviz/ast@npm:^2.0.6": - version: 2.0.6 - resolution: "@ts-graphviz/ast@npm:2.0.6" +"@ts-graphviz/ast@npm:^2.0.7": + version: 2.0.7 + resolution: "@ts-graphviz/ast@npm:2.0.7" dependencies: "@ts-graphviz/common": "npm:^2.1.5" - checksum: 10c0/d501662eac3381d775857418e61cd9e65feaecef1673f23b68fccfbfd9c4d881fcc5e572a4d2c10fec7ba1fa7da220c0476c7f269874efc5f84861bb594d9f25 + checksum: 10c0/f6762ea9255bf97c9bbd9006eb34c79931ce3ed0225622356f3facd5b9c88c8e64ddd7df379ce7bbdfe10c8e0562192b4534760c28464173c0dd7a8c6c728d42 languageName: node linkType: hard @@ -3522,20 +4997,20 @@ __metadata: languageName: node linkType: hard -"@ts-graphviz/core@npm:^2.0.6": - version: 2.0.6 - resolution: "@ts-graphviz/core@npm:2.0.6" +"@ts-graphviz/core@npm:^2.0.7": + version: 2.0.7 + resolution: "@ts-graphviz/core@npm:2.0.7" dependencies: - "@ts-graphviz/ast": "npm:^2.0.6" + "@ts-graphviz/ast": "npm:^2.0.7" "@ts-graphviz/common": "npm:^2.1.5" - checksum: 10c0/253a04f41e6e02fe8776f5f1189f66b82ed118dc3db0a39b490f952da462b165f5a37d451c4f90c6eed686ca19cb6a96118699473a5247b45f0e03dddf1a7f61 + checksum: 10c0/39dd723a4760d8ac4a5865c44003b7509b02a30505c52fa02aa7475f6ec235b1f4026e0c422717ace15b4bb8b9a8d634e8b3bbc7e064dd8fcaff9fc9cf8747d1 languageName: node linkType: hard "@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: 10c0/c176a2c1e1b16be120c328300ea910df15fb9a5277010116d26818272341a11483c5a80059389d04edacf6fd2d03d4687ad3660870fdd1cc0b7109e160adb220 + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c languageName: node linkType: hard @@ -3554,9 +5029,9 @@ __metadata: linkType: hard "@tsconfig/node16@npm:^1.0.2": - version: 1.0.3 - resolution: "@tsconfig/node16@npm:1.0.3" - checksum: 10c0/451a0d4b2bc35c2cdb30a49b6c699d797b8bbac99b883237659698678076d4193050d90e2ee36016ccbca57075cdb073cadab38cedc45119bac68ab331958cbc + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb languageName: node linkType: hard @@ -3577,6 +5052,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.0": + version: 0.10.0 + resolution: "@tybys/wasm-util@npm:0.10.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/044feba55c1e2af703aa4946139969badb183ce1a659a75ed60bc195a90e73a3f3fc53bcd643497c9954597763ddb051fec62f80962b2ca6fc716ba897dc696e + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.9.0": version: 0.9.0 resolution: "@tybys/wasm-util@npm:0.9.0" @@ -3600,30 +5084,30 @@ __metadata: linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.27.0 + resolution: "@types/babel__generator@npm:7.27.0" dependencies: "@babel/types": "npm:^7.0.0" - checksum: 10c0/e0051b450e4ba2df0a7e386f08df902a4e920f6f8d6f185d69ddbe9b0e2e2d3ae434bb51e437bc0fca2a9a0f5dc4ca44d3a1941ef75e74371e8be5bf64416fe4 + checksum: 10c0/9f9e959a8792df208a9d048092fda7e1858bddc95c6314857a8211a99e20e6830bdeb572e3587ae8be5429e37f2a96fcf222a9f53ad232f5537764c9e13a2bbd languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" dependencies: "@babel/parser": "npm:^7.1.0" "@babel/types": "npm:^7.0.0" - checksum: 10c0/6f180e96c39765487f27e861d43eebed341ec7a2fc06cdf5a52c22872fae67f474ca165d149c708f4fd9d5482beb66c0a92f77411b234bb30262ed2303e50b1a + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b languageName: node linkType: hard "@types/babel__traverse@npm:*": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" + version: 7.28.0 + resolution: "@types/babel__traverse@npm:7.28.0" dependencies: - "@babel/types": "npm:^7.3.0" - checksum: 10c0/4214fd3e95925d9a7efa01142969a310263430d4f5de89be6c9c193110666677415161b474fa627d751dfd0f1eb7dc1c84c48f8b53098625c6bc78917683215a + "@babel/types": "npm:^7.28.2" + checksum: 10c0/b52d7d4e8fc6a9018fe7361c4062c1c190f5778cf2466817cb9ed19d69fbbb54f9a85ffedeb748ed8062d2cf7d4cc088ee739848f47c57740de1c48cbf0d0994 languageName: node linkType: hard @@ -3657,11 +5141,11 @@ __metadata: linkType: hard "@types/connect@npm:*": - version: 3.4.36 - resolution: "@types/connect@npm:3.4.36" + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" dependencies: "@types/node": "npm:*" - checksum: 10c0/0dd8fcf576e178e69cbc00d47be69d3198dca4d86734a00fc55de0df147982e0a5f34592117571c5979e92ce8f3e0596e31aa454496db8a43ab90c5ab1068f40 + checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c languageName: node linkType: hard @@ -3691,14 +5175,14 @@ __metadata: linkType: hard "@types/express-serve-static-core@npm:^5.0.0": - version: 5.0.5 - resolution: "@types/express-serve-static-core@npm:5.0.5" + version: 5.0.7 + resolution: "@types/express-serve-static-core@npm:5.0.7" dependencies: "@types/node": "npm:*" "@types/qs": "npm:*" "@types/range-parser": "npm:*" "@types/send": "npm:*" - checksum: 10c0/0b27f62835f55d061a41718c9eae5caf533f08a4d1f23107f15f929c64013e8ba43afc110a198bd70196ed2925932bdbd9da2cca802c7be8fc6ec0cc4292833d + checksum: 10c0/28666f6a0743b8678be920a6eed075bc8afc96fc7d8ef59c3c049bd6b51533da3b24daf3b437d061e053fba1475e4f3175cb4972f5e8db41608e817997526430 languageName: node linkType: hard @@ -3725,20 +5209,13 @@ __metadata: linkType: hard "@types/http-errors@npm:*": - version: 2.0.2 - resolution: "@types/http-errors@npm:2.0.2" - checksum: 10c0/ecedc65091baf7c83e0e61e7d1992112e0fa09461d69004747f55c80b801b796bdb60161e54efdac8a720b5f78a54720b0cabde3ae7094103a552d5c189222ce - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: 10c0/af5f6b64e788331ed3f7b2e2613cb6ca659c58b8500be94bbda8c995ad3da9216c006f1cfe6f66b321c39392b1bda18b16e63cef090a77d24a00b4bd5ba3b018 + version: 2.0.5 + resolution: "@types/http-errors@npm:2.0.5" + checksum: 10c0/00f8140fbc504f47356512bd88e1910c2f07e04233d99c88c854b3600ce0523c8cd0ba7d1897667243282eb44c59abb9245959e2428b9de004f93937f52f7c15 languageName: node linkType: hard -"@types/istanbul-lib-coverage@npm:^2.0.6": +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": version: 2.0.6 resolution: "@types/istanbul-lib-coverage@npm:2.0.6" checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 @@ -3746,15 +5223,25 @@ __metadata: linkType: hard "@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^1.1.1": + version: 1.1.2 + resolution: "@types/istanbul-reports@npm:1.1.2" dependencies: "@types/istanbul-lib-coverage": "npm:*" - checksum: 10c0/7ced458631276a28082ee40645224c3cdd8b861961039ff811d841069171c987ec7e50bc221845ec0d04df0022b2f457a21fb2f816dab2fbe64d59377b32031f + "@types/istanbul-lib-report": "npm:*" + checksum: 10c0/80b76715f4ac74a4ddfc82d7942b2faaefbe9fdce8e7dfdfa497b3fb60a3e707b632c6e70e1565cfe30045eaebaf7aad0d6c3d102652d1da8fdb0bf095924eb3 languageName: node linkType: hard -"@types/istanbul-reports@npm:^3.0.4": +"@types/istanbul-reports@npm:^3.0.0, @types/istanbul-reports@npm:^3.0.4": version: 3.0.4 resolution: "@types/istanbul-reports@npm:3.0.4" dependencies: @@ -3816,9 +5303,9 @@ __metadata: linkType: hard "@types/mime@npm:^1": - version: 1.3.3 - resolution: "@types/mime@npm:1.3.3" - checksum: 10c0/56c9981b637154721753d38888c2cba85f8891a16e0f1cb1286dcbd741b220ff56d99aa2be03bf7fe88b188a27e32bf1d92976dafd6574b8f345bbf0853d462c + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: 10c0/c2ee31cd9b993804df33a694d5aa3fa536511a49f2e06eeab0b484fef59b4483777dbb9e42a4198a0809ffbf698081fdbca1e5c2218b82b91603dfab10a10fbc languageName: node linkType: hard @@ -3837,9 +5324,9 @@ __metadata: linkType: hard "@types/ms@npm:*": - version: 0.7.31 - resolution: "@types/ms@npm:0.7.31" - checksum: 10c0/19fae4f587651e8761c76a0c72ba8af1700d37054476878d164b758edcc926f4420ed06037a1a7fdddc1dbea25265895d743c8b2ea44f3f3f7ac06c449b9221e + version: 2.1.0 + resolution: "@types/ms@npm:2.1.0" + checksum: 10c0/5ce692ffe1549e1b827d99ef8ff71187457e0eb44adbae38fdf7b9a74bae8d20642ee963c14516db1d35fa2652e65f47680fdf679dcbde52bbfadd021f497225 languageName: node linkType: hard @@ -3869,13 +5356,13 @@ __metadata: linkType: hard "@types/pg@npm:*": - version: 8.15.1 - resolution: "@types/pg@npm:8.15.1" + version: 8.15.5 + resolution: "@types/pg@npm:8.15.5" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" - pg-types: "npm:^4.0.1" - checksum: 10c0/68ab3b2ae56a9ef891fcefe814b4a4eb6da4f4f3860b56d2821de8fe024eb093895ffe152414c708d889f7110cd5b3839392d2955b07d38f111df8e6186c7e8c + pg-types: "npm:^2.2.0" + checksum: 10c0/19a3cc1811918753f8c827733648c3a85c7b0355bf207c44eb1a3b79b2e6a0d85cb5457ec550d860fc9be7e88c7587a3600958ec8c61fa1ad573061c63af93f0 languageName: node linkType: hard @@ -3891,32 +5378,41 @@ __metadata: linkType: hard "@types/prop-types@npm:*, @types/prop-types@npm:^15.7.12": - version: 15.7.14 - resolution: "@types/prop-types@npm:15.7.14" - checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 + version: 15.7.15 + resolution: "@types/prop-types@npm:15.7.15" + checksum: 10c0/b59aad1ad19bf1733cf524fd4e618196c6c7690f48ee70a327eb450a42aab8e8a063fbe59ca0a5701aebe2d92d582292c0fb845ea57474f6a15f6994b0e260b2 languageName: node linkType: hard "@types/qs@npm:*": - version: 6.9.8 - resolution: "@types/qs@npm:6.9.8" - checksum: 10c0/336358c279818ecedc0b4f9b29fd5052ff6e05dba3f10bad4534a4624819408d0b4710a4cdf8b58dff948dbdb1ca95a00e237189505ef1abfce0e6341eb18022 + version: 6.14.0 + resolution: "@types/qs@npm:6.14.0" + checksum: 10c0/5b3036df6e507483869cdb3858201b2e0b64b4793dc4974f188caa5b5732f2333ab9db45c08157975054d3b070788b35088b4bc60257ae263885016ee2131310 languageName: node linkType: hard "@types/range-parser@npm:*": - version: 1.2.5 - resolution: "@types/range-parser@npm:1.2.5" - checksum: 10c0/fe4bbbbfb19f0765ea15e66e2c58e29e04f4e52055c0d348b08dbfb161c2d2a363cc21b8a6071936a0cab3f02d0f5f362a3f752b37b05ff868000dcfe9120581 + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 10c0/361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c languageName: node linkType: hard "@types/react-dom@npm:^18.0.10": - version: 18.3.1 - resolution: "@types/react-dom@npm:18.3.1" + version: 18.3.7 + resolution: "@types/react-dom@npm:18.3.7" + peerDependencies: + "@types/react": ^18.0.0 + checksum: 10c0/8bd309e2c3d1604a28a736a24f96cbadf6c05d5288cfef8883b74f4054c961b6b3a5e997fd5686e492be903c8f3380dba5ec017eff3906b1256529cd2d39603e + languageName: node + linkType: hard + +"@types/react-native@npm:^0.63.0": + version: 0.63.75 + resolution: "@types/react-native@npm:0.63.75" dependencies: - "@types/react": "npm:*" - checksum: 10c0/8b416551c60bb6bd8ec10e198c957910cfb271bc3922463040b0d57cf4739cdcd24b13224f8d68f10318926e1ec3cd69af0af79f0291b599a992f8c80d47f1eb + "@types/react": "npm:^16" + checksum: 10c0/e02bf118b1b7314b264a510172ff094380a9402e9c328e3eebcb845f945d0782f48cdf37a3d4c670ed9f84fca46559a6a3f1b61d9a678f3a85f1b6b177fd5426 languageName: node linkType: hard @@ -3942,22 +5438,52 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.4.6": - version: 4.4.7 - resolution: "@types/react-transition-group@npm:4.4.7" + version: 4.4.12 + resolution: "@types/react-transition-group@npm:4.4.12" + peerDependencies: + "@types/react": "*" + checksum: 10c0/0441b8b47c69312c89ec0760ba477ba1a0808a10ceef8dc1c64b1013ed78517332c30f18681b0ec0b53542731f1ed015169fed1d127cc91222638ed955478ec7 + languageName: node + linkType: hard + +"@types/react@npm:*, @types/react@npm:>=16.9.11": + version: 19.1.9 + resolution: "@types/react@npm:19.1.9" dependencies: - "@types/react": "npm:*" - checksum: 10c0/25f7ed57f95c67a3ef415981bf7de092c02fe3c156ab4c30b44757bbfe43a1c988d99012d2a33978b1bc338eefa07e6ad4a54c3ddaadbb7d8ac40b79bd48f61e + csstype: "npm:^3.0.2" + checksum: 10c0/b418da4aaf18fbc6df4f1b7096dda7ee152d697cac00d729ffd855b2b44a3a9cfb2ecb017ed20979ea3a7d98a5ce5fcf01ac1a3614d4a3e4d7069a0c45e49b0f + languageName: node + linkType: hard + +"@types/react@npm:^16": + version: 16.14.65 + resolution: "@types/react@npm:16.14.65" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:^0.16" + csstype: "npm:^3.0.2" + checksum: 10c0/d9df8d8c38a508bc33553138c7ba3bc050a9528dc1ea8778e3dab440406d707fbd0dd5f9f270f64d453bb7a169a953d44324476bbc9b0e0ba131bf81473a124c + languageName: node + linkType: hard + +"@types/react@npm:^17.0.0": + version: 17.0.87 + resolution: "@types/react@npm:17.0.87" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:^0.16" + csstype: "npm:^3.0.2" + checksum: 10c0/42efa9d1fa7c6c5422ef1add693c23e35dab0df68265fd403a1c13193acdd972ed03cd5f1cea8e6b378503abb70f25da04ff24f4ef0468d2b8e25db6bd394363 languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16.9.11, @types/react@npm:^18.0.26": - version: 18.0.26 - resolution: "@types/react@npm:18.0.26" +"@types/react@npm:^18.0.26": + version: 18.3.23 + resolution: "@types/react@npm:18.3.23" dependencies: "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/25d59c3d5522ef9e48d5bda4657fa0ba19c50952a18780110c928896897d3136a77c5bc26cbfb08137c9bf6ec0c1f37f4c26dcfb0678fedeb6956fdf9140fd0c + checksum: 10c0/49331800b76572eb2992a5c44801dbf8c612a5f99c8f4e4200f06c7de6f3a6e9455c661784a6c5469df96fa45622cb4a9d0982c44e6a0d5719be5f2ef1f545ed languageName: node linkType: hard @@ -3968,27 +5494,27 @@ __metadata: languageName: node linkType: hard -"@types/scheduler@npm:*": - version: 0.16.2 - resolution: "@types/scheduler@npm:0.16.2" - checksum: 10c0/89a3a922f03609b61c270d534226791edeedcb1b06f0225d5543ac17830254624ef9d8a97ad05418e4ce549dd545bddf1ff28cb90658ff10721ad14556ca68a5 +"@types/scheduler@npm:^0.16": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 10c0/f86de504945b8fc41b1f391f847444d542e2e4067cf7e5d9bfeb5d2d2393d3203b1161bc0ef3b1e104d828dabfb60baf06e8d2c27e27ff7e8258e6e618d8c4ec languageName: node linkType: hard "@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa + version: 7.7.0 + resolution: "@types/semver@npm:7.7.0" + checksum: 10c0/6b5f65f647474338abbd6ee91a6bbab434662ddb8fe39464edcbcfc96484d388baad9eb506dff217b6fc1727a88894930eb1f308617161ac0f376fe06be4e1ee languageName: node linkType: hard "@types/send@npm:*": - version: 0.17.2 - resolution: "@types/send@npm:0.17.2" + version: 0.17.5 + resolution: "@types/send@npm:0.17.5" dependencies: "@types/mime": "npm:^1" "@types/node": "npm:*" - checksum: 10c0/3fdd87a1b82fae523b2609f2acef25705b40899fed3c5f4dd40bf0dc91ad6a2c0a2b6c1494d1584525fe6e88bea271fcdb9775b3996ddc7f16d52261eea73432 + checksum: 10c0/a86c9b89bb0976ff58c1cdd56360ea98528f4dbb18a5c2287bb8af04815513a576a42b4e0e1e7c4d14f7d6ea54733f6ef935ebff8c65e86d9c222881a71e1f15 languageName: node linkType: hard @@ -4003,6 +5529,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.2.0": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: 10c0/6f7bfe1b55601cfc3ae713fc74a03341f3834253b8b91cb2add926d5949e4a63f7e666f59c2a6e40a883a5f9e2f3e3af10f9d3aed9b60fced0bda87659e58d8d + languageName: node + linkType: hard + "@types/sinonjs__fake-timers@npm:8.1.1": version: 8.1.1 resolution: "@types/sinonjs__fake-timers@npm:8.1.1" @@ -4017,7 +5550,14 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.3": +"@types/stack-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "@types/stack-utils@npm:1.0.1" + checksum: 10c0/4c4a8c48ba556bbe5fad2232cd9598b7f5f3e110451a3ad5cdf7e42204abf3d1abd30a9e6679d576e8e901e1f6b38e744af1f75f384e697c89bee53e5443b8c9 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0, @types/stack-utils@npm:^2.0.3": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c @@ -4025,9 +5565,9 @@ __metadata: linkType: hard "@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: 10c0/38d01fc79a9a87166253b8c548bb401599424c57a818bea1b47a68be6dcd37fc3bff381f978354e00221f284937d5066bb92d58bf79952f9d21deb934e8ec9a7 + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: 10c0/68c6921721a3dcb40451543db2174a145ef915bc8bcbe7ad4e59194a0238e776e782b896c7a59f4b93ac6acefca9161fccb31d1ce3b3445cb6faa467297fb473 languageName: node linkType: hard @@ -4039,9 +5579,9 @@ __metadata: linkType: hard "@types/ua-parser-js@npm:^0.7.36": - version: 0.7.37 - resolution: "@types/ua-parser-js@npm:0.7.37" - checksum: 10c0/cf7cdf3db469816a9b88ad3a12bf44b51f7b0dca550e1513dc674e4643d2c78ce7f080b9349b168d678c21b428ea98d86f877a23898656d340350d7bcf941109 + version: 0.7.39 + resolution: "@types/ua-parser-js@npm:0.7.39" + checksum: 10c0/fea522f42dfc2854d9c93144a13c3db3bbe1c791458451db06d46bec7e1dbbe945d1542e02bb38378e39a04bdb7810b43e2ead26f9e6c250832e187312522708 languageName: node linkType: hard @@ -4060,9 +5600,9 @@ __metadata: linkType: hard "@types/validator@npm:^13.7.17": - version: 13.7.17 - resolution: "@types/validator@npm:13.7.17" - checksum: 10c0/46ec9b8bc11d91a575aead891a9c1d2f23bc28369449cb62415d663262d1d0e96debe75ceac626102a17a0a7a899330626ec36c8d4e84d337c705daed314fed5 + version: 13.15.2 + resolution: "@types/validator@npm:13.15.2" + checksum: 10c0/2c7ce5b745e2c856d0ecd193469cf0edd5081b17208dfab4f03dd5801b8893dcf4cbcfcb662c2b6a42032940effd33e16a56a7eba9e2776b1804111118e320dc languageName: node linkType: hard @@ -4074,13 +5614,40 @@ __metadata: linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: 10c0/cb89f3bb2e8002f1479a65a934e825be4cc18c50b350bbc656405d41cf90b8a299b105e7da497d7eb1aa460472a07d1e5a389f3af0862f1d1252279cfcdd017c + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^13.0.0": + version: 13.0.12 + resolution: "@types/yargs@npm:13.0.12" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/81fdac6832d69f2f2a33bb3d77887f571677d5a9ccfd5a171ff3e76252a6c6a9773850a0df6ba9ed0328433a36596488ec4e2ce5d9bc49d713a59bbfef8e12a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^15.0.0": + version: 15.0.19 + resolution: "@types/yargs@npm:15.0.19" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/9fe9b8645304a628006cbba2d1990fb015e2727274d0e3853f321a379a1242d1da2c15d2f56cff0d4313ae94f0383ccf834c3bded9fb3589608aefb3432fcf00 + languageName: node + linkType: hard + +"@types/yargs@npm:^16.0.0": + version: 16.0.9 + resolution: "@types/yargs@npm:16.0.9" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/be24bd9a56c97ddb2964c1c18f5b9fe8271a50e100dc6945989901aae58f7ce6fb8f3a591c749a518401b6301358dbd1997e83c36138a297094feae7f9ac8211 languageName: node linkType: hard -"@types/yargs@npm:^17.0.33": +"@types/yargs@npm:^17.0.33, @types/yargs@npm:^17.0.8": version: 17.0.33 resolution: "@types/yargs@npm:17.0.33" dependencies: @@ -4140,16 +5707,16 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/project-service@npm:8.35.0" +"@typescript-eslint/project-service@npm:8.38.0": + version: 8.38.0 + resolution: "@typescript-eslint/project-service@npm:8.38.0" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.35.0" - "@typescript-eslint/types": "npm:^8.35.0" + "@typescript-eslint/tsconfig-utils": "npm:^8.38.0" + "@typescript-eslint/types": "npm:^8.38.0" debug: "npm:^4.3.4" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/c2d6d44b6b2ff3ecabec8ade824163196799060ac457661eb94049487d770ce68d128b33a2f24090adf1ebcb66ff6c9a05fc6659349b9a0784a5a080ecf8ff81 + checksum: 10c0/87d2f55521e289bbcdc666b1f4587ee2d43039cee927310b05abaa534b528dfb1b5565c1545bb4996d7fbdf9d5a3b0aa0e6c93a8f1289e3fcfd60d246364a884 languageName: node linkType: hard @@ -4173,22 +5740,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/scope-manager@npm:8.35.0" +"@typescript-eslint/scope-manager@npm:8.38.0": + version: 8.38.0 + resolution: "@typescript-eslint/scope-manager@npm:8.38.0" dependencies: - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/visitor-keys": "npm:8.35.0" - checksum: 10c0/a27cf27a1852bb0d6ea08f475fcc79557f1977be96ef563d92127e8011e4065566441c32c40eb7a530111ffd3a8489919da7f8a2b7466a610cfc9c07670a9601 + "@typescript-eslint/types": "npm:8.38.0" + "@typescript-eslint/visitor-keys": "npm:8.38.0" + checksum: 10c0/ceaf489ea1f005afb187932a7ee363dfe1e0f7cc3db921283991e20e4c756411a5e25afbec72edd2095d6a4384f73591f4c750cf65b5eaa650c90f64ef9fe809 languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.35.0, @typescript-eslint/tsconfig-utils@npm:^8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.35.0" +"@typescript-eslint/tsconfig-utils@npm:8.38.0, @typescript-eslint/tsconfig-utils@npm:^8.38.0": + version: 8.38.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.38.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/baa18e7137ba72f7d138f50d1168e8f334198a36499f954821e2369027e5b3d53ca93c354943e7782ba5caab604b050af10f353ccca34fbc0b23c48d6174832f + checksum: 10c0/1a90da16bf1f7cfbd0303640a8ead64a0080f2b1d5969994bdac3b80abfa1177f0c6fbf61250bae082e72cf5014308f2f5cc98edd6510202f13420a7ffd07a84 languageName: node linkType: hard @@ -4223,17 +5790,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.35.0, @typescript-eslint/types@npm:^8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/types@npm:8.35.0" - checksum: 10c0/a2711a932680805e83252b5d7c55ac30437bdc4d40c444606cf6ccb6ba23a682da015ec03c64635e77bf733f84d9bb76810bf4f7177fd3a660db8a2c8a05e845 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:^8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/types@npm:8.34.1" - checksum: 10c0/db1b3dce6a70b28ddb13c76fbb5983240d9395656df5f7cbd99bfd9905e39c0dab2132870f01dbc406b48739c437f7d344a879a824cedaba81b91a53110dc23a +"@typescript-eslint/types@npm:8.38.0, @typescript-eslint/types@npm:^8.34.1, @typescript-eslint/types@npm:^8.38.0": + version: 8.38.0 + resolution: "@typescript-eslint/types@npm:8.38.0" + checksum: 10c0/f0ac0060c98c0f3d1871f107177b6ae25a0f1846ca8bd8cfc7e1f1dd0ddce293cd8ac4a5764d6a767de3503d5d01defcd68c758cb7ba6de52f82b209a918d0d2 languageName: node linkType: hard @@ -4255,7 +5815,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.18.0, @typescript-eslint/typescript-estree@npm:^7.6.0": +"@typescript-eslint/typescript-estree@npm:7.18.0": version: 7.18.0 resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" dependencies: @@ -4274,14 +5834,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.35.0" +"@typescript-eslint/typescript-estree@npm:8.38.0, @typescript-eslint/typescript-estree@npm:^8.23.0": + version: 8.38.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.38.0" dependencies: - "@typescript-eslint/project-service": "npm:8.35.0" - "@typescript-eslint/tsconfig-utils": "npm:8.35.0" - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/visitor-keys": "npm:8.35.0" + "@typescript-eslint/project-service": "npm:8.38.0" + "@typescript-eslint/tsconfig-utils": "npm:8.38.0" + "@typescript-eslint/types": "npm:8.38.0" + "@typescript-eslint/visitor-keys": "npm:8.38.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -4290,7 +5850,7 @@ __metadata: ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/7e94f6a92efc5832289e8bfd0b61209aa501224c935359253c29aeef8e0b981b370ee2a43e2909991c3c3cf709fcccb6380474e0e9a863e8f89e2fbd213aed59 + checksum: 10c0/00a00f6549877f4ae5c2847fa5ac52bf42cbd59a87533856c359e2746e448ed150b27a6137c92fd50c06e6a4b39e386d6b738fac97d80d05596e81ce55933230 languageName: node linkType: hard @@ -4313,17 +5873,17 @@ __metadata: linkType: hard "@typescript-eslint/utils@npm:^8.32.1": - version: 8.35.0 - resolution: "@typescript-eslint/utils@npm:8.35.0" + version: 8.38.0 + resolution: "@typescript-eslint/utils@npm:8.38.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.35.0" - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/typescript-estree": "npm:8.35.0" + "@typescript-eslint/scope-manager": "npm:8.38.0" + "@typescript-eslint/types": "npm:8.38.0" + "@typescript-eslint/typescript-estree": "npm:8.38.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/e3317df7875305bee16edd573e4bfdafc099f26f9c284d8adb351333683aacd5b668320870653dff7ec7e0da1982bbf89dc06197bc193a3be65362f21452dbea + checksum: 10c0/e97a45bf44f315f9ed8c2988429e18c88e3369c9ee3227ee86446d2d49f7325abebbbc9ce801e178f676baa986d3e1fd4b5391f1640c6eb8944c123423ae43bb languageName: node linkType: hard @@ -4347,161 +5907,154 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.35.0" +"@typescript-eslint/visitor-keys@npm:8.38.0": + version: 8.38.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.38.0" dependencies: - "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.38.0" eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/df18ca9b6931cb58f5dc404fcc94f9e0cc1c22f3053c7013ab588bb8ccccd3d58a70c577c01267845d57fa124a8cf8371260d284dad97505c56b2abcf70a3dce - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + checksum: 10c0/071a756e383f41a6c9e51d78c8c64bd41cd5af68b0faef5fbaec4fa5dbd65ec9e4cd610c2e2cdbe9e2facc362995f202850622b78e821609a277b5b601a1d4ec languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.3.0": +"@ungap/structured-clone@npm:^1.2.0, @ungap/structured-clone@npm:^1.3.0": version: 1.3.0 resolution: "@ungap/structured-clone@npm:1.3.0" checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a languageName: node linkType: hard -"@unrs/resolver-binding-android-arm-eabi@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.9.1" +"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-android-arm64@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-android-arm64@npm:1.9.1" +"@unrs/resolver-binding-android-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-arm64@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.9.1" +"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-x64@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.9.1" +"@unrs/resolver-binding-darwin-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-freebsd-x64@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.9.1" +"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.1" +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.1" +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.1" +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-musl@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.9.1" +"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.1" +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.1" +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.1" +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.1" +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.9.1" +"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-musl@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.9.1" +"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-wasm32-wasi@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.9.1" +"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" dependencies: "@napi-rs/wasm-runtime": "npm:^0.2.11" conditions: cpu=wasm32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.1" +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.1" +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-x64-msvc@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.9.1" +"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4522,60 +6075,74 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-core@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-core@npm:3.5.13" +"@vue/compiler-core@npm:3.5.18": + version: 3.5.18 + resolution: "@vue/compiler-core@npm:3.5.18" dependencies: - "@babel/parser": "npm:^7.25.3" - "@vue/shared": "npm:3.5.13" + "@babel/parser": "npm:^7.28.0" + "@vue/shared": "npm:3.5.18" entities: "npm:^4.5.0" estree-walker: "npm:^2.0.2" - source-map-js: "npm:^1.2.0" - checksum: 10c0/b89f3e3ca92c3177ae449ada1480df13d99b5b3b2cdcf3202fd37dc30f294a1db1f473209f8bae9233e2d338632219d39b2bfa6941d158cea55255e4b0b30f90 + source-map-js: "npm:^1.2.1" + checksum: 10c0/943cd3736e981b451aa85ccc08d446844e1a2dbf193e630cef708995110f12c3b8c8e3b2c4581ee2e3ecf7ea2388574e2d5f68b4f11bcd01cc5bab6c9177b448 languageName: node linkType: hard -"@vue/compiler-dom@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-dom@npm:3.5.13" +"@vue/compiler-dom@npm:3.5.18": + version: 3.5.18 + resolution: "@vue/compiler-dom@npm:3.5.18" dependencies: - "@vue/compiler-core": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - checksum: 10c0/8f424a71883c9ef4abdd125d2be8d12dd8cf94ba56089245c88734b1f87c65e10597816070ba2ea0a297a2f66dc579f39275a9a53ef5664c143a12409612cd72 + "@vue/compiler-core": "npm:3.5.18" + "@vue/shared": "npm:3.5.18" + checksum: 10c0/f7f3dec1fea33e8b46b34d71fa24a8608dba4bdab786d4114747ed0897816760450617951f7ea3f59380e5ecfaeb84d94dd1bfabed88792cc03476da91e6f7fd languageName: node linkType: hard -"@vue/compiler-sfc@npm:^3.5.12": - version: 3.5.13 - resolution: "@vue/compiler-sfc@npm:3.5.13" +"@vue/compiler-sfc@npm:^3.5.13": + version: 3.5.18 + resolution: "@vue/compiler-sfc@npm:3.5.18" dependencies: - "@babel/parser": "npm:^7.25.3" - "@vue/compiler-core": "npm:3.5.13" - "@vue/compiler-dom": "npm:3.5.13" - "@vue/compiler-ssr": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" + "@babel/parser": "npm:^7.28.0" + "@vue/compiler-core": "npm:3.5.18" + "@vue/compiler-dom": "npm:3.5.18" + "@vue/compiler-ssr": "npm:3.5.18" + "@vue/shared": "npm:3.5.18" estree-walker: "npm:^2.0.2" - magic-string: "npm:^0.30.11" - postcss: "npm:^8.4.48" - source-map-js: "npm:^1.2.0" - checksum: 10c0/5fd57895ce2801e480c08f31f91f0d1746ed08a9c1973895fd7269615f5bcdf75497978fb358bda738938d9844dea2404064c53b2cdda991014225297acce19e + magic-string: "npm:^0.30.17" + postcss: "npm:^8.5.6" + source-map-js: "npm:^1.2.1" + checksum: 10c0/24a6fd16156b7557c1737cf950c9718975d35c9e8f8f9b53a503558b76ff35b176f9e3ca606930f7535b334c8b790674c0dac94b39cbb86002542eca79aebaf8 languageName: node linkType: hard -"@vue/compiler-ssr@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-ssr@npm:3.5.13" +"@vue/compiler-ssr@npm:3.5.18": + version: 3.5.18 + resolution: "@vue/compiler-ssr@npm:3.5.18" dependencies: - "@vue/compiler-dom": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - checksum: 10c0/67621337b12fc414fcf9f16578961850724713a9fb64501136e432c2dfe95de99932c46fa24be9820f8bcdf8e7281f815f585b519a95ea979753bafd637dde1b + "@vue/compiler-dom": "npm:3.5.18" + "@vue/shared": "npm:3.5.18" + checksum: 10c0/50fcddb83611545f58c9f9518e52484d0462b59177af9fa362fb5e9cf4bd6998e737b428bf46c3dd69ed2d097dccf2333b8bb0739084b2db2434e9ef1e03f488 + languageName: node + linkType: hard + +"@vue/shared@npm:3.5.18": + version: 3.5.18 + resolution: "@vue/shared@npm:3.5.18" + checksum: 10c0/9764e31bfcd13a2f5369554d0abbfd06e391d72b0065b4cbd36be94ffdd4d845b2d38a37d56b35714c7a2100c512c9b74de2fa1a19ee2e920ecf098d9035518d languageName: node linkType: hard -"@vue/shared@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/shared@npm:3.5.13" - checksum: 10c0/2c940ef907116f1c2583ca1d7733984e5705983ab07054c4e72f1d95eb0f7bdf4d01efbdaee1776c2008f79595963f44e98fced057f5957d86d57b70028f5025 +"@web3-storage/multipart-parser@npm:^1.0.0": + version: 1.0.0 + resolution: "@web3-storage/multipart-parser@npm:1.0.0" + checksum: 10c0/1cdf5bbb5a40d151a4c6ebf00e7e2f1075bd91d08d5c7259e683a4b5d31e697ad594024644dcf547f297fdef39d39b75a7edb2b234720f80e8e860284022aa96 + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:^0.8.8": + version: 0.8.10 + resolution: "@xmldom/xmldom@npm:0.8.10" + checksum: 10c0/c7647c442502720182b0d65b17d45d2d95317c1c8c497626fe524bda79b4fb768a9aa4fae2da919f308e7abcff7d67c058b102a9d641097e9a57f0b80187851f languageName: node linkType: hard @@ -4607,6 +6174,13 @@ __metadata: languageName: node linkType: hard +"@zxing/text-encoding@npm:0.9.0": + version: 0.9.0 + resolution: "@zxing/text-encoding@npm:0.9.0" + checksum: 10c0/d15bff181d46c2ab709e7242801a8d40408aa8c19b44462e5f60e766bf59105b44957914ab6baab60d10d466a5e965f21fe890c67dfdb7d5c7f940df457b4d0d + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -4633,6 +6207,32 @@ __metadata: languageName: node linkType: hard +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + +"absolute-path@npm:^0.0.0": + version: 0.0.0 + resolution: "absolute-path@npm:0.0.0" + checksum: 10c0/5ef1a7ef4968c5f9c953c9b5f185154f6b968205e48b2e1b07633ef5c71ccafcb9f50c8ababd5b3ef2a16e006aab0282a45869f170723b594b3b2bf8b6a20660 + languageName: node + linkType: hard + +"accepts@npm:^1.3.7, accepts@npm:~1.3.7": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + "accepts@npm:^2.0.0": version: 2.0.0 resolution: "accepts@npm:2.0.0" @@ -4662,22 +6262,15 @@ __metadata: linkType: hard "acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 10c0/dbe92f5b2452c93e960c5594e666dd1fae141b965ff2cb4a1e1d0381e3e4db4274c5ce4ffa3d681a86ca2a8d4e29d5efc0670a08e23fd2800051ea387df56ca2 - languageName: node - linkType: hard - -"acorn@npm:^8.14.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" - bin: - acorn: bin/acorn - checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 languageName: node linkType: hard -"acorn@npm:^8.15.0": +"acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.15.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": version: 8.15.0 resolution: "acorn@npm:8.15.0" bin: @@ -4686,15 +6279,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.8.2": - version: 8.14.1 - resolution: "acorn@npm:8.14.1" - bin: - acorn: bin/acorn - checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 - languageName: node - linkType: hard - "add-stream@npm:^1.0.0": version: 1.0.0 resolution: "add-stream@npm:1.0.0" @@ -4702,19 +6286,10 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.2": - version: 7.1.3 - resolution: "agent-base@npm:7.1.3" - checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe languageName: node linkType: hard @@ -4740,10 +6315,42 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 +"anser@npm:^1.4.9": + version: 1.4.10 + resolution: "anser@npm:1.4.10" + checksum: 10c0/ab251c96f6b9b8858e346137b75968ef3d287e10f358cd3981666949093e587defb5f7059a05a929eb44e1b3775bae346a55ab952e74049355e70f81b8b1ef53 + languageName: node + linkType: hard + +"ansi-colors@npm:^1.0.1": + version: 1.1.0 + resolution: "ansi-colors@npm:1.1.0" + dependencies: + ansi-wrap: "npm:^0.1.0" + checksum: 10c0/c5f3ae4710ed564ca173cd2cf3e85a3bf8dabb7b20688f84299caaf0a4af01e6b7825b32739336c9437492058d3b07d90ef42e3e6223fbba3dc9d52f63e29056 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-cyan@npm:^0.1.1": + version: 0.1.1 + resolution: "ansi-cyan@npm:0.1.1" + dependencies: + ansi-wrap: "npm:0.1.0" + checksum: 10c0/194a33c4234a9b5150efa22f66d9820bcb44a0aa394767d2203bb49751064a52d5547ff878ec7cfaaa02543490172b405914e0a8647954be29f05474ad0c452f + languageName: node + linkType: hard + +"ansi-escapes@npm:^3.0.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f languageName: node linkType: hard @@ -4765,7 +6372,50 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^5.0.1": +"ansi-fragments@npm:^0.2.1": + version: 0.2.1 + resolution: "ansi-fragments@npm:0.2.1" + dependencies: + colorette: "npm:^1.0.7" + slice-ansi: "npm:^2.0.0" + strip-ansi: "npm:^5.0.0" + checksum: 10c0/44e97e558ca2f0b2ca895bfd6ebebeb2e77d674d2e4198ac2d3a05b690193fa35fd185db6e16b92dd0ee854299ea8b4387a99e4155ea62bc8ad4c42154542fd4 + languageName: node + linkType: hard + +"ansi-gray@npm:^0.1.1": + version: 0.1.1 + resolution: "ansi-gray@npm:0.1.1" + dependencies: + ansi-wrap: "npm:0.1.0" + checksum: 10c0/f15a0c069f81a343afe2af5e111624603ce9e6059996d44a0338d7e44b88171a05dc975debdf4df01a86e62395027ae0615499a1e4adfefbebd417061b506079 + languageName: node + linkType: hard + +"ansi-red@npm:^0.1.1": + version: 0.1.1 + resolution: "ansi-red@npm:0.1.1" + dependencies: + ansi-wrap: "npm:0.1.0" + checksum: 10c0/e7f1ae80770d190d5aa0f2169cebd5caae0fa1e5cf20945d843d4bbb98428194e2fa062e285eb8807820612d30453573e89eb2c5c6a4aba257b725d37852bb11 + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 + languageName: node + linkType: hard + +"ansi-regex@npm:^4.0.0, ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: 10c0/d36d34234d077e8770169d980fed7b2f3724bfa2a01da150ccd75ef9707c80e883d27cdf7a0eac2f145ac1d10a785a8a855cffd05b85f778629a0db62e7033da + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 @@ -4773,13 +6423,13 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc languageName: node linkType: hard -"ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -4811,6 +6461,13 @@ __metadata: languageName: node linkType: hard +"ansi-wrap@npm:0.1.0, ansi-wrap@npm:^0.1.0": + version: 0.1.0 + resolution: "ansi-wrap@npm:0.1.0" + checksum: 10c0/1e0a53ae0d1a3fc5ceeb5d1868cb5b0a61543a1ff11f3efc51bab7923cc01fe8180db1f9250ce5003b425c53f568bcf3c2dea9d90b5c1cd0a1dae13f76c601dd + languageName: node + linkType: hard + "any-promise@npm:^1.1.0": version: 1.3.0 resolution: "any-promise@npm:1.3.0" @@ -4818,7 +6475,17 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": +"anymatch@npm:^2.0.0": + version: 2.0.0 + resolution: "anymatch@npm:2.0.0" + dependencies: + micromatch: "npm:^3.1.4" + normalize-path: "npm:^2.1.1" + checksum: 10c0/a0d745e52f0233048724b9c9d7b1d8a650f7a50151a0f1d2cce1857b09fd096052d334f8c570cc88596edef8249ae778f767db94025cd00f81e154a37bb7e34e + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -4835,6 +6502,13 @@ __metadata: languageName: node linkType: hard +"appdirsjs@npm:^1.2.4": + version: 1.2.7 + resolution: "appdirsjs@npm:1.2.7" + checksum: 10c0/79dd8d7a764cdde2b47efc4383e054814be917ba0cd661ee324bdf3fd11542834548316faea31344f96a7ebc898b5f89c11d1418f825a1d40c396bf1ecb0902b + languageName: node + linkType: hard + "aproba@npm:2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -4886,17 +6560,45 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "array-buffer-byte-length@npm:1.0.1" +"arr-diff@npm:^1.0.1": + version: 1.1.0 + resolution: "arr-diff@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.5" - is-array-buffer: "npm:^3.0.4" - checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + arr-flatten: "npm:^1.0.1" + array-slice: "npm:^0.2.3" + checksum: 10c0/72e93f94b39b0edc792ffd0c09658ddbecc1ec19ac50411408f720a6aab833cbf1df3947a7c9d5a6aea5fa4861ea508b6a04419a95b85bf9b256c8d65cc64388 + languageName: node + linkType: hard + +"arr-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "arr-diff@npm:4.0.0" + checksum: 10c0/67b80067137f70c89953b95f5c6279ad379c3ee39f7143578e13bd51580a40066ee2a55da066e22d498dce10f68c2d70056d7823f972fab99dfbf4c78d0bc0f7 + languageName: node + linkType: hard + +"arr-flatten@npm:^1.0.1, arr-flatten@npm:^1.1.0": + version: 1.1.0 + resolution: "arr-flatten@npm:1.1.0" + checksum: 10c0/bef53be02ed3bc58f202b3861a5b1eb6e1ae4fecf39c3ad4d15b1e0433f941077d16e019a33312d820844b0661777322acbb7d0c447b04d9bdf7d6f9c532548a + languageName: node + linkType: hard + +"arr-union@npm:^2.0.1": + version: 2.1.0 + resolution: "arr-union@npm:2.1.0" + checksum: 10c0/27d270a77ebbccf1fb7b8544ebdcca3fcf1bcf10b3d01bbef127466b1bd1c877ead79f607f3404de21880e675582b453f7fefbe48b6818516be3f075f46c5172 + languageName: node + linkType: hard + +"arr-union@npm:^3.1.0": + version: 3.1.0 + resolution: "arr-union@npm:3.1.0" + checksum: 10c0/7d5aa05894e54aa93c77c5726c1dd5d8e8d3afe4f77983c0aa8a14a8a5cbe8b18f0cf4ecaa4ac8c908ef5f744d2cbbdaa83fd6e96724d15fea56cfa7f5efdd51 languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.2": +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": version: 1.0.2 resolution: "array-buffer-byte-length@npm:1.0.2" dependencies: @@ -4913,6 +6615,13 @@ __metadata: languageName: node linkType: hard +"array-filter@npm:~0.0.0": + version: 0.0.1 + resolution: "array-filter@npm:0.0.1" + checksum: 10c0/fa7319954cbc81af9ce371250c39028d335c817c8f95410dc76b6f173230f29fd673849a8a7fd7124e58b37d0ddd7152c1c625adf7bba439a5bfa36b7cf77c8c + languageName: node + linkType: hard + "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" @@ -4920,7 +6629,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.5, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": version: 3.1.9 resolution: "array-includes@npm:3.1.9" dependencies: @@ -4936,6 +6645,27 @@ __metadata: languageName: node linkType: hard +"array-map@npm:~0.0.0": + version: 0.0.1 + resolution: "array-map@npm:0.0.1" + checksum: 10c0/fa721087c3b3156b26883163a38fb90f837ca029957a436d7d97339a3e9e23c93c27c477069050ca008e1ba809c47a78b1ec7de0c73519c8bd00aba594831dfc + languageName: node + linkType: hard + +"array-reduce@npm:~0.0.0": + version: 0.0.0 + resolution: "array-reduce@npm:0.0.0" + checksum: 10c0/7c15d6f5de439525afb81444f9e9fd41927a7277a66e2cc848628182060762f23a861d99bc7138300464ce695b09d337df809fd93c686c1482ed88c5137c5034 + languageName: node + linkType: hard + +"array-slice@npm:^0.2.3": + version: 0.2.3 + resolution: "array-slice@npm:0.2.3" + checksum: 10c0/aba296c769a8a6f772e26261510d33ae0be231e0f3acb2eb7da5c65becf0769e0f339d722739af49fea429941c19d23ce85a4ba2fc475df645a4d4d1289d65c3 + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -4943,6 +6673,13 @@ __metadata: languageName: node linkType: hard +"array-unique@npm:^0.3.2": + version: 0.3.2 + resolution: "array-unique@npm:0.3.2" + checksum: 10c0/dbf4462cdba8a4b85577be07705210b3d35be4b765822a3f52962d907186617638ce15e0603a4fefdcf82f4cbbc9d433f8cbbd6855148a68872fa041b6474121 + languageName: node + linkType: hard + "array.prototype.findlast@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" @@ -4972,7 +6709,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.3.3": +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.3": version: 1.3.3 resolution: "array.prototype.flat@npm:1.3.3" dependencies: @@ -5009,22 +6746,6 @@ __metadata: languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.3": - version: 1.0.3 - resolution: "arraybuffer.prototype.slice@npm:1.0.3" - dependencies: - array-buffer-byte-length: "npm:^1.0.1" - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.3" - is-array-buffer: "npm:^3.0.4" - is-shared-array-buffer: "npm:^1.0.2" - checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 - languageName: node - linkType: hard - "arraybuffer.prototype.slice@npm:^1.0.4": version: 1.0.4 resolution: "arraybuffer.prototype.slice@npm:1.0.4" @@ -5054,6 +6775,13 @@ __metadata: languageName: node linkType: hard +"asap@npm:~2.0.3, asap@npm:~2.0.6": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d + languageName: node + linkType: hard + "asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" @@ -5070,10 +6798,33 @@ __metadata: languageName: node linkType: hard -"ast-module-types@npm:^6.0.0": - version: 6.0.0 - resolution: "ast-module-types@npm:6.0.0" - checksum: 10c0/a8c242293c88448ecef3c5f52718a99e19993f55d76ad60a3189ec5d7db282e4c318a04cf0a1693ba57950e6b43384fec3205663510bd6d5602357a7d0aaf3a8 +"assign-symbols@npm:^1.0.0": + version: 1.0.0 + resolution: "assign-symbols@npm:1.0.0" + checksum: 10c0/29a654b8a6da6889a190d0d0efef4b1bfb5948fa06cbc245054aef05139f889f2f7c75b989917e3fde853fc4093b88048e4de8578a73a76f113d41bfd66e5775 + languageName: node + linkType: hard + +"ast-module-types@npm:^6.0.1": + version: 6.0.1 + resolution: "ast-module-types@npm:6.0.1" + checksum: 10c0/b835a3518accd480c8102fe18cc782bf8f38c7844764e8c27c6494203688c788d6fc90f27dd3b7b3941ff3f2cc1a9269cd7471df55bd467f86af56093808d5a8 + languageName: node + linkType: hard + +"ast-types@npm:0.15.2": + version: 0.15.2 + resolution: "ast-types@npm:0.15.2" + dependencies: + tslib: "npm:^2.0.1" + checksum: 10c0/5b26e3656e9e8d1db8c8d14971d0cb88ca0138aacce72171cb4cd4555fc8dc53c07e821c568e57fe147366931708fefd25cb9d7e880d42ce9cb569947844c962 + languageName: node + linkType: hard + +"astral-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "astral-regex@npm:1.0.0" + checksum: 10c0/ca460207a19d84c65671e1a85940101522d42f31a450cdb8f93b3464e6daeaf4b58a362826a6c11c57e6cd1976403d197abb0447cfc2087993a29b35c6d63b63 languageName: node linkType: hard @@ -5084,7 +6835,30 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.0, async@npm:^3.2.3": +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 10c0/0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 + languageName: node + linkType: hard + +"async@npm:^2.4.0": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: "npm:^4.17.14" + checksum: 10c0/0ebb3273ef96513389520adc88e0d3c45e523d03653cc9b66f5c46f4239444294899bfd13d2b569e7dbfde7da2235c35cf5fd3ece9524f935d41bbe4efccdad0 + languageName: node + linkType: hard + +"async@npm:^3.2.0, async@npm:^3.2.2, async@npm:^3.2.3, async@npm:^3.2.6": version: 3.2.6 resolution: "async@npm:3.2.6" checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 @@ -5105,7 +6879,16 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7": +"atob@npm:^2.1.2": + version: 2.1.2 + resolution: "atob@npm:2.1.2" + bin: + atob: bin/atob.js + checksum: 10c0/ada635b519dc0c576bb0b3ca63a73b50eefacf390abb3f062558342a8d68f2db91d0c8db54ce81b0d89de3b0f000de71f3ae7d761fd7d8cc624278fe443d6c7e + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" dependencies: @@ -5128,7 +6911,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.11.0": +"axios@npm:^1.11.0, axios@npm:^1.8.3": version: 1.11.0 resolution: "axios@npm:1.11.0" dependencies: @@ -5139,14 +6922,12 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.7.4": - version: 1.8.2 - resolution: "axios@npm:1.8.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/d8c2969e4642dc6d39555ac58effe06c051ba7aac2bd40cad7a9011c019fb2f16ee011c5a6906cb25b8a4f87258c359314eb981f852e60ad445ecaeb793c7aa2 +"babel-core@npm:^7.0.0-bridge.0": + version: 7.0.0-bridge.0 + resolution: "babel-core@npm:7.0.0-bridge.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f57576e30267be4607d163b7288031d332cf9200ea35efe9fb33c97f834e304376774c28c1f9d6928d6733fcde7041e4010f1248a0519e7730c590d4b07b9608 languageName: node linkType: hard @@ -5191,9 +6972,61 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs2@npm:^0.4.14": + version: 0.4.14 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" + dependencies: + "@babel/compat-data": "npm:^7.27.7" + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.13.0": + version: 0.13.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.5": + version: 0.6.5 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d + languageName: node + linkType: hard + +"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": + version: 7.0.0-beta.0 + resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" + checksum: 10c0/67e3d6a706637097526b2d3046d3124d3efd3aac28b47af940c2f8df01b8d7ffeb4cdf5648f3b5eac3f098f5b61c4845e306f34301c869e5e14db6ae8b77f699 + languageName: node + linkType: hard + +"babel-plugin-transform-flow-enums@npm:^0.0.2": + version: 0.0.2 + resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" + dependencies: + "@babel/plugin-syntax-flow": "npm:^7.12.1" + checksum: 10c0/aa9d022d8d4be0e7c4f1ff7e5308fe7e0ff4d6f9099449913e3a11c1e81916623a8f36432da180a9aa3f53ea534dca4401fe33d6528f043f40357cfa790ee778 + languageName: node + linkType: hard + "babel-preset-current-node-syntax@npm:^1.1.0": - version: 1.1.0 - resolution: "babel-preset-current-node-syntax@npm:1.1.0" + version: 1.2.0 + resolution: "babel-preset-current-node-syntax@npm:1.2.0" dependencies: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-bigint": "npm:^7.8.3" @@ -5210,9 +7043,46 @@ __metadata: "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0 || ^8.0.0-0 + checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 + languageName: node + linkType: hard + +"babel-preset-fbjs@npm:^3.2.0, babel-preset-fbjs@npm:^3.3.0, babel-preset-fbjs@npm:^3.4.0": + version: 3.4.0 + resolution: "babel-preset-fbjs@npm:3.4.0" + dependencies: + "@babel/plugin-proposal-class-properties": "npm:^7.0.0" + "@babel/plugin-proposal-object-rest-spread": "npm:^7.0.0" + "@babel/plugin-syntax-class-properties": "npm:^7.0.0" + "@babel/plugin-syntax-flow": "npm:^7.0.0" + "@babel/plugin-syntax-jsx": "npm:^7.0.0" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.0.0" + "@babel/plugin-transform-arrow-functions": "npm:^7.0.0" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.0.0" + "@babel/plugin-transform-block-scoping": "npm:^7.0.0" + "@babel/plugin-transform-classes": "npm:^7.0.0" + "@babel/plugin-transform-computed-properties": "npm:^7.0.0" + "@babel/plugin-transform-destructuring": "npm:^7.0.0" + "@babel/plugin-transform-flow-strip-types": "npm:^7.0.0" + "@babel/plugin-transform-for-of": "npm:^7.0.0" + "@babel/plugin-transform-function-name": "npm:^7.0.0" + "@babel/plugin-transform-literals": "npm:^7.0.0" + "@babel/plugin-transform-member-expression-literals": "npm:^7.0.0" + "@babel/plugin-transform-modules-commonjs": "npm:^7.0.0" + "@babel/plugin-transform-object-super": "npm:^7.0.0" + "@babel/plugin-transform-parameters": "npm:^7.0.0" + "@babel/plugin-transform-property-literals": "npm:^7.0.0" + "@babel/plugin-transform-react-display-name": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx": "npm:^7.0.0" + "@babel/plugin-transform-shorthand-properties": "npm:^7.0.0" + "@babel/plugin-transform-spread": "npm:^7.0.0" + "@babel/plugin-transform-template-literals": "npm:^7.0.0" + babel-plugin-syntax-trailing-function-commas: "npm:^7.0.0-beta.0" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/0b838d4412e3322cb4436f246e24e9c00bebcedfd8f00a2f51489db683bd35406bbd55a700759c28d26959c6e03f84dd6a1426f576f440267c1d7a73c5717281 + checksum: 10c0/2be440c0fd7d1df247417be35644cb89f40a300e7fcdc44878b737ec49b04380eff422e4ebdc7bb5efd5ecfef45b634fc5fe11c3a409a50c9084e81083037902 languageName: node linkType: hard @@ -5235,13 +7105,28 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": +"base64-js@npm:^1.1.2, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf languageName: node linkType: hard +"base@npm:^0.11.1": + version: 0.11.2 + resolution: "base@npm:0.11.2" + dependencies: + cache-base: "npm:^1.0.1" + class-utils: "npm:^0.3.5" + component-emitter: "npm:^1.2.1" + define-property: "npm:^1.0.0" + isobject: "npm:^3.0.1" + mixin-deep: "npm:^1.2.0" + pascalcase: "npm:^0.1.1" + checksum: 10c0/30a2c0675eb52136b05ef496feb41574d9f0bb2d6d677761da579c00a841523fccf07f1dbabec2337b5f5750f428683b8ca60d89e56a1052c4ae1c0cd05de64d + languageName: node + linkType: hard + "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -5269,6 +7154,13 @@ __metadata: languageName: node linkType: hard +"big-integer@npm:1.6.x": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 10c0/9604224b4c2ab3c43c075d92da15863077a9f59e5d4205f4e7e76acd0cd47e8d469ec5e5dba8d9b32aa233951893b29329ca56ac80c20ce094b4a647a66abae0 + languageName: node + linkType: hard + "bin-links@npm:^4.0.4": version: 4.0.4 resolution: "bin-links@npm:4.0.4" @@ -5282,9 +7174,18 @@ __metadata: linkType: hard "binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: 10c0/d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba languageName: node linkType: hard @@ -5346,22 +7247,58 @@ __metadata: languageName: node linkType: hard +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: "npm:2.2.x" + checksum: 10c0/427ec37263ce0e8c68a83f595fc9889a9cbf2e6fda2de18e1f8ef7f0c6ce68c0cdbb7c9c1f3bb3f2d217407af8cffbdf254bf0f71c99f2186175d07752f08a47 + languageName: node + linkType: hard + +"bplist-parser@npm:0.3.2": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: "npm:1.6.x" + checksum: 10c0/4dc307c11d2511a01255e87e370d4ab6f1962b35fdc27605fd4ce9a557a259c2dc9f87822617ddb1f7aa062a71e30ef20d6103329ac7ce235628f637fb0ed763 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + languageName: node + linkType: hard + +"braces@npm:^2.3.1": + version: 2.3.2 + resolution: "braces@npm:2.3.2" + dependencies: + arr-flatten: "npm:^1.1.0" + array-unique: "npm:^0.3.2" + extend-shallow: "npm:^2.0.1" + fill-range: "npm:^4.0.0" + isobject: "npm:^3.0.1" + repeat-element: "npm:^1.1.2" + snapdragon: "npm:^0.8.1" + snapdragon-node: "npm:^2.0.1" + split-string: "npm:^3.0.2" + to-regex: "npm:^3.0.1" + checksum: 10c0/72b27ea3ea2718f061c29e70fd6e17606e37c65f5801abddcf0b0052db1de7d60f3bf92cfc220ab57b44bd0083a5f69f9d03b3461d2816cfe9f9398207acc728 languageName: node linkType: hard @@ -5374,17 +7311,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.24.0": - version: 4.24.2 - resolution: "browserslist@npm:4.24.2" +"browserslist@npm:^4.24.0, browserslist@npm:^4.25.1": + version: 4.25.1 + resolution: "browserslist@npm:4.25.1" dependencies: - caniuse-lite: "npm:^1.0.30001669" - electron-to-chromium: "npm:^1.5.41" - node-releases: "npm:^2.0.18" - update-browserslist-db: "npm:^1.1.1" + caniuse-lite: "npm:^1.0.30001726" + electron-to-chromium: "npm:^1.5.173" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" bin: browserslist: cli.js - checksum: 10c0/d747c9fb65ed7b4f1abcae4959405707ed9a7b835639f8a9ba0da2911995a6ab9b0648fd05baf2a4d4e3cf7f9fdbad56d3753f91881e365992c1d49c8d88ff7a + checksum: 10c0/acba5f0bdbd5e72dafae1e6ec79235b7bad305ed104e082ed07c34c38c7cb8ea1bc0f6be1496958c40482e40166084458fc3aee15111f15faa79212ad9081b2a languageName: node linkType: hard @@ -5406,14 +7343,14 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:~0.2.3": +"buffer-crc32@npm:^0.2.13, buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" checksum: 10c0/cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 languageName: node linkType: hard -"buffer-equal-constant-time@npm:1.0.1": +"buffer-equal-constant-time@npm:^1.0.1": version: 1.0.1 resolution: "buffer-equal-constant-time@npm:1.0.1" checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e @@ -5491,6 +7428,23 @@ __metadata: languageName: node linkType: hard +"cache-base@npm:^1.0.1": + version: 1.0.1 + resolution: "cache-base@npm:1.0.1" + dependencies: + collection-visit: "npm:^1.0.0" + component-emitter: "npm:^1.2.1" + get-value: "npm:^2.0.6" + has-value: "npm:^1.0.0" + isobject: "npm:^3.0.1" + set-value: "npm:^2.0.0" + to-object-path: "npm:^0.3.0" + union-value: "npm:^1.0.0" + unset-value: "npm:^1.0.0" + checksum: 10c0/a7142e25c73f767fa520957dcd179b900b86eac63b8cfeaa3b2a35e18c9ca5968aa4e2d2bed7a3e7efd10f13be404344cfab3a4156217e71f9bdb95940bb9c8c + languageName: node + linkType: hard + "cachedir@npm:^2.3.0": version: 2.4.0 resolution: "cachedir@npm:2.4.0" @@ -5498,17 +7452,7 @@ __metadata: languageName: node linkType: hard -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": - version: 1.0.1 - resolution: "call-bind-apply-helpers@npm:1.0.1" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.2": +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": version: 1.0.2 resolution: "call-bind-apply-helpers@npm:1.0.2" dependencies: @@ -5518,20 +7462,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.1" - checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d - languageName: node - linkType: hard - -"call-bind@npm:^1.0.8": +"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": version: 1.0.8 resolution: "call-bind@npm:1.0.8" dependencies: @@ -5543,17 +7474,7 @@ __metadata: languageName: node linkType: hard -"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": - version: 1.0.3 - resolution: "call-bound@npm:1.0.3" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf - languageName: node - linkType: hard - -"call-bound@npm:^1.0.4": +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": version: 1.0.4 resolution: "call-bound@npm:1.0.4" dependencies: @@ -5563,6 +7484,31 @@ __metadata: languageName: node linkType: hard +"caller-callsite@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-callsite@npm:2.0.0" + dependencies: + callsites: "npm:^2.0.0" + checksum: 10c0/a00ca91280e10ee2321de21dda6c168e427df7a63aeaca027ea45e3e466ac5e1a5054199f6547ba1d5a513d3b6b5933457266daaa47f8857fb532a343ee6b5e1 + languageName: node + linkType: hard + +"caller-path@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-path@npm:2.0.0" + dependencies: + caller-callsite: "npm:^2.0.0" + checksum: 10c0/029b5b2c557d831216305c3218e9ff30fa668be31d58dd08088f74c8eabc8362c303e0908b3a93abb25ba10e3a5bfc9cff5eb7fab6ab9cf820e3b160ccb67581 + languageName: node + linkType: hard + +"callsites@npm:^2.0.0": + version: 2.0.0 + resolution: "callsites@npm:2.0.0" + checksum: 10c0/13bff4fee946e6020b37e76284e95e24aa239c9e34ac4f3451e4c5330fca6f2f962e1d1ab69e4da7940e1fce135107a2b2b98c01d62ea33144350fc89dc5494e + languageName: node + linkType: hard + "callsites@npm:^3.0.0, callsites@npm:^3.1.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -5581,24 +7527,33 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 languageName: node linkType: hard -"camelcase@npm:^6.3.0": +"camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001669": - version: 1.0.30001676 - resolution: "caniuse-lite@npm:1.0.30001676" - checksum: 10c0/53d310d76b5282947c99638a65d7534ac28a80aae1920de085a616ec8ad603358fad67cebacfc0452b1efdea12cce24fd37a50a712d074986b4962110e87d82b +"caniuse-lite@npm:^1.0.30001726": + version: 1.0.30001731 + resolution: "caniuse-lite@npm:1.0.30001731" + checksum: 10c0/d8cddf817d5bec8e7c2106affdbf1bfc3923463ca16697c992b2efeb043e6a5d9dcb70cda913bc6acf9112fd66f9e80279316c08e7800359116925066a63fdfa + languageName: node + linkType: hard + +"capture-exit@npm:^2.0.0": + version: 2.0.0 + resolution: "capture-exit@npm:2.0.0" + dependencies: + rsvp: "npm:^4.8.4" + checksum: 10c0/d68df1e15937809501644a49c0267ef323b5b6a0cae5c08bbdceafd718aa08241844798bfdd762cf6756bc2becd83122aabc25b5222192f18093113bec670617 languageName: node linkType: hard @@ -5619,7 +7574,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.4.1": +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -5630,7 +7585,17 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/ee650b0a065b3d7a6fda258e75d3a86fc8e4effa55871da730a9e42ccb035bf5fd203525e5a1ef45ec2582ecc4f65b47eb11357c526b84dd29a14fb162c414d2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -5641,9 +7606,9 @@ __metadata: linkType: hard "chalk@npm:^5.4.1": - version: 5.4.1 - resolution: "chalk@npm:5.4.1" - checksum: 10c0/b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef + version: 5.5.0 + resolution: "chalk@npm:5.5.0" + checksum: 10c0/23063b544f7c2fe57d25ff814807de561f8adfff72e4f0051051eaa606f772586470507ccd38d89166300eeaadb0164acde8bb8a0716a0f2d56ccdf3761d5e4f languageName: node linkType: hard @@ -5675,6 +7640,13 @@ __metadata: languageName: node linkType: hard +"chardet@npm:^0.4.0": + version: 0.4.2 + resolution: "chardet@npm:0.4.2" + checksum: 10c0/287fff1609301b1a9e8dc9730271af7aa24187a8e224d23b8c3eb88cb7c0e8ceb962905377e36947bc07edb69afd188903f4924cc6bd0bd4e7703d498505b70d + languageName: node + linkType: hard + "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -5690,8 +7662,8 @@ __metadata: linkType: hard "chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" dependencies: anymatch: "npm:~3.1.2" braces: "npm:~3.0.2" @@ -5704,7 +7676,7 @@ __metadata: dependenciesMeta: fsevents: optional: true - checksum: 10c0/1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 languageName: node linkType: hard @@ -5731,6 +7703,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 10c0/8c5fa3830a2bcee2b53c2e5018226f0141db9ec9f7b1e27a5c57db5512332cde8a0beb769bcbaf0d8775a78afbf2bb841928feca4ea6219638a5b088f9884b46 + languageName: node + linkType: hard + "ci-info@npm:^3.2.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" @@ -5738,17 +7717,10 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^4.0.0, ci-info@npm:^4.1.0": - version: 4.1.0 - resolution: "ci-info@npm:4.1.0" - checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 - languageName: node - linkType: hard - -"ci-info@npm:^4.2.0": - version: 4.2.0 - resolution: "ci-info@npm:4.2.0" - checksum: 10c0/37a2f4b6a213a5cf835890eb0241f0d5b022f6cfefde58a69e9af8e3a0e71e06d6ad7754b0d4efb9cd2613e58a7a33996d71b56b0d04242722e86666f3f3d058 +"ci-info@npm:^4.0.0, ci-info@npm:^4.1.0, ci-info@npm:^4.2.0": + version: 4.3.0 + resolution: "ci-info@npm:4.3.0" + checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c languageName: node linkType: hard @@ -5766,10 +7738,22 @@ __metadata: languageName: node linkType: hard +"class-utils@npm:^0.3.5": + version: 0.3.6 + resolution: "class-utils@npm:0.3.6" + dependencies: + arr-union: "npm:^3.1.0" + define-property: "npm:^0.2.5" + isobject: "npm:^3.0.0" + static-extend: "npm:^0.1.1" + checksum: 10c0/d44f4afc7a3e48dba4c2d3fada5f781a1adeeff371b875c3b578bc33815c6c29d5d06483c2abfd43a32d35b104b27b67bfa39c2e8a422fa858068bd756cfbd42 + languageName: node + linkType: hard + "classnames@npm:^2.3.2": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 10c0/cd50ead57b4f97436aaa9f9885c6926323efc7c2bea8e3d4eb10e4e972aa6a1cfca1c7a0e06f8a199ca7498d4339e30bb6002e589e61c9f21248cbf3e8b0b18d + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 languageName: node linkType: hard @@ -5789,6 +7773,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: "npm:^2.0.0" + checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda + languageName: node + linkType: hard + "cli-cursor@npm:^5.0.0": version: 5.0.0 resolution: "cli-cursor@npm:5.0.0" @@ -5805,10 +7798,10 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0": - version: 2.7.0 - resolution: "cli-spinners@npm:2.7.0" - checksum: 10c0/5c781ace5c8f304ae4d138837f19cf88f03a97de3c3e388f9d1d6434146f06f6ce2a161d6237b3bb86448a05fbcbb20084f3fea96077e42a655b273e39c6f08d +"cli-spinners@npm:^2.0.0, cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 languageName: node linkType: hard @@ -5845,6 +7838,13 @@ __metadata: languageName: node linkType: hard +"cli-width@npm:^2.0.0": + version: 2.2.1 + resolution: "cli-width@npm:2.2.1" + checksum: 10c0/e3a6d422d657ca111c630f69ee0f1a499e8f114eea158ccb2cdbedd19711edffa217093bbd43dafb34b68d1b1a3b5334126e51d059b9ec1d19afa53b42b3ef86 + languageName: node + linkType: hard + "cli-width@npm:^3.0.0": version: 3.0.0 resolution: "cli-width@npm:3.0.0" @@ -5852,6 +7852,28 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^5.0.0": + version: 5.0.0 + resolution: "cliui@npm:5.0.0" + dependencies: + string-width: "npm:^3.1.0" + strip-ansi: "npm:^5.2.0" + wrap-ansi: "npm:^5.1.0" + checksum: 10c0/76142bf306965850a71efd10c9755bd7f447c7c20dd652e1c1ce27d987f862a3facb3cceb2909cef6f0cb363646ee7a1735e3dfdd49f29ed16d733d33e15e2f8 + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 + languageName: node + linkType: hard + "cliui@npm:^7.0.2": version: 7.0.4 resolution: "cliui@npm:7.0.4" @@ -5874,7 +7896,7 @@ __metadata: languageName: node linkType: hard -"clone-deep@npm:4.0.1": +"clone-deep@npm:4.0.1, clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" dependencies: @@ -5913,6 +7935,16 @@ __metadata: languageName: node linkType: hard +"collection-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "collection-visit@npm:1.0.0" + dependencies: + map-visit: "npm:^1.0.0" + object-visit: "npm:^1.0.0" + checksum: 10c0/add72a8d1c37cb90e53b1aaa2c31bf1989bfb733f0b02ce82c9fa6828c7a14358dba2e4f8e698c02f69e424aeccae1ffb39acdeaf872ade2f41369e84a2fcf8a + languageName: node + linkType: hard + "color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -5955,7 +7987,7 @@ __metadata: languageName: node linkType: hard -"color-support@npm:1.1.3": +"color-support@npm:1.1.3, color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: @@ -5974,6 +8006,13 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^1.0.7": + version: 1.4.0 + resolution: "colorette@npm:1.4.0" + checksum: 10c0/4955c8f7daafca8ae7081d672e4bd89d553bd5782b5846d5a7e05effe93c2f15f7e9c0cb46f341b59f579a39fcf436241ff79594899d75d5f3460c03d607fe9e + languageName: node + linkType: hard + "colorette@npm:^2.0.16, colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -6017,7 +8056,14 @@ __metadata: languageName: node linkType: hard -"commander@npm:^12.0.0, commander@npm:^12.1.0": +"command-exists@npm:^1.2.8": + version: 1.2.9 + resolution: "command-exists@npm:1.2.9" + checksum: 10c0/75040240062de46cd6cd43e6b3032a8b0494525c89d3962e280dde665103f8cc304a8b313a5aa541b91da2f5a9af75c5959dc3a77893a2726407a5e9a0234c16 + languageName: node + linkType: hard + +"commander@npm:^12.1.0": version: 12.1.0 resolution: "commander@npm:12.1.0" checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 @@ -6031,7 +8077,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0": +"commander@npm:^2.19.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 @@ -6059,6 +8105,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^9.4.1": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: 10c0/5f7784fbda2aaec39e89eb46f06a999e00224b3763dc65976e05929ec486e174fe9aac2655f03ba6a5e83875bd173be5283dc19309b7c65954701c02025b3c1d + languageName: node + linkType: hard + "commander@npm:~13.1.0": version: 13.1.0 resolution: "commander@npm:13.1.0" @@ -6066,6 +8119,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:~2.14.1": + version: 2.14.1 + resolution: "commander@npm:2.14.1" + checksum: 10c0/b29bb0220fb27645a958a9cbecc5c138adeb4d151a17d43acd5c8cd7ffed1a64e502a20338e3faad235c5c8e23df893dd02dfe6eddf47f90fc51b51825084719 + languageName: node + linkType: hard + "comment-parser@npm:1.4.1": version: 1.4.1 resolution: "comment-parser@npm:1.4.1" @@ -6104,6 +8164,13 @@ __metadata: languageName: node linkType: hard +"component-emitter@npm:^1.2.1": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 10c0/e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 + languageName: node + linkType: hard + "compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -6113,7 +8180,7 @@ __metadata: languageName: node linkType: hard -"compression@npm:^1.7.4": +"compression@npm:^1.7.1, compression@npm:^1.7.4": version: 1.8.1 resolution: "compression@npm:1.8.1" dependencies: @@ -6135,6 +8202,18 @@ __metadata: languageName: node linkType: hard +"concat-stream@npm:^1.6.0": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^2.2.2" + typedarray: "npm:^0.0.6" + checksum: 10c0/2e9864e18282946dabbccb212c5c7cec0702745e3671679eb8291812ca7fd12023f7d8cb36493942a62f770ac96a7f90009dc5c82ad69893438371720fa92617 + languageName: node + linkType: hard + "concat-stream@npm:^2.0.0": version: 2.0.0 resolution: "concat-stream@npm:2.0.0" @@ -6147,6 +8226,18 @@ __metadata: languageName: node linkType: hard +"connect@npm:^3.6.5": + version: 3.7.0 + resolution: "connect@npm:3.7.0" + dependencies: + debug: "npm:2.6.9" + finalhandler: "npm:1.1.2" + parseurl: "npm:~1.3.3" + utils-merge: "npm:1.0.1" + checksum: 10c0/f120c6116bb16a0a7d2703c0b4a0cd7ed787dc5ec91978097bf62aa967289020a9f41a9cd3c3276a7b92aaa36f382d2cd35fed7138fd466a55c8e9fdbed11ca8 + languageName: node + linkType: hard + "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -6263,13 +8354,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.6.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: 10c0/281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b - languageName: node - linkType: hard - "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -6308,6 +8392,29 @@ __metadata: languageName: node linkType: hard +"copy-descriptor@npm:^0.1.0": + version: 0.1.1 + resolution: "copy-descriptor@npm:0.1.1" + checksum: 10c0/161f6760b7348c941007a83df180588fe2f1283e0867cc027182734e0f26134e6cc02de09aa24a95dc267b2e2025b55659eef76c8019df27bc2d883033690181 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.43.0": + version: 3.44.0 + resolution: "core-js-compat@npm:3.44.0" + dependencies: + browserslist: "npm:^4.25.1" + checksum: 10c0/5de4b042b8bb232b8390be3079030de5c7354610f136ed3eb91310a44455a78df02cfcf49b2fd05d5a5aa2695460620abf1b400784715f7482ed4770d40a68b2 + languageName: node + linkType: hard + +"core-js@npm:^2.4.1": + version: 2.6.12 + resolution: "core-js@npm:2.6.12" + checksum: 10c0/00128efe427789120a06b819adc94cc72b96955acb331cb71d09287baf9bd37bebd191d91f1ee4939c893a050307ead4faea08876f09115112612b6a05684b63 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -6339,6 +8446,18 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^5.0.5, cosmiconfig@npm:^5.1.0": + version: 5.2.1 + resolution: "cosmiconfig@npm:5.2.1" + dependencies: + import-fresh: "npm:^2.0.0" + is-directory: "npm:^0.3.1" + js-yaml: "npm:^3.13.1" + parse-json: "npm:^4.0.0" + checksum: 10c0/ae9ba309cdbb42d0c9d63dad5c1dfa1c56bb8f818cb8633eea14fd2dbdc9f33393b77658ba96fdabda497bc943afed8c3371d1222afe613c518ba676fa624645 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -6360,13 +8479,13 @@ __metadata: linkType: hard "cross-spawn@npm:^7.0.0": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 languageName: node linkType: hard @@ -6390,9 +8509,9 @@ __metadata: linkType: hard "csstype@npm:^3.0.2": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 10c0/7c8b8c5923049d84132581c13bae6e1faf999746fe3998ba5f3819a8e1cdc7512ace87b7d0a4a69f0f4b8ba11daf835d4f1390af23e09fc4f0baad52c084753a + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 languageName: node linkType: hard @@ -6466,6 +8585,13 @@ __metadata: languageName: node linkType: hard +"data-uri-to-buffer@npm:^3.0.1": + version: 3.0.1 + resolution: "data-uri-to-buffer@npm:3.0.1" + checksum: 10c0/01fa28525402582fbb972c91822533f5528156e9e7241512b903467acbe2e0505760504e22c548bb707c7a56b5459194ee4fa6434e5995fa1a658744c2ce0cff + languageName: node + linkType: hard + "data-urls@npm:^5.0.0": version: 5.0.0 resolution: "data-urls@npm:5.0.0" @@ -6516,14 +8642,14 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:^1.10.4": +"dayjs@npm:^1.10.4, dayjs@npm:^1.8.15": version: 1.11.13 resolution: "dayjs@npm:1.11.13" checksum: 10c0/a3caf6ac8363c7dade9d1ee797848ddcf25c1ace68d9fe8678ecf8ba0675825430de5d793672ec87b24a69bf04a1544b176547b2539982275d5542a7955f35b7 languageName: node linkType: hard -"debug@npm:2.6.9": +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -6563,7 +8689,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.0": +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 @@ -6571,18 +8697,25 @@ __metadata: linkType: hard "decimal.js@npm:^10.5.0": - version: 10.5.0 - resolution: "decimal.js@npm:10.5.0" - checksum: 10c0/785c35279df32762143914668df35948920b6c1c259b933e0519a69b7003fc0a5ed2a766b1e1dda02574450c566b21738a45f15e274b47c2ac02072c0d1f3ac3 + version: 10.6.0 + resolution: "decimal.js@npm:10.6.0" + checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa languageName: node linkType: hard "decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" + version: 1.2.0 + resolution: "decode-named-character-reference@npm:1.2.0" dependencies: character-entities: "npm:^2.0.0" - checksum: 10c0/66a9fc5d9b5385a2b3675c69ba0d8e893393d64057f7dbbb585265bb4fc05ec513d76943b8e5aac7d8016d20eea4499322cbf4cd6d54b466976b78f3a7587a4c + checksum: 10c0/761a89de6b0e0a2d4b21ae99074e4cc3344dd11eb29f112e23cc5909f2e9f33c5ed20cd6b146b27fb78170bce0f3f9b3362a84b75638676a05c938c24a60f5d7 + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 10c0/1f4fa54eb740414a816b3f6c24818fbfcabd74ac478391e9f4e2282c994127db02010ce804f3d08e38255493cfe68608b3f5c8e09fd6efc4ae46c807691f7a31 languageName: node linkType: hard @@ -6610,6 +8743,15 @@ __metadata: languageName: node linkType: hard +"deep-assign@npm:^3.0.0": + version: 3.0.0 + resolution: "deep-assign@npm:3.0.0" + dependencies: + is-obj: "npm:^1.0.0" + checksum: 10c0/bb46602a085e0fcb5077c279c0143d9314cc62723d403c698742a1a765cda7df6635033cbf4ff6fb279f672455e5ff9f91bfd682cc51774b9c971e4260c622fc + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -6624,14 +8766,14 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.2.2 - resolution: "deepmerge@npm:4.2.2" - checksum: 10c0/d6136eee869057fea7a829aa2d10073ed49db5216e42a77cc737dd385334aab9b68dae22020a00c24c073d5f79cbbdd3f11b8d4fc87700d112ddaa0e1f968ef2 +"deepmerge@npm:^3.2.0": + version: 3.3.0 + resolution: "deepmerge@npm:3.3.0" + checksum: 10c0/143bc6b6cd8a1216565c61c0fe38bf43fe691fb6876fb3f5727c6e323defe4e947c68fbab9957e17e837c5594a56af885c5834d23dc6cf2c41bef97090005104 languageName: node linkType: hard -"deepmerge@npm:^4.3.1": +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 @@ -6647,7 +8789,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2, define-data-property@npm:^1.1.4": +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: @@ -6665,7 +8807,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -6676,6 +8818,34 @@ __metadata: languageName: node linkType: hard +"define-property@npm:^0.2.5": + version: 0.2.5 + resolution: "define-property@npm:0.2.5" + dependencies: + is-descriptor: "npm:^0.1.0" + checksum: 10c0/9986915c0893818dedc9ca23eaf41370667762fd83ad8aa4bf026a28563120dbaacebdfbfbf2b18d3b929026b9c6ee972df1dbf22de8fafb5fe6ef18361e4750 + languageName: node + linkType: hard + +"define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "define-property@npm:1.0.0" + dependencies: + is-descriptor: "npm:^1.0.0" + checksum: 10c0/d7cf09db10d55df305f541694ed51dafc776ad9bb8a24428899c9f2d36b11ab38dce5527a81458d1b5e7c389f8cbe803b4abad6e91a0037a329d153b84fc975e + languageName: node + linkType: hard + +"define-property@npm:^2.0.2": + version: 2.0.2 + resolution: "define-property@npm:2.0.2" + dependencies: + is-descriptor: "npm:^1.0.2" + isobject: "npm:^3.0.1" + checksum: 10c0/f91a08ad008fa764172a2c072adc7312f10217ade89ddaea23018321c6d71b2b68b8c229141ed2064179404e345c537f1a2457c379824813695b51a6ad3e4969 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -6683,6 +8853,13 @@ __metadata: languageName: node linkType: hard +"denodeify@npm:^1.2.1": + version: 1.2.1 + resolution: "denodeify@npm:1.2.1" + checksum: 10c0/d7e5a974eae4e837f7c70ecb9bdbafae9fbdda1993a86dead1b0ec1d162ed34a9adb2cfbc0bce30d8ccf7a7294aba660862fdce761a0c6157650a0839630d33a + languageName: node + linkType: hard + "depd@npm:2.0.0, depd@npm:^2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -6691,16 +8868,27 @@ __metadata: linkType: hard "dependency-tree@npm:^11.0.0": - version: 11.0.1 - resolution: "dependency-tree@npm:11.0.1" + version: 11.2.0 + resolution: "dependency-tree@npm:11.2.0" dependencies: - commander: "npm:^12.0.0" - filing-cabinet: "npm:^5.0.1" - precinct: "npm:^12.0.2" - typescript: "npm:^5.4.5" + commander: "npm:^12.1.0" + filing-cabinet: "npm:^5.0.3" + precinct: "npm:^12.2.0" + typescript: "npm:^5.8.3" bin: dependency-tree: bin/cli.js - checksum: 10c0/0f6331a29b9e0baaa68d7fa9fc4e670ee1333503f3875ed4455dff4d84d28a87ff2bb91b73977379f66fc769c0a80832f6c2b91e225d4e939c8a0b75915e35b8 + checksum: 10c0/bbec40f799192baaa10d941ebbf7830f2210e77ae70b1c84ae137b2f4738fcf5756f3a4fa54254ec07108e40383b647183af814dfa4cf9759f49a22ee26b68a0 + languageName: node + linkType: hard + +"deprecated-react-native-prop-types@npm:4.1.0": + version: 4.1.0 + resolution: "deprecated-react-native-prop-types@npm:4.1.0" + dependencies: + "@react-native/normalize-colors": "npm:*" + invariant: "npm:*" + prop-types: "npm:*" + checksum: 10c0/fdfcaebb0d0b9830ade32e48747a63b85429999373c46c3673f086b4eba1aafd9241e88b6f8484da8dbcec64df4b33cb469128fa743099f7ab77e3a5ce4d220d languageName: node linkType: hard @@ -6718,6 +8906,13 @@ __metadata: languageName: node linkType: hard +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + "detect-indent@npm:^5.0.0": version: 5.0.0 resolution: "detect-indent@npm:5.0.0" @@ -6741,105 +8936,105 @@ __metadata: languageName: node linkType: hard -"detective-amd@npm:^6.0.0": - version: 6.0.0 - resolution: "detective-amd@npm:6.0.0" +"detective-amd@npm:^6.0.1": + version: 6.0.1 + resolution: "detective-amd@npm:6.0.1" dependencies: - ast-module-types: "npm:^6.0.0" + ast-module-types: "npm:^6.0.1" escodegen: "npm:^2.1.0" - get-amd-module-type: "npm:^6.0.0" - node-source-walk: "npm:^7.0.0" + get-amd-module-type: "npm:^6.0.1" + node-source-walk: "npm:^7.0.1" bin: detective-amd: bin/cli.js - checksum: 10c0/e0eace52d9c0642ed741cf21155091bcfc800b0a90165a92a47364fa5c058ec25c1a57122463ff374a1b88852e5741a088fb5d8b3bab70481ad68926bf99646d + checksum: 10c0/a529b3b19fdb1c7468d38bdc469dabc877f1dea6d42cd90a7e36af528fb001576dfebd240484d1caabc749d4efc9451e96eeb314729a5889bc15f1e30140e802 languageName: node linkType: hard -"detective-cjs@npm:^6.0.0": - version: 6.0.0 - resolution: "detective-cjs@npm:6.0.0" +"detective-cjs@npm:^6.0.1": + version: 6.0.1 + resolution: "detective-cjs@npm:6.0.1" dependencies: - ast-module-types: "npm:^6.0.0" - node-source-walk: "npm:^7.0.0" - checksum: 10c0/1e6124889a3c5c0af2e40b83afbf9ebcffcb83493c6e483eb4b41abb9a74fe1355294f509b6e0bd6bf63531fcbbfcb41c7bc2cc9743c97da1ec8eb74220b4135 + ast-module-types: "npm:^6.0.1" + node-source-walk: "npm:^7.0.1" + checksum: 10c0/5e99f58d069765086a44880d440633fd12596159ba0dc91695a6cf3f80d8eb9b6970464c40f526b30c3929ab90de31b43ada074d92b2402f70fc18676f47d465 languageName: node linkType: hard -"detective-es6@npm:^5.0.0": - version: 5.0.0 - resolution: "detective-es6@npm:5.0.0" +"detective-es6@npm:^5.0.1": + version: 5.0.1 + resolution: "detective-es6@npm:5.0.1" dependencies: - node-source-walk: "npm:^7.0.0" - checksum: 10c0/8434e5ba8e4fd8f881366ca940c781f2bb032269f084e220ec2997557c1d20a84d9ec589d36b135728fa02f8ddde8224266f67bd60bffe723e638914cc780936 + node-source-walk: "npm:^7.0.1" + checksum: 10c0/2e8e94d61a79f8c0ff8652f0ad9dc796c618710658f89a7b17cfb64be31bbde2d59d5e56c071b31eb80edc617a1da7273e8dcf3c10ab31db71df05429f60c311 languageName: node linkType: hard -"detective-postcss@npm:^7.0.0": - version: 7.0.0 - resolution: "detective-postcss@npm:7.0.0" +"detective-postcss@npm:^7.0.1": + version: 7.0.1 + resolution: "detective-postcss@npm:7.0.1" dependencies: is-url: "npm:^1.2.4" postcss-values-parser: "npm:^6.0.2" peerDependencies: - postcss: ^8.4.38 - checksum: 10c0/03f3422b3b1bd491464615f1a8c58a9e2375a6ea44676adb2e5bcfcfb9049c56318b18bcb85cae5fd23826c10b9308bc79219674f6fa840cb01c3a05105f0512 + postcss: ^8.4.47 + checksum: 10c0/915e402124a6b3db943ef165c3ab5c7a38d0980b97d70f43867eb045acb81acb9e4c5e9eb4f180b9a45483491facc37161075e12a93713d7df8d0643141e90b8 languageName: node linkType: hard -"detective-sass@npm:^6.0.0": - version: 6.0.0 - resolution: "detective-sass@npm:6.0.0" +"detective-sass@npm:^6.0.1": + version: 6.0.1 + resolution: "detective-sass@npm:6.0.1" dependencies: gonzales-pe: "npm:^4.3.0" - node-source-walk: "npm:^7.0.0" - checksum: 10c0/0b1362b55df7fdd18ba424386caf58bbeafcb75b634f2baec6a8ac63b4c21538c249069ddbda2d5e8102baf3db25d78908158ad09beba55f78007f063b441c41 + node-source-walk: "npm:^7.0.1" + checksum: 10c0/e45108f98fbc5cc2330e93cc6a6a8d53c25b7447800f97b2ab0e97a6f7d44f6c3f99ae9bd946a1e5b3c01cda4581f264f81435ce5438d8fafb8fe9f22f23c0c0 languageName: node linkType: hard -"detective-scss@npm:^5.0.0": - version: 5.0.0 - resolution: "detective-scss@npm:5.0.0" +"detective-scss@npm:^5.0.1": + version: 5.0.1 + resolution: "detective-scss@npm:5.0.1" dependencies: gonzales-pe: "npm:^4.3.0" - node-source-walk: "npm:^7.0.0" - checksum: 10c0/b882587522c4032841db71db13493e2b843af1033dd53b267f6786cbd3034c2892603a7087e1817e7a158103547834cbe454c4f2c7c61d6e1dfdd81e6097abc5 + node-source-walk: "npm:^7.0.1" + checksum: 10c0/9a2d07fb4dc608b73d4292f1eaa1d1d7f823298c11ea091896eaeb2bba52dd76d9fc9dd82d63b811ce87decf6fd65f9ed00b4cba264b7273a9c47edf48f70530 languageName: node linkType: hard -"detective-stylus@npm:^5.0.0": - version: 5.0.0 - resolution: "detective-stylus@npm:5.0.0" - checksum: 10c0/d9e1333b0bbe8338bb701e42bf77dd0dc8ca0e9b9ca27d752ce4af71a4880639b0eba6f242510701c2bf6f305d38c8638abb3f42bc7e671de9e7652f2ed89bf9 +"detective-stylus@npm:^5.0.1": + version: 5.0.1 + resolution: "detective-stylus@npm:5.0.1" + checksum: 10c0/34698ac21dc256483fd91d1674ba5d0c617e45285cd85e4efa99ce48fe955e567df53c51b4157bac3dab6d97f70c86bbd847202ee7a1b639c3b781f35026bde9 languageName: node linkType: hard -"detective-typescript@npm:^13.0.0": - version: 13.0.0 - resolution: "detective-typescript@npm:13.0.0" +"detective-typescript@npm:^14.0.0": + version: 14.0.0 + resolution: "detective-typescript@npm:14.0.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:^7.6.0" - ast-module-types: "npm:^6.0.0" - node-source-walk: "npm:^7.0.0" + "@typescript-eslint/typescript-estree": "npm:^8.23.0" + ast-module-types: "npm:^6.0.1" + node-source-walk: "npm:^7.0.1" peerDependencies: typescript: ^5.4.4 - checksum: 10c0/17bdf6a3551e49a2ee7c572f0bda70e7996195ea844666c63d5258aaf4ee9c46befcdf013b4adb2799dd07c150d5baaa758b75f9d85e6861846f09ff797000ff + checksum: 10c0/1d802991e2a57732cc54ceb007991493bbd28b7ba416d0220ccb1cba667febaf09226c701b7310e75179f6c9e9ce84ded03b464b83d931c975e19f2cbad96474 languageName: node linkType: hard -"detective-vue2@npm:^2.0.3": - version: 2.1.0 - resolution: "detective-vue2@npm:2.1.0" - dependencies: - "@dependents/detective-less": "npm:^5.0.0" - "@vue/compiler-sfc": "npm:^3.5.12" - detective-es6: "npm:^5.0.0" - detective-sass: "npm:^6.0.0" - detective-scss: "npm:^5.0.0" - detective-stylus: "npm:^5.0.0" - detective-typescript: "npm:^13.0.0" +"detective-vue2@npm:^2.2.0": + version: 2.2.0 + resolution: "detective-vue2@npm:2.2.0" + dependencies: + "@dependents/detective-less": "npm:^5.0.1" + "@vue/compiler-sfc": "npm:^3.5.13" + detective-es6: "npm:^5.0.1" + detective-sass: "npm:^6.0.1" + detective-scss: "npm:^5.0.1" + detective-stylus: "npm:^5.0.1" + detective-typescript: "npm:^14.0.0" peerDependencies: typescript: ^5.4.4 - checksum: 10c0/fefe7b816b3e60cbee3780f7f145903828af7ffb977321fa92a9ec6b2b6c076b93c3115526bc4cfb98b952f9fa79140d3ca73201bcc42875d8345af2605f9ffa + checksum: 10c0/b56e2e479b75ec6828f0892c64a06e371a4d4200056b0a2035331f1e894da30eb6a6c8c5b11701bd13d9d3a07d040b740451384bb32b82f62f1d4286800e2cbf languageName: node linkType: hard @@ -7011,10 +9206,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.41": - version: 1.5.50 - resolution: "electron-to-chromium@npm:1.5.50" - checksum: 10c0/8b77b18ae833bfe2173e346ac33b8d66b5b5acf0cf5de65df9799f4d482334c938aa0950e4d01391d5fab8994f46c0e9059f4517843e7b8d861f9b0c49eb4c5d +"electron-to-chromium@npm:^1.5.173": + version: 1.5.194 + resolution: "electron-to-chromium@npm:1.5.194" + checksum: 10c0/7d72617857055d54552380b34be411933966fa1156dc8653e321d14e82e2af84114bac607e9e2926f885d560b2697a324981e4204d3da4e0f9604d4a468eeba1 languageName: node linkType: hard @@ -7032,6 +9227,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^7.0.1": + version: 7.0.3 + resolution: "emoji-regex@npm:7.0.3" + checksum: 10c0/a8917d695c3a3384e4b7230a6a06fd2de6b3db3709116792e8b7b36ddbb3db4deb28ad3e983e70d4f2a1f9063b5dab9025e4e26e9ca08278da4fbb73e213743f + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -7053,14 +9255,21 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:^2.0.0": +"encodeurl@npm:^2.0.0, encodeurl@npm:~2.0.0": version: 2.0.0 resolution: "encodeurl@npm:2.0.0" checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb languageName: node linkType: hard -"encoding@npm:^0.1.13": +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encoding@npm:^0.1.11, encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -7070,21 +9279,21 @@ __metadata: linkType: hard "end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" dependencies: once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 languageName: node linkType: hard -"enhanced-resolve@npm:^5.16.0": - version: 5.18.0 - resolution: "enhanced-resolve@npm:5.18.0" +"enhanced-resolve@npm:^5.18.0": + version: 5.18.2 + resolution: "enhanced-resolve@npm:5.18.2" dependencies: graceful-fs: "npm:^4.2.4" tapable: "npm:^2.2.0" - checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce + checksum: 10c0/2a45105daded694304b0298d1c0351a981842249a9867513d55e41321a4ccf37dfd35b0c1e9ceae290eab73654b09aa7a910d618ea6f9441e97c52bc424a2372 languageName: node linkType: hard @@ -7107,14 +9316,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.4.0": - version: 4.4.0 - resolution: "entities@npm:4.4.0" - checksum: 10c0/b7971419897622d3996bbbff99249e166caaaf3ea95d3841d6dc5d3bf315f133b649fbe932623e3cc527d871112e7563a8284e24f23e472126aa90c4e9c3215b - languageName: node - linkType: hard - -"entities@npm:^4.5.0": +"entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 @@ -7135,147 +9337,67 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:7.13.0": - version: 7.13.0 - resolution: "envinfo@npm:7.13.0" - bin: - envinfo: dist/cli.js - checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 - languageName: node - linkType: hard - -"environment@npm:^1.0.0": - version: 1.1.0 - resolution: "environment@npm:1.1.0" - checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce - languageName: node - linkType: hard - -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9": - version: 1.23.9 - resolution: "es-abstract@npm:1.23.9" - dependencies: - array-buffer-byte-length: "npm:^1.0.2" - arraybuffer.prototype.slice: "npm:^1.0.4" - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - data-view-buffer: "npm:^1.0.2" - data-view-byte-length: "npm:^1.0.2" - data-view-byte-offset: "npm:^1.0.1" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-set-tostringtag: "npm:^2.1.0" - es-to-primitive: "npm:^1.3.0" - function.prototype.name: "npm:^1.1.8" - get-intrinsic: "npm:^1.2.7" - get-proto: "npm:^1.0.0" - get-symbol-description: "npm:^1.1.0" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.2.0" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - internal-slot: "npm:^1.1.0" - is-array-buffer: "npm:^3.0.5" - is-callable: "npm:^1.2.7" - is-data-view: "npm:^1.0.2" - is-regex: "npm:^1.2.1" - is-shared-array-buffer: "npm:^1.0.4" - is-string: "npm:^1.1.1" - is-typed-array: "npm:^1.1.15" - is-weakref: "npm:^1.1.0" - math-intrinsics: "npm:^1.1.0" - object-inspect: "npm:^1.13.3" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.7" - own-keys: "npm:^1.0.1" - regexp.prototype.flags: "npm:^1.5.3" - safe-array-concat: "npm:^1.1.3" - safe-push-apply: "npm:^1.0.0" - safe-regex-test: "npm:^1.1.0" - set-proto: "npm:^1.0.0" - string.prototype.trim: "npm:^1.2.10" - string.prototype.trimend: "npm:^1.0.9" - string.prototype.trimstart: "npm:^1.0.8" - typed-array-buffer: "npm:^1.0.3" - typed-array-byte-length: "npm:^1.0.3" - typed-array-byte-offset: "npm:^1.0.4" - typed-array-length: "npm:^1.0.7" - unbox-primitive: "npm:^1.1.0" - which-typed-array: "npm:^1.1.18" - checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b +"envinfo@npm:7.13.0": + version: 7.13.0 + resolution: "envinfo@npm:7.13.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 + languageName: node + linkType: hard + +"envinfo@npm:^7.7.2": + version: 7.14.0 + resolution: "envinfo@npm:7.14.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/059a031eee101e056bd9cc5cbfe25c2fab433fe1780e86cf0a82d24a000c6931e327da6a8ffb3dce528a24f83f256e7efc0b36813113eff8fdc6839018efe327 + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 languageName: node linkType: hard -"es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3": - version: 1.22.5 - resolution: "es-abstract@npm:1.22.5" +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" dependencies: - array-buffer-byte-length: "npm:^1.0.1" - arraybuffer.prototype.slice: "npm:^1.0.3" - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.3" - es-to-primitive: "npm:^1.2.1" - function.prototype.name: "npm:^1.1.6" - get-intrinsic: "npm:^1.2.4" - get-symbol-description: "npm:^1.0.2" - globalthis: "npm:^1.0.3" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.3" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.1" - internal-slot: "npm:^1.0.7" - is-array-buffer: "npm:^3.0.4" - is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.3" - is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.3" - is-string: "npm:^1.0.7" - is-typed-array: "npm:^1.1.13" - is-weakref: "npm:^1.0.2" - object-inspect: "npm:^1.13.1" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.5" - regexp.prototype.flags: "npm:^1.5.2" - safe-array-concat: "npm:^1.1.0" - safe-regex-test: "npm:^1.0.3" - string.prototype.trim: "npm:^1.2.8" - string.prototype.trimend: "npm:^1.0.7" - string.prototype.trimstart: "npm:^1.0.7" - typed-array-buffer: "npm:^1.0.2" - typed-array-byte-length: "npm:^1.0.1" - typed-array-byte-offset: "npm:^1.0.2" - typed-array-length: "npm:^1.0.5" - unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.14" - checksum: 10c0/4bca5a60f0dff6c0a5690d8e51374cfcb8760d5dbbb1069174b4d41461cf4e0c3e0c1993bccbc5aa0799ff078199f1bcde2122b8709e0d17c2beffafff01010a - languageName: node - linkType: hard - -"es-abstract@npm:^1.24.0": + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 + languageName: node + linkType: hard + +"errorhandler@npm:^1.5.0, errorhandler@npm:^1.5.1": + version: 1.5.1 + resolution: "errorhandler@npm:1.5.1" + dependencies: + accepts: "npm:~1.3.7" + escape-html: "npm:~1.0.3" + checksum: 10c0/58568c7eec3f4de5dc49e4385a50af66b76759b3463a86e4a85e05c4f7a5348f51d3d23af51c3a23eceef6278045d0a47d975da11bdaaf92d1d783dc677e980e + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": version: 1.24.0 resolution: "es-abstract@npm:1.24.0" dependencies: @@ -7337,23 +9459,14 @@ __metadata: languageName: node linkType: hard -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: "npm:^1.2.4" - checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": version: 1.0.1 resolution: "es-define-property@npm:1.0.1" checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c languageName: node linkType: hard -"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": +"es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 @@ -7384,16 +9497,7 @@ __metadata: languageName: node linkType: hard -"es-object-atoms@npm:^1.0.0": - version: 1.0.0 - resolution: "es-object-atoms@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.1.1": +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" dependencies: @@ -7402,18 +9506,7 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.3": - version: 2.0.3 - resolution: "es-set-tostringtag@npm:2.0.3" - dependencies: - get-intrinsic: "npm:^1.2.4" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.1" - checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": +"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": version: 2.1.0 resolution: "es-set-tostringtag@npm:2.1.0" dependencies: @@ -7425,16 +9518,7 @@ __metadata: languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.1.0": +"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": version: 1.1.0 resolution: "es-shim-unscopables@npm:1.1.0" dependencies: @@ -7443,17 +9527,6 @@ __metadata: languageName: node linkType: hard -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" - dependencies: - is-callable: "npm:^1.1.4" - is-date-object: "npm:^1.0.1" - is-symbol: "npm:^1.0.2" - checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 - languageName: node - linkType: hard - "es-to-primitive@npm:^1.3.0": version: 1.3.0 resolution: "es-to-primitive@npm:1.3.0" @@ -7466,34 +9539,35 @@ __metadata: linkType: hard "esbuild@npm:^0.25.0": - version: 0.25.0 - resolution: "esbuild@npm:0.25.0" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.0" - "@esbuild/android-arm": "npm:0.25.0" - "@esbuild/android-arm64": "npm:0.25.0" - "@esbuild/android-x64": "npm:0.25.0" - "@esbuild/darwin-arm64": "npm:0.25.0" - "@esbuild/darwin-x64": "npm:0.25.0" - "@esbuild/freebsd-arm64": "npm:0.25.0" - "@esbuild/freebsd-x64": "npm:0.25.0" - "@esbuild/linux-arm": "npm:0.25.0" - "@esbuild/linux-arm64": "npm:0.25.0" - "@esbuild/linux-ia32": "npm:0.25.0" - "@esbuild/linux-loong64": "npm:0.25.0" - "@esbuild/linux-mips64el": "npm:0.25.0" - "@esbuild/linux-ppc64": "npm:0.25.0" - "@esbuild/linux-riscv64": "npm:0.25.0" - "@esbuild/linux-s390x": "npm:0.25.0" - "@esbuild/linux-x64": "npm:0.25.0" - "@esbuild/netbsd-arm64": "npm:0.25.0" - "@esbuild/netbsd-x64": "npm:0.25.0" - "@esbuild/openbsd-arm64": "npm:0.25.0" - "@esbuild/openbsd-x64": "npm:0.25.0" - "@esbuild/sunos-x64": "npm:0.25.0" - "@esbuild/win32-arm64": "npm:0.25.0" - "@esbuild/win32-ia32": "npm:0.25.0" - "@esbuild/win32-x64": "npm:0.25.0" + version: 0.25.8 + resolution: "esbuild@npm:0.25.8" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.8" + "@esbuild/android-arm": "npm:0.25.8" + "@esbuild/android-arm64": "npm:0.25.8" + "@esbuild/android-x64": "npm:0.25.8" + "@esbuild/darwin-arm64": "npm:0.25.8" + "@esbuild/darwin-x64": "npm:0.25.8" + "@esbuild/freebsd-arm64": "npm:0.25.8" + "@esbuild/freebsd-x64": "npm:0.25.8" + "@esbuild/linux-arm": "npm:0.25.8" + "@esbuild/linux-arm64": "npm:0.25.8" + "@esbuild/linux-ia32": "npm:0.25.8" + "@esbuild/linux-loong64": "npm:0.25.8" + "@esbuild/linux-mips64el": "npm:0.25.8" + "@esbuild/linux-ppc64": "npm:0.25.8" + "@esbuild/linux-riscv64": "npm:0.25.8" + "@esbuild/linux-s390x": "npm:0.25.8" + "@esbuild/linux-x64": "npm:0.25.8" + "@esbuild/netbsd-arm64": "npm:0.25.8" + "@esbuild/netbsd-x64": "npm:0.25.8" + "@esbuild/openbsd-arm64": "npm:0.25.8" + "@esbuild/openbsd-x64": "npm:0.25.8" + "@esbuild/openharmony-arm64": "npm:0.25.8" + "@esbuild/sunos-x64": "npm:0.25.8" + "@esbuild/win32-arm64": "npm:0.25.8" + "@esbuild/win32-ia32": "npm:0.25.8" + "@esbuild/win32-x64": "npm:0.25.8" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -7537,6 +9611,8 @@ __metadata: optional: true "@esbuild/openbsd-x64": optional: true + "@esbuild/openharmony-arm64": + optional: true "@esbuild/sunos-x64": optional: true "@esbuild/win32-arm64": @@ -7547,7 +9623,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/5767b72da46da3cfec51661647ec850ddbf8a8d0662771139f10ef0692a8831396a0004b2be7966cecdb08264fb16bdc16290dcecd92396fac5f12d722fa013d + checksum: 10c0/43747a25e120d5dd9ce75c82f57306580d715647c8db4f4a0a84e73b04cf16c27572d3937d3cfb95d5ac3266a4d1bbd3913e3d76ae719693516289fc86f8a5fd languageName: node linkType: hard @@ -7558,7 +9634,7 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:^1.0.3": +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 @@ -7668,8 +9744,8 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^52.0.0": - version: 52.0.0 - resolution: "eslint-plugin-jsdoc@npm:52.0.0" + version: 52.0.2 + resolution: "eslint-plugin-jsdoc@npm:52.0.2" dependencies: "@es-joy/jsdoccomment": "npm:~0.52.0" are-docs-informative: "npm:^0.0.2" @@ -7683,7 +9759,7 @@ __metadata: spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/6c575fd3e3b2ae973d31d869a810b701fab716ff9c6a51c2bc95183f0d72d109ff461a020fdd0cc12c8fa6679cc4f6c279b8c052f76414e264f62584a616eedd + checksum: 10c0/e36d8c75a5a100f71f4f5287ce12ffdf15474194b2877dbe1e06c3c24a1c0c0c7f13c2d92cb289a80515b6fe1e43c4c0b19814b5c5b22a46ac2ca7df23ab55ad languageName: node linkType: hard @@ -7778,14 +9854,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.1": +"eslint-visitor-keys@npm:^4.2.0, eslint-visitor-keys@npm:^4.2.1": version: 4.2.1 resolution: "eslint-visitor-keys@npm:4.2.1" checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 @@ -7793,14 +9862,14 @@ __metadata: linkType: hard "eslint@npm:^8.32.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" + version: 8.57.1 + resolution: "eslint@npm:8.57.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -7836,7 +9905,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 languageName: node linkType: hard @@ -7862,7 +9931,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -7918,7 +9987,7 @@ __metadata: languageName: node linkType: hard -"etag@npm:^1.8.1": +"etag@npm:^1.8.1, etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 @@ -7940,6 +10009,13 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0, event-target-shim@npm:^5.0.1": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + "eventemitter2@npm:6.4.7": version: 6.4.7 resolution: "eventemitter2@npm:6.4.7" @@ -7947,6 +10023,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^3.0.0": + version: 3.1.2 + resolution: "eventemitter3@npm:3.1.2" + checksum: 10c0/c67262eccbf85848b7cc6d4abb6c6e34155e15686db2a01c57669fd0d44441a574a19d44d25948b442929e065774cbe5003d8e77eed47674fbf876ac77887793 + languageName: node + linkType: hard + "eventemitter3@npm:^4.0.4": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -7961,6 +10044,13 @@ __metadata: languageName: node linkType: hard +"exec-sh@npm:^0.3.2": + version: 0.3.6 + resolution: "exec-sh@npm:0.3.6" + checksum: 10c0/de29ed40c263989ea151cfc8561c9a41a443185d1998b0ff7aee248323af3b46db3a1dc5341816297d0c02dca472b188640490aa4ba3cae017f531f98102607d + languageName: node + linkType: hard + "execa@npm:4.1.0": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -7995,7 +10085,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:5.1.1, execa@npm:^5.1.1": +"execa@npm:5.1.1, execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -8012,6 +10102,21 @@ __metadata: languageName: node linkType: hard +"execa@npm:^1.0.0": + version: 1.0.0 + resolution: "execa@npm:1.0.0" + dependencies: + cross-spawn: "npm:^6.0.0" + get-stream: "npm:^4.0.0" + is-stream: "npm:^1.1.0" + npm-run-path: "npm:^2.0.0" + p-finally: "npm:^1.0.0" + signal-exit: "npm:^3.0.0" + strip-eof: "npm:^1.0.0" + checksum: 10c0/cc71707c9aa4a2552346893ee63198bf70a04b5a1bc4f8a0ef40f1d03c319eae80932c59191f037990d7d102193e83a38ec72115fff814ec2fb3099f3661a590 + languageName: node + linkType: hard + "executable@npm:^4.1.1": version: 4.1.1 resolution: "executable@npm:4.1.1" @@ -8028,7 +10133,22 @@ __metadata: languageName: node linkType: hard -"expect@npm:30.0.5": +"expand-brackets@npm:^2.1.4": + version: 2.1.4 + resolution: "expand-brackets@npm:2.1.4" + dependencies: + debug: "npm:^2.3.3" + define-property: "npm:^0.2.5" + extend-shallow: "npm:^2.0.1" + posix-character-classes: "npm:^0.1.0" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.1" + checksum: 10c0/3e2fb95d2d7d7231486493fd65db913927b656b6fcdfcce41e139c0991a72204af619ad4acb1be75ed994ca49edb7995ef241dbf8cf44dc3c03d211328428a87 + languageName: node + linkType: hard + +"expect@npm:30.0.5, expect@npm:^30.0.0": version: 30.0.5 resolution: "expect@npm:30.0.5" dependencies: @@ -8042,24 +10162,10 @@ __metadata: languageName: node linkType: hard -"expect@npm:^30.0.0": - version: 30.0.2 - resolution: "expect@npm:30.0.2" - dependencies: - "@jest/expect-utils": "npm:30.0.2" - "@jest/get-type": "npm:30.0.1" - jest-matcher-utils: "npm:30.0.2" - jest-message-util: "npm:30.0.2" - jest-mock: "npm:30.0.2" - jest-util: "npm:30.0.2" - checksum: 10c0/c313c2afcee52e3d333ace771f88056230a689f0e5b4bad944841635f028e07c2eb3947568a032391e8c055439accb3b381d4832114a272bbd94bcd9953b1db0 - languageName: node - linkType: hard - "exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 languageName: node linkType: hard @@ -8098,6 +10204,34 @@ __metadata: languageName: node linkType: hard +"extend-shallow@npm:^1.1.2": + version: 1.1.4 + resolution: "extend-shallow@npm:1.1.4" + dependencies: + kind-of: "npm:^1.1.0" + checksum: 10c0/f3509ee4ed8894ea109de203f907a3bf7d55f62352f5aab1591bd64ca84663e06e6d484dcf80ff8566e6c523632e37b58f6c34d55d8f749ca51c28c0b7ce7004 + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: "npm:^0.1.0" + checksum: 10c0/ee1cb0a18c9faddb42d791b2d64867bd6cfd0f3affb711782eb6e894dd193e2934a7f529426aac7c8ddb31ac5d38000a00aa2caf08aa3dfc3e1c8ff6ba340bd9 + languageName: node + linkType: hard + +"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": + version: 3.0.2 + resolution: "extend-shallow@npm:3.0.2" + dependencies: + assign-symbols: "npm:^1.0.0" + is-extendable: "npm:^1.0.1" + checksum: 10c0/f39581b8f98e3ad94995e33214fff725b0297cf09f2725b6f624551cfb71e0764accfd0af80becc0182af5014d2a57b31b85ec999f9eb8a6c45af81752feac9a + languageName: node + linkType: hard + "extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -8105,6 +10239,17 @@ __metadata: languageName: node linkType: hard +"external-editor@npm:^2.0.4": + version: 2.2.0 + resolution: "external-editor@npm:2.2.0" + dependencies: + chardet: "npm:^0.4.0" + iconv-lite: "npm:^0.4.17" + tmp: "npm:^0.0.33" + checksum: 10c0/5440df6ab809467485b3b15557d301e9fa3dda2892d6eaddd036ea337e0ced3e369c319507a123e34749cfce89c51f891848d249c713f54bcfaf95296663ff49 + languageName: node + linkType: hard + "external-editor@npm:^3.0.3": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -8116,6 +10261,22 @@ __metadata: languageName: node linkType: hard +"extglob@npm:^2.0.4": + version: 2.0.4 + resolution: "extglob@npm:2.0.4" + dependencies: + array-unique: "npm:^0.3.2" + define-property: "npm:^1.0.0" + expand-brackets: "npm:^2.1.4" + extend-shallow: "npm:^2.0.1" + fragment-cache: "npm:^0.2.1" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.1" + checksum: 10c0/e1a891342e2010d046143016c6c03d58455c2c96c30bf5570ea07929984ee7d48fad86b363aee08f7a8a638f5c3a66906429b21ecb19bc8e90df56a001cd282c + languageName: node + linkType: hard + "extract-zip@npm:2.0.1": version: 2.0.1 resolution: "extract-zip@npm:2.0.1" @@ -8147,6 +10308,18 @@ __metadata: languageName: node linkType: hard +"fancy-log@npm:^1.3.2": + version: 1.3.3 + resolution: "fancy-log@npm:1.3.3" + dependencies: + ansi-gray: "npm:^0.1.1" + color-support: "npm:^1.1.3" + parse-node-version: "npm:^1.0.0" + time-stamp: "npm:^1.0.0" + checksum: 10c0/2fd9070191c8671065fbe3523d283b4a4eb240e37121e99b3b3260b2ea2934961b166cf48dcadeb6cdce877039e27499f1403808b455bd29b1b66060a03eb041 + languageName: node + linkType: hard + "faro-web-sdk@workspace:.": version: 0.0.0-use.local resolution: "faro-web-sdk@workspace:." @@ -8198,22 +10371,22 @@ __metadata: linkType: hard "fast-diff@npm:^1.1.2": - version: 1.2.0 - resolution: "fast-diff@npm:1.2.0" - checksum: 10c0/2fbcb23957fb0bc920832a94ba627b860400f9cce45e1594e931dabf62e858369a58c6c2603e2ecc4f7679580f710b5b5b6e698a355a9a9bfcfd93c06c7c4350 + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 languageName: node linkType: hard "fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" dependencies: "@nodelib/fs.stat": "npm:^2.0.2" "@nodelib/fs.walk": "npm:^1.2.3" glob-parent: "npm:^5.1.2" merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe languageName: node linkType: hard @@ -8231,16 +10404,27 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:^4.0.12": + version: 4.5.3 + resolution: "fast-xml-parser@npm:4.5.3" + dependencies: + strnum: "npm:^1.1.1" + bin: + fxparser: src/cli/cli.js + checksum: 10c0/bf9ccadacfadc95f6e3f0e7882a380a7f219cf0a6f96575149f02cb62bf44c3b7f0daee75b8ff3847bcfd7fbcb201e402c71045936c265cf6d94b141ec4e9327 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" + version: 1.19.1 + resolution: "fastq@npm:1.19.1" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/5ce4f83afa5f88c9379e67906b4d31bc7694a30826d6cc8d0f0473c966929017fda65c2174b0ec89f064ede6ace6c67f8a4fe04cef42119b6a55b0d465554c24 + checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 languageName: node linkType: hard -"fb-watchman@npm:^2.0.2": +"fb-watchman@npm:^2.0.0, fb-watchman@npm:^2.0.2": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" dependencies: @@ -8249,6 +10433,47 @@ __metadata: languageName: node linkType: hard +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 10c0/dfb64116b125a64abecca9e31477b5edb9a2332c5ffe74326fe36e0a72eef7fc8a49b86adf36c2c293078d79f4524f35e80f5e62546395f53fb7c9e69821f54f + languageName: node + linkType: hard + +"fbjs-scripts@npm:^1.1.0": + version: 1.2.0 + resolution: "fbjs-scripts@npm:1.2.0" + dependencies: + "@babel/core": "npm:^7.0.0" + ansi-colors: "npm:^1.0.1" + babel-preset-fbjs: "npm:^3.2.0" + core-js: "npm:^2.4.1" + cross-spawn: "npm:^5.1.0" + fancy-log: "npm:^1.3.2" + object-assign: "npm:^4.0.1" + plugin-error: "npm:^0.1.2" + semver: "npm:^5.1.0" + through2: "npm:^2.0.0" + checksum: 10c0/aee6ed68cd71d2dae08ad2ef345ba04a9ecb11ff4de7a0fe20bfcaeab750e5a1652a6ee2156401e4c23b420b1d10a00c4cf856b0547f0bf3f24a8045153f5f05 + languageName: node + linkType: hard + +"fbjs@npm:^1.0.0": + version: 1.0.0 + resolution: "fbjs@npm:1.0.0" + dependencies: + core-js: "npm:^2.4.1" + fbjs-css-vars: "npm:^1.0.0" + isomorphic-fetch: "npm:^2.1.1" + loose-envify: "npm:^1.0.0" + object-assign: "npm:^4.1.0" + promise: "npm:^7.1.1" + setimmediate: "npm:^1.0.5" + ua-parser-js: "npm:^0.7.18" + checksum: 10c0/b220a28f708335db2e3fd51f5528d70ed37251d85f76c6eb08a81c5a22378d0e5fadd8d4048946b783ecdfe84afd6919f6eb1d7087f50531a7794e568f9cbbd9 + languageName: node + linkType: hard + "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -8286,6 +10511,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce + languageName: node + linkType: hard + "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -8295,7 +10529,14 @@ __metadata: languageName: node linkType: hard -"filelist@npm:^1.0.1": +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" dependencies: @@ -8304,24 +10545,36 @@ __metadata: languageName: node linkType: hard -"filing-cabinet@npm:^5.0.1": - version: 5.0.2 - resolution: "filing-cabinet@npm:5.0.2" +"filing-cabinet@npm:^5.0.3": + version: 5.0.3 + resolution: "filing-cabinet@npm:5.0.3" dependencies: app-module-path: "npm:^2.2.0" - commander: "npm:^12.0.0" - enhanced-resolve: "npm:^5.16.0" - module-definition: "npm:^6.0.0" - module-lookup-amd: "npm:^9.0.1" - resolve: "npm:^1.22.8" - resolve-dependency-path: "npm:^4.0.0" - sass-lookup: "npm:^6.0.1" - stylus-lookup: "npm:^6.0.0" + commander: "npm:^12.1.0" + enhanced-resolve: "npm:^5.18.0" + module-definition: "npm:^6.0.1" + module-lookup-amd: "npm:^9.0.3" + resolve: "npm:^1.22.10" + resolve-dependency-path: "npm:^4.0.1" + sass-lookup: "npm:^6.1.0" + stylus-lookup: "npm:^6.1.0" tsconfig-paths: "npm:^4.2.0" - typescript: "npm:^5.4.4" + typescript: "npm:^5.7.3" bin: filing-cabinet: bin/cli.js - checksum: 10c0/0e292d18f9029d7943f0b359aebd5dadd295a6d544e2cf1b01b8837aaeab251a2322e2e0cc90f4a493e0749a42c4864d26a8bcbc90ea2f69832c68368bc21790 + checksum: 10c0/4640fa6ccc93b1c832125644b1a374b3a9f1934cef83eb7570e604ee4d97fae2bf6f07e802c5f038c72c8b9114974996e8b7a72500d5f9dc4886a42d0ee41654 + languageName: node + linkType: hard + +"fill-range@npm:^4.0.0": + version: 4.0.0 + resolution: "fill-range@npm:4.0.0" + dependencies: + extend-shallow: "npm:^2.0.1" + is-number: "npm:^3.0.0" + repeat-string: "npm:^1.6.1" + to-regex-range: "npm:^2.1.0" + checksum: 10c0/ccd57b7c43d7e28a1f8a60adfa3c401629c08e2f121565eece95e2386ebc64dedc7128d8c3448342aabf19db0c55a34f425f148400c7a7be9a606ba48749e089 languageName: node linkType: hard @@ -8334,6 +10587,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + on-finished: "npm:~2.3.0" + parseurl: "npm:~1.3.3" + statuses: "npm:~1.5.0" + unpipe: "npm:~1.0.0" + checksum: 10c0/6a96e1f5caab085628c11d9fdceb82ba608d5e426c6913d4d918409baa271037a47f28fbba73279e8ad614f0b8fa71ea791d265e408d760793829edd8c2f4584 + languageName: node + linkType: hard + "finalhandler@npm:^2.1.0": version: 2.1.0 resolution: "finalhandler@npm:2.1.0" @@ -8348,6 +10616,17 @@ __metadata: languageName: node linkType: hard +"find-cache-dir@npm:^2.0.0": + version: 2.1.0 + resolution: "find-cache-dir@npm:2.1.0" + dependencies: + commondir: "npm:^1.0.1" + make-dir: "npm:^2.0.0" + pkg-dir: "npm:^3.0.0" + checksum: 10c0/556117fd0af14eb88fb69250f4bba9e905e7c355c6136dff0e161b9cbd1f5285f761b778565a278da73a130f42eccc723d7ad4c002ae547ed1d698d39779dabb + languageName: node + linkType: hard + "find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -8357,6 +10636,15 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: "npm:^3.0.0" + checksum: 10c0/2c2e7d0a26db858e2f624f39038c74739e38306dee42b45f404f770db357947be9d0d587f1cac72d20c114deb38aa57316e879eb0a78b17b46da7dab0a3bd6e3 + languageName: node + linkType: hard + "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -8378,12 +10666,13 @@ __metadata: linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - flatted: "npm:^3.1.0" + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" rimraf: "npm:^3.0.2" - checksum: 10c0/f274dcbadb09ad8d7b6edf2ee9b034bc40bf0c12638f6c4084e9f1d39208cb104a5ebbb24b398880ef048200eaa116852f73d2d8b72e8c9627aba8c3e27ca057 + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 languageName: node linkType: hard @@ -8396,10 +10685,31 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 10c0/207a87c7abfc1ea6928ea16bac84f9eaa6d44d365620ece419e5c41cf44a5e9902b4c1f59c9605771b10e4565a0cb46e99d78e0464e8aabb42c97de880642257 +"flatted@npm:^3.2.9": + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 + languageName: node + linkType: hard + +"flow-enums-runtime@npm:^0.0.5": + version: 0.0.5 + resolution: "flow-enums-runtime@npm:0.0.5" + checksum: 10c0/8e6c915e536612a918444721cd40afa1ea7ad4fd039ce5958b4f9b6f77f283b1ad50a5ae72fffc9a2bc120219dd6d3e595f110ec885fdebcad291223d8e05bac + languageName: node + linkType: hard + +"flow-parser@npm:0.*": + version: 0.278.0 + resolution: "flow-parser@npm:0.278.0" + checksum: 10c0/53d30c1e9ee1b0fa6901fd784cdd8aaed9a19720add66213837d9c9aaca3d53226ee8d587b81e3d03e53461733590b76e0bf9ad2c6ca33491ff92f6b97f0b75c + languageName: node + linkType: hard + +"flow-parser@npm:^0.206.0": + version: 0.206.0 + resolution: "flow-parser@npm:0.206.0" + checksum: 10c0/63dedf1d7c16bd28b58ff1b827d6f58470a76e9d97de8516ee031ce0df2a52348b6f653032baebe14bbaea7f5ede6892dbe56d296590eab803ed33ede3f2785e languageName: node linkType: hard @@ -8411,25 +10721,16 @@ __metadata: linkType: hard "follow-redirects@npm:^1.15.6": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" peerDependenciesMeta: debug: optional: true - checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 languageName: node linkType: hard -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: "npm:^1.1.3" - checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa - languageName: node - linkType: hard - -"for-each@npm:^0.3.5": +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" dependencies: @@ -8438,13 +10739,20 @@ __metadata: languageName: node linkType: hard -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" +"for-in@npm:^1.0.2": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 10c0/42bb609d564b1dc340e1996868b67961257fd03a48d7fdafd4f5119530b87f962be6b4d5b7e3a3fc84c9854d149494b1d358e0b0ce9837e64c4c6603a49451d6 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0, foreground-child@npm:^3.3.1": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" dependencies: - cross-spawn: "npm:^7.0.0" + cross-spawn: "npm:^7.0.6" signal-exit: "npm:^4.0.1" - checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 languageName: node linkType: hard @@ -8455,7 +10763,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0, form-data@npm:^4.0.4, form-data@npm:~4.0.4": +"form-data@npm:^4.0.4, form-data@npm:~4.0.4": version: 4.0.4 resolution: "form-data@npm:4.0.4" dependencies: @@ -8482,6 +10790,22 @@ __metadata: languageName: node linkType: hard +"fragment-cache@npm:^0.2.1": + version: 0.2.1 + resolution: "fragment-cache@npm:0.2.1" + dependencies: + map-cache: "npm:^0.2.2" + checksum: 10c0/5891d1c1d1d5e1a7fb3ccf28515c06731476fa88f7a50f4ede8a0d8d239a338448e7f7cc8b73db48da19c229fa30066104fe6489862065a4f1ed591c42fbeabf + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + "fresh@npm:^2.0.0": version: 2.0.0 resolution: "fresh@npm:2.0.0" @@ -8512,14 +10836,36 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-extra@npm:1.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + jsonfile: "npm:^2.1.0" + klaw: "npm:^1.0.0" + checksum: 10c0/1128e46b3364f458ca07fbd186a05010b05255ad6ab17abc2a262086600f1925a9e5a259b9436ee42f57875e9ebb171348f25d4289fecd395b05488db9ceeda8 + languageName: node + linkType: hard + "fs-extra@npm:^11.2.0": - version: 11.2.0 - resolution: "fs-extra@npm:11.2.0" + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" dependencies: graceful-fs: "npm:^4.2.0" jsonfile: "npm:^6.0.1" universalify: "npm:^2.0.0" - checksum: 10c0/d77a9a9efe60532d2e790e938c81a02c1b24904ef7a3efb3990b835514465ba720e99a6ea56fd5e2db53b4695319b644d76d5a0e9988a2beef80aa7b1da63398 + checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 languageName: node linkType: hard @@ -8560,38 +10906,40 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.3, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" +"fsevents@npm:^1.2.7": + version: 1.2.13 + resolution: "fsevents@npm:1.2.13" dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + bindings: "npm:^1.5.0" + nan: "npm:^2.12.1" + checksum: 10c0/4427ff08db9ee7327f2c3ad58ec56f9096a917eed861bfffaa2e2be419479cdf37d00750869ab9ecbf5f59f32ad999bd59577d73fc639193e6c0ce52bb253e02 conditions: os=darwin languageName: node linkType: hard -"fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" +"fsevents@npm:^2.3.2, fsevents@npm:^2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: "npm:latest" - checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" +"fsevents@patch:fsevents@npm%3A^1.2.7#optional!builtin": + version: 1.2.13 + resolution: "fsevents@patch:fsevents@npm%3A1.2.13#optional!builtin::version=1.2.13&hash=d11327" dependencies: - node-gyp: "npm:latest" + bindings: "npm:^1.5.0" + nan: "npm:^2.12.1" conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: node-gyp: "npm:latest" conditions: os=darwin @@ -8605,19 +10953,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.6": - version: 1.1.6 - resolution: "function.prototype.name@npm:1.1.6" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - functions-have-names: "npm:^1.2.3" - checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.8": +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": version: 1.1.8 resolution: "function.prototype.name@npm:1.1.8" dependencies: @@ -8645,17 +10981,17 @@ __metadata: languageName: node linkType: hard -"get-amd-module-type@npm:^6.0.0": - version: 6.0.0 - resolution: "get-amd-module-type@npm:6.0.0" +"get-amd-module-type@npm:^6.0.1": + version: 6.0.1 + resolution: "get-amd-module-type@npm:6.0.1" dependencies: - ast-module-types: "npm:^6.0.0" - node-source-walk: "npm:^7.0.0" - checksum: 10c0/58e25d33aa36d23f4ce827c44059400c5ddf39e4ada71bcfd3c11795705846ed81f16094b36df54f2942d00b588b21851f7c906e168acf7c985a65f3f16042ec + ast-module-types: "npm:^6.0.1" + node-source-walk: "npm:^7.0.1" + checksum: 10c0/23afae042834ac57cbe6da6e9f285dab19067c16a283efbb5abc82ffed1213ecaf12c90bbe1d731562e9057373f843541441316b9a405cc426a123d1172e45b8 languageName: node linkType: hard -"get-caller-file@npm:^2.0.5": +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde @@ -8669,38 +11005,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": - version: 1.2.7 - resolution: "get-intrinsic@npm:1.2.7" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - function-bind: "npm:^1.1.2" - get-proto: "npm:^1.0.0" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.3.0": +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": version: 1.3.0 resolution: "get-intrinsic@npm:1.3.0" dependencies: @@ -8770,6 +11075,15 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^4.0.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/294d876f667694a5ca23f0ca2156de67da950433b6fb53024833733975d32582896dbc7f257842d331809979efccf04d5e0b6b75ad4d45744c45f193fd497539 + languageName: node + linkType: hard + "get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -8786,17 +11100,6 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.2": - version: 1.0.2 - resolution: "get-symbol-description@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.5" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc - languageName: node - linkType: hard - "get-symbol-description@npm:^1.1.0": version: 1.1.0 resolution: "get-symbol-description@npm:1.1.0" @@ -8808,6 +11111,13 @@ __metadata: languageName: node linkType: hard +"get-value@npm:^2.0.3, get-value@npm:^2.0.6": + version: 2.0.6 + resolution: "get-value@npm:2.0.6" + checksum: 10c0/f069c132791b357c8fc4adfe9e2929b0a2c6e95f98ca7bc6fcbc27f8a302e552f86b4ae61ec56d9e9ac2544b93b6a39743d479866a37b43fcc104088ba74f0d9 + languageName: node + linkType: hard + "getos@npm:^3.2.1": version: 3.2.1 resolution: "getos@npm:3.2.1" @@ -8923,7 +11233,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.3": +"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.3": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -8950,18 +11260,18 @@ __metadata: linkType: hard "glob@npm:~11.0.2": - version: 11.0.2 - resolution: "glob@npm:11.0.2" + version: 11.0.3 + resolution: "glob@npm:11.0.3" dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^4.0.1" - minimatch: "npm:^10.0.0" + foreground-child: "npm:^3.3.1" + jackspeak: "npm:^4.1.1" + minimatch: "npm:^10.0.3" minipass: "npm:^7.1.2" package-json-from-dist: "npm:^1.0.0" path-scurry: "npm:^2.0.0" bin: glob: dist/esm/bin.mjs - checksum: 10c0/49f91c64ca882d5e3a72397bd45a146ca91fd3ca53dafb5254daf6c0e83fc510d39ea66f136f9ac7ca075cdd11fbe9aaa235b28f743bd477622e472f4fdc0240 + checksum: 10c0/7d24457549ec2903920dfa3d8e76850e7c02aa709122f0164b240c712f5455c0b457e6f2a1eee39344c6148e39895be8094ae8cfef7ccc3296ed30bce250c661 languageName: node linkType: hard @@ -8974,28 +11284,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - "globals@npm:^13.19.0": - version: 13.19.0 - resolution: "globals@npm:13.19.0" + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: type-fest: "npm:^0.20.2" - checksum: 10c0/d2bb3164ed9f5ec82b91e96d6a5ffc1cca3cb10f6c41df9687cd7712ba82f5534ed028b11c5717d71c938403bf8ffc97bb06f5f2eab8c1b91e6273b08b33b5e6 - languageName: node - linkType: hard - -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" - dependencies: - define-properties: "npm:^1.1.3" - checksum: 10c0/0db6e9af102a5254630351557ac15e6909bc7459d3e3f6b001e59fe784c96d31108818f032d9095739355a88467459e6488ff16584ee6250cd8c27dec05af4b0 + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd languageName: node linkType: hard @@ -9034,23 +11328,14 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.1.3" - checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead languageName: node linkType: hard -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -9089,10 +11374,10 @@ __metadata: languageName: node linkType: hard -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 languageName: node linkType: hard @@ -9110,7 +11395,7 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1, has-property-descriptors@npm:^1.0.2": +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: @@ -9119,13 +11404,6 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 - languageName: node - linkType: hard - "has-proto@npm:^1.2.0": version: 1.2.0 resolution: "has-proto@npm:1.2.0" @@ -9135,21 +11413,14 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 - languageName: node - linkType: hard - -"has-symbols@npm:^1.1.0": +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": version: 1.1.0 resolution: "has-symbols@npm:1.1.0" checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -9165,6 +11436,45 @@ __metadata: languageName: node linkType: hard +"has-value@npm:^0.3.1": + version: 0.3.1 + resolution: "has-value@npm:0.3.1" + dependencies: + get-value: "npm:^2.0.3" + has-values: "npm:^0.1.4" + isobject: "npm:^2.0.0" + checksum: 10c0/7a7c2e9d07bc9742c81806150adb154d149bc6155267248c459cd1ce2a64b0759980d26213260e4b7599c8a3754551179f155ded88d0533a0d2bc7bc29028432 + languageName: node + linkType: hard + +"has-value@npm:^1.0.0": + version: 1.0.0 + resolution: "has-value@npm:1.0.0" + dependencies: + get-value: "npm:^2.0.6" + has-values: "npm:^1.0.0" + isobject: "npm:^3.0.0" + checksum: 10c0/17cdccaf50f8aac80a109dba2e2ee5e800aec9a9d382ef9deab66c56b34269e4c9ac720276d5ffa722764304a1180ae436df077da0dd05548cfae0209708ba4d + languageName: node + linkType: hard + +"has-values@npm:^0.1.4": + version: 0.1.4 + resolution: "has-values@npm:0.1.4" + checksum: 10c0/a8f00ad862c20289798c35243d5bd0b0a97dd44b668c2204afe082e0265f2d0bf3b89fc8cc0ef01a52b49f10aa35cf85c336ee3a5f1cac96ed490f5e901cdbf2 + languageName: node + linkType: hard + +"has-values@npm:^1.0.0": + version: 1.0.0 + resolution: "has-values@npm:1.0.0" + dependencies: + is-number: "npm:^3.0.0" + kind-of: "npm:^4.0.0" + checksum: 10c0/a6f2a1cc6b2e43eacc68e62e71ad6890def7f4b13d2ef06b4ad3ee156c23e470e6df144b9b467701908e17633411f1075fdff0cab45fb66c5e0584d89b25f35e + languageName: node + linkType: hard + "hasha@npm:5.2.2": version: 5.2.2 resolution: "hasha@npm:5.2.2" @@ -9175,7 +11485,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -9184,6 +11494,38 @@ __metadata: languageName: node linkType: hard +"hermes-engine@npm:~0.5.0": + version: 0.5.1 + resolution: "hermes-engine@npm:0.5.1" + checksum: 10c0/6652dc6b0ad97aadc80d376971911a9a5f15522740a226ff5b042244c4cc878a014d943be35cd08bd9e31da9392ac7994777149dc06960ce0b16c807e5b5f127 + languageName: node + linkType: hard + +"hermes-estree@npm:0.12.0": + version: 0.12.0 + resolution: "hermes-estree@npm:0.12.0" + checksum: 10c0/df16c382b1d899dc1ce5dd716ca7b3191fd6e065138db3b7981ef87e1216d39798f5f951eb2534cfa40193ab771214ef030ec4e8ad4a8ae5007435ebdf9abacd + languageName: node + linkType: hard + +"hermes-parser@npm:0.12.0": + version: 0.12.0 + resolution: "hermes-parser@npm:0.12.0" + dependencies: + hermes-estree: "npm:0.12.0" + checksum: 10c0/329f7a5c2028e9d2e3e0008865e5a7a7ef847c9425183b696a1f043f42f72e7a438368d978904c22adefc1212f3b867f48842e62c2159a5704a677bfc1a5a87e + languageName: node + linkType: hard + +"hermes-profile-transformer@npm:^0.0.6": + version: 0.0.6 + resolution: "hermes-profile-transformer@npm:0.0.6" + dependencies: + source-map: "npm:^0.7.3" + checksum: 10c0/d772faa712f97ec009cb8de1f6b2dc26af491d1baaea92af7649fbb9cafd60a9c7a499de32d23ba7606e501147bfb2daf14e477c967f11e3de8a1e41ecf626c7 + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -9235,9 +11577,9 @@ __metadata: linkType: hard "http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 languageName: node linkType: hard @@ -9275,17 +11617,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.6": +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" dependencies: @@ -9327,7 +11659,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.4.24": +"iconv-lite@npm:^0.4.17, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -9367,9 +11699,29 @@ __metadata: linkType: hard "ignore@npm:~7.0.4": - version: 7.0.4 - resolution: "ignore@npm:7.0.4" - checksum: 10c0/90e1f69ce352b9555caecd9cbfd07abe7626d312a6f90efbbb52c7edca6ea8df065d66303863b30154ab1502afb2da8bc59d5b04e1719a52ef75bbf675c488eb + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d + languageName: node + linkType: hard + +"image-size@npm:^0.6.0": + version: 0.6.3 + resolution: "image-size@npm:0.6.3" + bin: + image-size: bin/image-size.js + checksum: 10c0/693464c665191cb4cbfc7e3923e977bcd89f51c891ec70d0133094f12096e41230de713d0fd4b10615ddff7dc14fc1af0c33e70954e3f002190306e6fa888943 + languageName: node + linkType: hard + +"image-size@npm:^1.0.2": + version: 1.2.1 + resolution: "image-size@npm:1.2.1" + dependencies: + queue: "npm:6.0.2" + bin: + image-size: bin/image-size.js + checksum: 10c0/f8b3c19d4476513f1d7e55c3e6db80997b315444743e2040d545cbcaee59be03d2eb40c46be949a8372697b7003fdb0c04925d704390a7f606bc8181e25c0ed4 languageName: node linkType: hard @@ -9381,31 +11733,41 @@ __metadata: linkType: hard "immutable@npm:^5.0.2": - version: 5.0.3 - resolution: "immutable@npm:5.0.3" - checksum: 10c0/3269827789e1026cd25c2ea97f0b2c19be852ffd49eda1b674b20178f73d84fa8d945ad6f5ac5bc4545c2b4170af9f6e1f77129bc1cae7974a4bf9b04a9cdfb9 + version: 5.1.3 + resolution: "immutable@npm:5.1.3" + checksum: 10c0/f094891dcefb9488a84598376c9218ebff3a130c8b807bda3f6b703c45fe7ef238b8bf9a1eb9961db0523c8d7eb116ab6f47166702e4bbb1927ff5884157cd97 + languageName: node + linkType: hard + +"import-fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "import-fresh@npm:2.0.0" + dependencies: + caller-path: "npm:^2.0.0" + resolve-from: "npm:^3.0.0" + checksum: 10c0/116c55ee5215a7839062285b60df85dbedde084c02111dc58c1b9d03ff7876627059f4beb16cdc090a3db21fea9022003402aa782139dc8d6302589038030504 languageName: node linkType: hard "import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" dependencies: parent-module: "npm:^1.0.0" resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec languageName: node linkType: hard "import-in-the-middle@npm:^1.8.1": - version: 1.13.1 - resolution: "import-in-the-middle@npm:1.13.1" + version: 1.14.2 + resolution: "import-in-the-middle@npm:1.14.2" dependencies: acorn: "npm:^8.14.0" acorn-import-attributes: "npm:^1.9.5" cjs-module-lexer: "npm:^1.2.2" module-details-from-path: "npm:^1.0.3" - checksum: 10c0/4ef05a924c37ff718dd08654927c90d470d92fd9425d646b0d423aaddc89655848debd14761bcb6efa4f57870d63ff38109bab31ca8a1d9d5df2e7d84d2649cf + checksum: 10c0/ee614a09d3772ad39f8005d798458e541cbfb897b8f97623f4bac527eecc51984586cfbf8f195715df5c463ec0b7fce8086489dc12f758ffe5ea485b8a29da01 languageName: node linkType: hard @@ -9507,6 +11869,28 @@ __metadata: languageName: node linkType: hard +"inquirer@npm:^3.0.6": + version: 3.3.0 + resolution: "inquirer@npm:3.3.0" + dependencies: + ansi-escapes: "npm:^3.0.0" + chalk: "npm:^2.0.0" + cli-cursor: "npm:^2.1.0" + cli-width: "npm:^2.0.0" + external-editor: "npm:^2.0.4" + figures: "npm:^2.0.0" + lodash: "npm:^4.3.0" + mute-stream: "npm:0.0.7" + run-async: "npm:^2.2.0" + rx-lite: "npm:^4.0.8" + rx-lite-aggregates: "npm:^4.0.8" + string-width: "npm:^2.1.0" + strip-ansi: "npm:^4.0.0" + through: "npm:^2.3.6" + checksum: 10c0/d17475d6446e177227f5707cbd89ae6027cc316791d433c1b64f7be14d54456227186a0b058d580d7bbaf10e7098b0a1a986833cf71a956aa6d4f78878e78d3c + languageName: node + linkType: hard + "inquirer@npm:^8.2.4": version: 8.2.6 resolution: "inquirer@npm:8.2.6" @@ -9530,17 +11914,6 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.7": - version: 1.0.7 - resolution: "internal-slot@npm:1.0.7" - dependencies: - es-errors: "npm:^1.3.0" - hasown: "npm:^2.0.0" - side-channel: "npm:^1.0.4" - checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c - languageName: node - linkType: hard - "internal-slot@npm:^1.1.0": version: 1.1.0 resolution: "internal-slot@npm:1.1.0" @@ -9552,7 +11925,7 @@ __metadata: languageName: node linkType: hard -"invariant@npm:^2.2.4": +"invariant@npm:*, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -9571,6 +11944,13 @@ __metadata: languageName: node linkType: hard +"ip@npm:^1.1.5": + version: 1.1.9 + resolution: "ip@npm:1.1.9" + checksum: 10c0/5af58bfe2110c9978acfd77a2ffcdf9d33a6ce1c72f49edbaf16958f7a8eb979b5163e43bb18938caf3aaa55cdacde4e470874c58ca3b4b112ea7a30461a0c27 + languageName: node + linkType: hard + "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -9578,6 +11958,15 @@ __metadata: languageName: node linkType: hard +"is-accessor-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-accessor-descriptor@npm:1.0.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/d034034074c5ffeb6c868e091083182279db1a956f49f8d1494cecaa0f8b99d706556ded2a9b20d9aa290549106eef8204d67d8572902e06dcb1add6db6b524d + languageName: node + linkType: hard + "is-alphabetical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphabetical@npm:2.0.1" @@ -9595,17 +11984,17 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.4": - version: 3.0.4 - resolution: "is-array-buffer@npm:3.0.4" +"is-arguments@npm:^1.0.4": + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" - checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc languageName: node linkType: hard -"is-array-buffer@npm:^3.0.5": +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" dependencies: @@ -9631,20 +12020,15 @@ __metadata: linkType: hard "is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/787bc931576aad525d751fc5ce211960fe91e49ac84a5c22d6ae0bc9541945fbc3f686dc590c3175722ce4f6d7b798a93f6f8ff4847fdb2199aea6f4baf5d668 - languageName: node - linkType: hard - -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" dependencies: - has-bigints: "npm:^1.0.1" - checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + async-function: "npm:^1.0.0" + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/d70c236a5e82de6fc4d44368ffd0c2fee2b088b893511ce21e679da275a5ecc6015ff59a7d7e1bdd7ca39f71a8dbdd253cf8cce5c6b3c91cdd5b42b5ce677298 languageName: node linkType: hard @@ -9666,27 +12050,24 @@ __metadata: languageName: node linkType: hard -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" +"is-boolean-object@npm:^1.2.1": + version: 1.2.2 + resolution: "is-boolean-object@npm:1.2.2" dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/36ff6baf6bd18b3130186990026f5a95c709345c39cd368468e6c1b6ab52201e9fd26d8e1f4c066357b4938b0f0401e1a5000e08257787c1a02f3a719457001e languageName: node linkType: hard -"is-boolean-object@npm:^1.2.1": - version: 1.2.1 - resolution: "is-boolean-object@npm:1.2.1" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 +"is-buffer@npm:^1.1.5": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 10c0/ae18aa0b6e113d6c490ad1db5e8df9bdb57758382b313f5a22c9c61084875c6396d50bbf49315f5b1926d142d74dfb8d31b40d993a383e0a158b15fea7a82234 languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f @@ -9704,6 +12085,17 @@ __metadata: languageName: node linkType: hard +"is-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: "npm:^2.0.0" + bin: + is-ci: bin.js + checksum: 10c0/17de4e2cd8f993c56c86472dd53dd9e2c7f126d0ee55afe610557046cdd64de0e8feadbad476edc9eeff63b060523b8673d9094ed2ab294b59efb5a66dd05a9a + languageName: node + linkType: hard + "is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1, is-core-module@npm:^2.5.0": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" @@ -9713,6 +12105,15 @@ __metadata: languageName: node linkType: hard +"is-data-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-descriptor@npm:1.0.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/ad3acc372e3227f87eb8cdba112c343ca2a67f1885aecf64f02f901cb0858a1fc9488ad42135ab102e9d9e71a62b3594740790bb103a9ba5da830a131a89e3e8 + languageName: node + linkType: hard + "is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": version: 1.0.2 resolution: "is-data-view@npm:1.0.2" @@ -9724,16 +12125,7 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e - languageName: node - linkType: hard - -"is-date-object@npm:^1.1.0": +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": version: 1.1.0 resolution: "is-date-object@npm:1.1.0" dependencies: @@ -9750,6 +12142,33 @@ __metadata: languageName: node linkType: hard +"is-descriptor@npm:^0.1.0": + version: 0.1.7 + resolution: "is-descriptor@npm:0.1.7" + dependencies: + is-accessor-descriptor: "npm:^1.0.1" + is-data-descriptor: "npm:^1.0.1" + checksum: 10c0/f5960b9783f508aec570465288cb673d4b3cc4aae4e6de970c3afd9a8fc1351edcb85d78b2cce2ec5251893a423f73263cab3bb94cf365a8d71b5d510a116392 + languageName: node + linkType: hard + +"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": + version: 1.0.3 + resolution: "is-descriptor@npm:1.0.3" + dependencies: + is-accessor-descriptor: "npm:^1.0.1" + is-data-descriptor: "npm:^1.0.1" + checksum: 10c0/b4ee667ea787d3a0be4e58536087fd0587de2b0b6672fbfe288f5b8d831ac4b79fd987f31d6c2d4e5543a42c97a87428bc5215ce292a1a47070147793878226f + languageName: node + linkType: hard + +"is-directory@npm:^0.3.1": + version: 0.3.1 + resolution: "is-directory@npm:0.3.1" + checksum: 10c0/1c39c7d1753b04e9483b89fb88908b8137ab4743b6f481947e97ccf93ecb384a814c8d3f0b95b082b149c5aa19c3e9e4464e2791d95174bce95998c26bb1974b + languageName: node + linkType: hard + "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -9759,6 +12178,22 @@ __metadata: languageName: node linkType: hard +"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 10c0/dd5ca3994a28e1740d1e25192e66eed128e0b2ff161a7ea348e87ae4f616554b486854de423877a2a2c171d5f7cd6e8093b91f54533bc88a59ee1c9838c43879 + languageName: node + linkType: hard + +"is-extendable@npm:^1.0.1": + version: 1.0.1 + resolution: "is-extendable@npm:1.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + checksum: 10c0/1d6678a5be1563db6ecb121331c819c38059703f0179f52aa80c242c223ee9c6b66470286636c0e63d7163e4d905c0a7d82a096e0b5eaeabb51b9f8d0af0d73f + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -9775,6 +12210,13 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -9805,12 +12247,15 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.10": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.0" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a languageName: node linkType: hard @@ -9875,15 +12320,6 @@ __metadata: languageName: node linkType: hard -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b - languageName: node - linkType: hard - "is-number-object@npm:^1.1.1": version: 1.1.1 resolution: "is-number-object@npm:1.1.1" @@ -9894,6 +12330,15 @@ __metadata: languageName: node linkType: hard +"is-number@npm:^3.0.0": + version: 3.0.0 + resolution: "is-number@npm:3.0.0" + dependencies: + kind-of: "npm:^3.0.2" + checksum: 10c0/e639c54640b7f029623df24d3d103901e322c0c25ea5bde97cd723c2d0d4c05857a8364ab5c58d963089dbed6bf1d0ffe975cb6aef917e2ad0ccbca653d31b4f + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -9901,7 +12346,7 @@ __metadata: languageName: node linkType: hard -"is-obj@npm:^1.0.1": +"is-obj@npm:^1.0.0, is-obj@npm:^1.0.1": version: 1.0.1 resolution: "is-obj@npm:1.0.1" checksum: 10c0/5003acba0af7aa47dfe0760e545a89bbac89af37c12092c3efadc755372cdaec034f130e7a3653a59eb3c1843cfc72ca71eaf1a6c3bafe5a0bab3611a47f9945 @@ -9929,7 +12374,7 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^2.0.4": +"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" dependencies: @@ -9961,16 +12406,6 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 - languageName: node - linkType: hard - "is-regex@npm:^1.2.1": version: 1.2.1 resolution: "is-regex@npm:1.2.1" @@ -9997,15 +12432,6 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "is-shared-array-buffer@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 - languageName: node - linkType: hard - "is-shared-array-buffer@npm:^1.0.4": version: 1.0.4 resolution: "is-shared-array-buffer@npm:1.0.4" @@ -10016,11 +12442,11 @@ __metadata: linkType: hard "is-ssh@npm:^1.4.0": - version: 1.4.0 - resolution: "is-ssh@npm:1.4.0" + version: 1.4.1 + resolution: "is-ssh@npm:1.4.1" dependencies: protocols: "npm:^2.0.1" - checksum: 10c0/3eb30d1bcb4507cd25562e7ac61a1c0aa31772134c67cec9c3afe6f4d57ec17e8c2892600a608e8e583f32f53f36465b8968c0305f2855cfbff95acfd049e113 + checksum: 10c0/021a7355cb032625d58db3cc8266ad9aa698cbabf460b71376a0307405577fd7d3aa0826c0bf1951d7809f134c0ee80403306f6d7633db94a5a3600a0106b398 languageName: node linkType: hard @@ -10031,6 +12457,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^1.0.1, is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -10038,15 +12471,6 @@ __metadata: languageName: node linkType: hard -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 - languageName: node - linkType: hard - "is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -10057,15 +12481,6 @@ __metadata: languageName: node linkType: hard -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" - dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 - languageName: node - linkType: hard - "is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": version: 1.1.1 resolution: "is-symbol@npm:1.1.1" @@ -10086,16 +12501,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.13": - version: 1.1.13 - resolution: "is-typed-array@npm:1.1.13" - dependencies: - which-typed-array: "npm:^1.1.14" - checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": version: 1.1.15 resolution: "is-typed-array@npm:1.1.15" dependencies: @@ -10139,25 +12545,7 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 - languageName: node - linkType: hard - -"is-weakref@npm:^1.1.0": - version: 1.1.0 - resolution: "is-weakref@npm:1.1.0" - dependencies: - call-bound: "npm:^1.0.2" - checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b - languageName: node - linkType: hard - -"is-weakref@npm:^1.1.1": +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": version: 1.1.1 resolution: "is-weakref@npm:1.1.1" dependencies: @@ -10176,6 +12564,20 @@ __metadata: languageName: node linkType: hard +"is-windows@npm:^1.0.2": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 10c0/b32f418ab3385604a66f1b7a3ce39d25e8881dee0bd30816dc8344ef6ff9df473a732bcc1ec4e84fe99b2f229ae474f7133e8e93f9241686cfcf7eebe53ba7a5 + languageName: node + linkType: hard + +"is-wsl@npm:^1.1.0": + version: 1.1.0 + resolution: "is-wsl@npm:1.1.0" + checksum: 10c0/7ad0012f21092d6f586c7faad84755a8ef0da9b9ec295e4dc82313cce4e1a93a3da3c217265016461f9b141503fe55fa6eb1fd5457d3f05e8d1bdbb48e50c13a + languageName: node + linkType: hard + "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -10185,6 +12587,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:1.0.0, isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -10192,13 +12601,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -10213,13 +12615,32 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^3.0.1": +"isobject@npm:^2.0.0": + version: 2.1.0 + resolution: "isobject@npm:2.1.0" + dependencies: + isarray: "npm:1.0.0" + checksum: 10c0/c4cafec73b3b2ee11be75dff8dafd283b5728235ac099b07d7873d5182553a707768e208327bbc12931b9422d8822280bf88d894a0024ff5857b3efefb480e7b + languageName: node + linkType: hard + +"isobject@npm:^3.0.0, isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db languageName: node linkType: hard +"isomorphic-fetch@npm:^2.1.1": + version: 2.2.1 + resolution: "isomorphic-fetch@npm:2.2.1" + dependencies: + node-fetch: "npm:^1.0.1" + whatwg-fetch: "npm:>=0.10.0" + checksum: 10c0/ea9fd37d31ec7b35b82180e1946d4a2f512506d0559fa567ec6ee6701ff1c6d924be90e75499c50982274b707e03ecd9eaa21d618872dd0deff530e4c3bdb074 + languageName: node + linkType: hard + "isomorphic-fetch@npm:^3.0.0": version: 3.0.0 resolution: "isomorphic-fetch@npm:3.0.0" @@ -10238,9 +12659,9 @@ __metadata: linkType: hard "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: 10c0/10ecb00a50cac2f506af8231ce523ffa1ac1310db0435c8ffaabb50c1d72539906583aa13c84f8835dc103998b9989edc3c1de989d2e2a96a91a9ba44e5db6b9 + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b languageName: node linkType: hard @@ -10258,13 +12679,13 @@ __metadata: linkType: hard "istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" dependencies: istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^3.0.0" + make-dir: "npm:^4.0.0" supports-color: "npm:^7.1.0" - checksum: 10c0/81b0d5187c7603ed71bdea0b701a7329f8146549ca19aa26d91b4a163aea756f9d55c1a6dc1dcd087e24dfcb99baa69e266a68644fbfd5dc98107d6f6f5948d2 + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 languageName: node linkType: hard @@ -10280,12 +12701,12 @@ __metadata: linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" dependencies: html-escaper: "npm:^2.0.0" istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/3a147171bffdbd3034856410b6ec81637871d17d10986513328fec23df6b666f66bd08ea480f5b7a5b9f7e8abc30f3e3c2e7d1b661fc57cdc479aaaa677b1011 + checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 languageName: node linkType: hard @@ -10316,26 +12737,25 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^4.0.1": - version: 4.1.0 - resolution: "jackspeak@npm:4.1.0" +"jackspeak@npm:^4.1.1": + version: 4.1.1 + resolution: "jackspeak@npm:4.1.1" dependencies: "@isaacs/cliui": "npm:^8.0.2" - checksum: 10c0/08a6a24a366c90b83aef3ad6ec41dcaaa65428ffab8d80bc7172add0fbb8b134a34f415ad288b2a6fbd406526e9a62abdb40ed4f399fbe00cb45c44056d4dce0 + checksum: 10c0/84ec4f8e21d6514db24737d9caf65361511f75e5e424980eebca4199f400874f45e562ac20fa8aeb1dd20ca2f3f81f0788b6e9c3e64d216a5794fd6f30e0e042 languageName: node linkType: hard "jake@npm:^10.8.5": - version: 10.8.5 - resolution: "jake@npm:10.8.5" + version: 10.9.4 + resolution: "jake@npm:10.9.4" dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.1" - minimatch: "npm:^3.0.4" + async: "npm:^3.2.6" + filelist: "npm:^1.0.4" + picocolors: "npm:^1.1.1" bin: - jake: ./bin/cli.js - checksum: 10c0/fc1f59c291b1c5bafad8ccde0e5d97f5f22ceb857f204f15634011e642b9cdf652dae2943b5ffe5ab037fe2f77b263653911ed2a408b2887a6dee31873e5c3d8 + jake: bin/cli.js + checksum: 10c0/bb52f000340d4a32f1a3893b9abe56ef2b77c25da4dbf2c0c874a8159d082dddda50a5ad10e26060198bd645b928ba8dba3b362710f46a247e335321188c5a9c languageName: node linkType: hard @@ -10446,18 +12866,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:30.0.2": - version: 30.0.2 - resolution: "jest-diff@npm:30.0.2" - dependencies: - "@jest/diff-sequences": "npm:30.0.1" - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - pretty-format: "npm:30.0.2" - checksum: 10c0/dada50ab8d4c1c907bb4728963d43d812cc391a114f0361356b0e51dcd9461936f0a6b27a3429cb3adb9164eaa78182667836440298ddab39319a9350b445a43 - languageName: node - linkType: hard - "jest-diff@npm:30.0.5": version: 30.0.5 resolution: "jest-diff@npm:30.0.5" @@ -10537,6 +12945,27 @@ __metadata: languageName: node linkType: hard +"jest-environment-node@npm:^29.2.1": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b + languageName: node + linkType: hard + +"jest-get-type@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-get-type@npm:24.9.0" + checksum: 10c0/af1da287a14e5de5888b0114e92cd4042050852d32982d412e1465a8d69cb0a22702c7c491c56eb664e05a1391c1d6eeeb840e249a76d4f6159c402a4dfde56d + languageName: node + linkType: hard + "jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" @@ -10566,6 +12995,29 @@ __metadata: languageName: node linkType: hard +"jest-haste-map@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-haste-map@npm:24.9.0" + dependencies: + "@jest/types": "npm:^24.9.0" + anymatch: "npm:^2.0.0" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^1.2.7" + graceful-fs: "npm:^4.1.15" + invariant: "npm:^2.2.4" + jest-serializer: "npm:^24.9.0" + jest-util: "npm:^24.9.0" + jest-worker: "npm:^24.9.0" + micromatch: "npm:^3.1.10" + sane: "npm:^4.0.3" + walker: "npm:^1.0.7" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/734e52354c95d1982eb4a40e9663119952bd17364b67dcf9757893956c4d3a370199531c29cab70636ab005582172b89d46553cc0afedfd343a7600b4913a81e + languageName: node + linkType: hard + "jest-leak-detector@npm:30.0.5": version: 30.0.5 resolution: "jest-leak-detector@npm:30.0.5" @@ -10576,18 +13028,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:30.0.2": - version: 30.0.2 - resolution: "jest-matcher-utils@npm:30.0.2" - dependencies: - "@jest/get-type": "npm:30.0.1" - chalk: "npm:^4.1.2" - jest-diff: "npm:30.0.2" - pretty-format: "npm:30.0.2" - checksum: 10c0/6e862dfe259c30f066fe800cc302cad8cdb4ff92dad73538ce099960ecffd5ba119282af933521765ce24fb3d99b5338d7fa64261df08f9e8505350e9d112424 - languageName: node - linkType: hard - "jest-matcher-utils@npm:30.0.5": version: 30.0.5 resolution: "jest-matcher-utils@npm:30.0.5" @@ -10600,23 +13040,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:30.0.2": - version: 30.0.2 - resolution: "jest-message-util@npm:30.0.2" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@jest/types": "npm:30.0.1" - "@types/stack-utils": "npm:^2.0.3" - chalk: "npm:^4.1.2" - graceful-fs: "npm:^4.2.11" - micromatch: "npm:^4.0.8" - pretty-format: "npm:30.0.2" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.6" - checksum: 10c0/c010d5b7d86e735e2fb4c4a220f57004349f488f5d4663240a7e9f2694d01b5228136540d55036777fde4227b5e0b56f08885b7f69395b295cab878357b1aeb1 - languageName: node - linkType: hard - "jest-message-util@npm:30.0.5": version: 30.0.5 resolution: "jest-message-util@npm:30.0.5" @@ -10634,14 +13057,36 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:30.0.2": - version: 30.0.2 - resolution: "jest-mock@npm:30.0.2" +"jest-message-util@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-message-util@npm:24.9.0" dependencies: - "@jest/types": "npm:30.0.1" - "@types/node": "npm:*" - jest-util: "npm:30.0.2" - checksum: 10c0/7728997c1d654475b88e18b7ba33a2a1b9f89ce33a9082bf2d14dcc3e831f372f80c762e481777886a3a04b4489ea5390ecdeb21c4def57fba5b2c77086a3959 + "@babel/code-frame": "npm:^7.0.0" + "@jest/test-result": "npm:^24.9.0" + "@jest/types": "npm:^24.9.0" + "@types/stack-utils": "npm:^1.0.1" + chalk: "npm:^2.0.1" + micromatch: "npm:^3.1.10" + slash: "npm:^2.0.0" + stack-utils: "npm:^1.0.1" + checksum: 10c0/24d0d5bae7bf580179446def5c6a3b1c6ea727b39464d84388393b1b7e653beeac7f2dd3a9fe57d31e780d5555eaf9ed1cf224c3437f3b270c32e7ca37db0013 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 languageName: node linkType: hard @@ -10656,6 +13101,26 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-mock@npm:24.9.0" + dependencies: + "@jest/types": "npm:^24.9.0" + checksum: 10c0/a06ae0e76b0d270806e45298fdc9d637fe21d0e0efa8254845ac19a39b7d70a248a6f84b0341f36b2e062e9f225a0ee6ce68c1bdedb5f3a56635585ef8d6beb4 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + checksum: 10c0/7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.3": version: 1.2.3 resolution: "jest-pnp-resolver@npm:1.2.3" @@ -10675,6 +13140,13 @@ __metadata: languageName: node linkType: hard +"jest-regex-util@npm:^27.0.6": + version: 27.5.1 + resolution: "jest-regex-util@npm:27.5.1" + checksum: 10c0/f9790d417b667b38155c4bbd58f2afc0ad9f774381e5358776df02df3f29564069d4773c7ba050db6826bad8a4cc7ef82c3b4c65bfa508e419fdd063a9682c42 + languageName: node + linkType: hard + "jest-resolve-dependencies@npm:30.0.5": version: 30.0.5 resolution: "jest-resolve-dependencies@npm:30.0.5" @@ -10761,6 +13233,13 @@ __metadata: languageName: node linkType: hard +"jest-serializer@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-serializer@npm:24.9.0" + checksum: 10c0/9f871cdd08750f1b9f5aef0e8ba58d2045863b4ff2268dd50f3e6d666b6eb5a9a45dad9c6dfad9d2ab2d148f78d11e2ef29d28be85b31a4e8068c718d449f623 + languageName: node + linkType: hard + "jest-snapshot@npm:30.0.5": version: 30.0.5 resolution: "jest-snapshot@npm:30.0.5" @@ -10790,20 +13269,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:30.0.2": - version: 30.0.2 - resolution: "jest-util@npm:30.0.2" - dependencies: - "@jest/types": "npm:30.0.1" - "@types/node": "npm:*" - chalk: "npm:^4.1.2" - ci-info: "npm:^4.2.0" - graceful-fs: "npm:^4.2.11" - picomatch: "npm:^4.0.2" - checksum: 10c0/07de384790b8e5a5925fba5448fa1475790a5b52271fbf99958c18e468da1af940f8b45e330d87766576cf6c5d1f4f41ce51c976483a5079653d9fcdba8aac8e - languageName: node - linkType: hard - "jest-util@npm:30.0.5": version: 30.0.5 resolution: "jest-util@npm:30.0.5" @@ -10818,6 +13283,54 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-util@npm:24.9.0" + dependencies: + "@jest/console": "npm:^24.9.0" + "@jest/fake-timers": "npm:^24.9.0" + "@jest/source-map": "npm:^24.9.0" + "@jest/test-result": "npm:^24.9.0" + "@jest/types": "npm:^24.9.0" + callsites: "npm:^3.0.0" + chalk: "npm:^2.0.1" + graceful-fs: "npm:^4.1.15" + is-ci: "npm:^2.0.0" + mkdirp: "npm:^0.5.1" + slash: "npm:^2.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/80bd56f09be4d9d6519b24f8b902f434cefbb1cdc8521bf2f32995a4e9f5abecc88a6172c31494b88df3cd2df3db5daf86271c4f200856aa7dd216e2a69f20fc + languageName: node + linkType: hard + +"jest-util@npm:^27.2.0": + version: 27.5.1 + resolution: "jest-util@npm:27.5.1" + dependencies: + "@jest/types": "npm:^27.5.1" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 10c0/0f60cd2a2e09a6646ccd4ff489f1970282c0694724104979e897bd5164f91204726f5408572bf5e759d09e59d5c4e4dc65a643d2b630e06a10402bba07bf2a2e + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 + languageName: node + linkType: hard + "jest-validate@npm:30.0.5": version: 30.0.5 resolution: "jest-validate@npm:30.0.5" @@ -10832,6 +13345,34 @@ __metadata: languageName: node linkType: hard +"jest-validate@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-validate@npm:24.9.0" + dependencies: + "@jest/types": "npm:^24.9.0" + camelcase: "npm:^5.3.1" + chalk: "npm:^2.0.1" + jest-get-type: "npm:^24.9.0" + leven: "npm:^3.1.0" + pretty-format: "npm:^24.9.0" + checksum: 10c0/ed34bb40c758bd0287e1f8563b9589dd056ceb22cbb3e93fcfe0421100aaca7c14db511d6555fae5fdacf9948b10fc69620e5b0d3a3dfbdb62acbb27f9e7ee86 + languageName: node + linkType: hard + +"jest-validate@npm:^29.2.1": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + leven: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + checksum: 10c0/a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2 + languageName: node + linkType: hard + "jest-watcher@npm:30.0.5": version: 30.0.5 resolution: "jest-watcher@npm:30.0.5" @@ -10861,6 +13402,27 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-worker@npm:24.9.0" + dependencies: + merge-stream: "npm:^2.0.0" + supports-color: "npm:^6.1.0" + checksum: 10c0/ea9f4751976d08807d33598244e6c3a60ce5889cdabf1f4e6f3e57dddcf2190978e6284f0865326f64e93677cebac53220d71a52e57d1205c467c6f09efa8bc2 + languageName: node + linkType: hard + +"jest-worker@npm:^27.2.0": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + "jest@npm:^30.0.2": version: 30.0.5 resolution: "jest@npm:30.0.5" @@ -10880,7 +13442,18 @@ __metadata: languageName: node linkType: hard -"joi@npm:^17.13.3": +"jetifier@npm:^1.6.2": + version: 1.6.8 + resolution: "jetifier@npm:1.6.8" + bin: + jetifier: bin/jetify + jetifier-standalone: bin/jetifier-standalone + jetify: bin/jetify + checksum: 10c0/a29ced941dd35a72435414a346667820277023bf7943ed8ed5bce933ecf64620659862344de16130700f1cbec0af4f0f533e843e37a54bc1844b64a2cb3bf4aa + languageName: node + linkType: hard + +"joi@npm:^17.13.3, joi@npm:^17.2.1": version: 17.13.3 resolution: "joi@npm:17.13.3" dependencies: @@ -10937,6 +13510,58 @@ __metadata: languageName: node linkType: hard +"jsc-android@npm:^245459.0.0": + version: 245459.0.0 + resolution: "jsc-android@npm:245459.0.0" + checksum: 10c0/f8eb3007c6d3f0461a7a682c4c5a885bf6468c997a7da9054885a19a592f884e467b553f954e58b95dee2b8e2f85d7cacd1d33f0ea3d4c60a7d28103c0074493 + languageName: node + linkType: hard + +"jsc-android@npm:^250231.0.0": + version: 250231.0.0 + resolution: "jsc-android@npm:250231.0.0" + checksum: 10c0/518ddbc9d41eb5f4f8a30244382044c87ce02756416866c4e129ae6655feb0bab744cf9d590d240916b005c3632554c7c33d388a84dc6d3e83733d0e8cee5c2f + languageName: node + linkType: hard + +"jsc-safe-url@npm:^0.2.2": + version: 0.2.4 + resolution: "jsc-safe-url@npm:0.2.4" + checksum: 10c0/429bd645f8a35938f08f5b01c282e5ef55ed8be30a9ca23517b7ca01dcbf84b4b0632042caceab50f8f5c0c1e76816fe3c74de3e59be84da7f89ae1503bd3c68 + languageName: node + linkType: hard + +"jscodeshift@npm:^0.14.0": + version: 0.14.0 + resolution: "jscodeshift@npm:0.14.0" + dependencies: + "@babel/core": "npm:^7.13.16" + "@babel/parser": "npm:^7.13.16" + "@babel/plugin-proposal-class-properties": "npm:^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.13.8" + "@babel/plugin-proposal-optional-chaining": "npm:^7.13.12" + "@babel/plugin-transform-modules-commonjs": "npm:^7.13.8" + "@babel/preset-flow": "npm:^7.13.13" + "@babel/preset-typescript": "npm:^7.13.0" + "@babel/register": "npm:^7.13.16" + babel-core: "npm:^7.0.0-bridge.0" + chalk: "npm:^4.1.2" + flow-parser: "npm:0.*" + graceful-fs: "npm:^4.2.4" + micromatch: "npm:^4.0.4" + neo-async: "npm:^2.5.0" + node-dir: "npm:^0.1.17" + recast: "npm:^0.21.0" + temp: "npm:^0.8.4" + write-file-atomic: "npm:^2.3.0" + peerDependencies: + "@babel/preset-env": ^7.1.6 + bin: + jscodeshift: bin/jscodeshift.js + checksum: 10c0/dab63bdb4b7e67d79634fcd3f5dc8b227146e9f68aa88700bc49c5a45b6339d05bd934a98aa53d29abd04f81237d010e7e037799471b2aab66ec7b9a7d752786 + languageName: node + linkType: hard + "jsdoc-type-pratt-parser@npm:~4.1.0": version: 4.1.0 resolution: "jsdoc-type-pratt-parser@npm:4.1.0" @@ -11010,7 +13635,16 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^3.0.2": +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": version: 3.0.2 resolution: "jsesc@npm:3.0.2" bin: @@ -11019,6 +13653,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -11061,6 +13702,19 @@ __metadata: languageName: node linkType: hard +"json-stable-stringify@npm:^1.0.1": + version: 1.3.0 + resolution: "json-stable-stringify@npm:1.3.0" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + isarray: "npm:^2.0.5" + jsonify: "npm:^0.0.1" + object-keys: "npm:^1.1.1" + checksum: 10c0/8b3ff19e4c23c0ad591a49bc3a015d89a538db787d12fe9c4072e1d64d8cfa481f8c37719c629c3d84e848847617bf49f5fee894cf1d25959ab5b67e1c517f31 + languageName: node + linkType: hard + "json-stringify-nice@npm:^1.1.4": version: 1.1.4 resolution: "json-stringify-nice@npm:1.1.4" @@ -11109,6 +13763,30 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^2.1.0": + version: 2.4.0 + resolution: "jsonfile@npm:2.4.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/02ad746d9490686519b3369bc9572694076eb982e1b4982c5ad9b91bc3c0ad30d10c866bb26b7a87f0c4025a80222cd2962cb57083b5a6a475a9031eab8c8962 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -11122,6 +13800,13 @@ __metadata: languageName: node linkType: hard +"jsonify@npm:^0.0.1, jsonify@npm:~0.0.0": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 10c0/7f5499cdd59a0967ed35bda48b7cec43d850bbc8fb955cdd3a1717bb0efadbe300724d5646de765bb7a99fc1c3ab06eb80d93503c6faaf99b4ff50a3326692f6 + languageName: node + linkType: hard + "jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" @@ -11167,12 +13852,14 @@ __metadata: linkType: hard "jsx-ast-utils@npm:^2.4.1 || ^3.0.0": - version: 3.3.3 - resolution: "jsx-ast-utils@npm:3.3.3" + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" dependencies: - array-includes: "npm:^3.1.5" - object.assign: "npm:^4.1.3" - checksum: 10c0/fb69ce100931e50d42c8f72a01495b7d090064824ce481cf7746449609c148a29aae6984624cf9066ac14bdf7978f8774461e120d5b50fa90b3bfe0a0e21ff77 + array-includes: "npm:^3.1.6" + array.prototype.flat: "npm:^1.3.1" + object.assign: "npm:^4.1.4" + object.values: "npm:^1.1.6" + checksum: 10c0/a32679e9cb55469cb6d8bbc863f7d631b2c98b7fc7bf172629261751a6e7bc8da6ae374ddb74d5fbd8b06cf0eb4572287b259813d92b36e384024ed35e4c13e1 languageName: node linkType: hard @@ -11191,13 +13878,13 @@ __metadata: linkType: hard "jwa@npm:^1.4.1": - version: 1.4.1 - resolution: "jwa@npm:1.4.1" + version: 1.4.2 + resolution: "jwa@npm:1.4.2" dependencies: - buffer-equal-constant-time: "npm:1.0.1" + buffer-equal-constant-time: "npm:^1.0.1" ecdsa-sig-formatter: "npm:1.0.11" safe-buffer: "npm:^5.0.1" - checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 + checksum: 10c0/210a544a42ca22203e8fc538835205155ba3af6a027753109f9258bdead33086bac3c25295af48ac1981f87f9c5f941bc8f70303670f54ea7dcaafb53993d92c languageName: node linkType: hard @@ -11212,13 +13899,47 @@ __metadata: linkType: hard "katex@npm:^0.16.0": - version: 0.16.21 - resolution: "katex@npm:0.16.21" + version: 0.16.22 + resolution: "katex@npm:0.16.22" dependencies: commander: "npm:^8.3.0" bin: katex: cli.js - checksum: 10c0/e2e4139ba72a13f2393308fbb2b4c5511611a19a40a6e39d956cf775e553af3517dbfd0a54477faaf401c923e4654e32296347846b8ff15dfa579f88ff8579bb + checksum: 10c0/07b8b1f07ae53171b5f1ea0cf6f18841d2055825c8b11cd81cfe039afcd3af2cfc84ad033531ee3875088329105195b039c267e0dd4b0c237807e3c3b2009913 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kind-of@npm:^1.1.0": + version: 1.1.0 + resolution: "kind-of@npm:1.1.0" + checksum: 10c0/24bded3cda73094d61a3f0780d6a5cac2fc25a898885eaf4f2bb1a8ce497e3eee5f3fa30b11455d35d3e8153f82724f43837524c2c80737211d8dc7c17ffe572 + languageName: node + linkType: hard + +"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": + version: 3.2.2 + resolution: "kind-of@npm:3.2.2" + dependencies: + is-buffer: "npm:^1.1.5" + checksum: 10c0/7e34bc29d4b02c997f92f080de34ebb92033a96736bbb0bb2410e033a7e5ae6571f1fa37b2d7710018f95361473b816c604234197f4f203f9cf149d8ef1574d9 + languageName: node + linkType: hard + +"kind-of@npm:^4.0.0": + version: 4.0.0 + resolution: "kind-of@npm:4.0.0" + dependencies: + is-buffer: "npm:^1.1.5" + checksum: 10c0/d6c44c75ee36898142dfc7106afbd50593216c37f96acb81a7ab33ca1a6938ce97d5692b8fc8fccd035f83811a9d97749d68771116441a48eedd0b68e2973165 languageName: node linkType: hard @@ -11229,6 +13950,25 @@ __metadata: languageName: node linkType: hard +"klaw@npm:^1.0.0": + version: 1.3.1 + resolution: "klaw@npm:1.3.1" + dependencies: + graceful-fs: "npm:^4.1.9" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/da994768b02b3843cc994c99bad3cf1c8c67716beb4dd2834133c919e9e9ee788669fbe27d88ab0ad9a3991349c28280afccbde01c2318229b662dd7a05e4728 + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b + languageName: node + linkType: hard + "kuler@npm:^2.0.0": version: 2.0.0 resolution: "kuler@npm:2.0.0" @@ -11244,10 +13984,10 @@ __metadata: linkType: hard "lerna@npm:^8.1.9": - version: 8.2.3 - resolution: "lerna@npm:8.2.3" + version: 8.2.4 + resolution: "lerna@npm:8.2.4" dependencies: - "@lerna/create": "npm:8.2.3" + "@lerna/create": "npm:8.2.4" "@npmcli/arborist": "npm:7.5.4" "@npmcli/package-json": "npm:5.2.0" "@npmcli/run-script": "npm:8.1.0" @@ -11287,7 +14027,6 @@ __metadata: libnpmaccess: "npm:8.0.6" libnpmpublish: "npm:9.0.9" load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" make-dir: "npm:4.0.0" minimatch: "npm:3.0.5" multimatch: "npm:5.0.0" @@ -11329,7 +14068,7 @@ __metadata: yargs-parser: "npm:21.1.1" bin: lerna: dist/cli.js - checksum: 10c0/618d2adb5504227ca0b4dbeca920fbc188a907e71df39ace105af3696393c3aefb75cf7a98899ec728b15ea9e92aca29cdfc21d479d23163e2fd812281fd10a1 + checksum: 10c0/6fba1b6a437d76978cf0aa67efb88b14643502839c7121b8ab8c6368fa1c1a4806600bf0f7a57ca1cfc52007ff1b45a03269205f9df93fc6fc4fb3179760b8c7 languageName: node linkType: hard @@ -11495,6 +14234,16 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: "npm:^3.0.0" + path-exists: "npm:^3.0.0" + checksum: 10c0/3db394b7829a7fe2f4fbdd25d3c4689b85f003c318c5da4052c7e56eed697da8f1bce5294f685c69ff76e32cba7a33629d94396976f6d05fb7f4c755c5e2ae8b + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -11520,6 +14269,13 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + "lodash.includes@npm:^4.3.0": version: 4.3.0 resolution: "lodash.includes@npm:4.3.0" @@ -11590,13 +14346,29 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.21": +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 10c0/14628013e9e7f65ac904fc82fd8ecb0e55a9c4c2416434b1dd9cf64ae70a8937f0b15376a39a68248530adc64887ed0fe2b75204b2c9ec3eea1cb2d66ddd125d + languageName: node + linkType: hard + +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:^4.3.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c languageName: node linkType: hard +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: "npm:^2.0.1" + checksum: 10c0/574eb4205f54f0605021aa67ebb372c30ca64e8ddd439efeb8507af83c776dce789e83614e80059014d9e48dcc94c4b60cef2e85f0dc944eea27c799cec62353 + languageName: node + linkType: hard + "log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" @@ -11646,10 +14418,23 @@ __metadata: languageName: node linkType: hard +"logkitty@npm:^0.7.1": + version: 0.7.1 + resolution: "logkitty@npm:0.7.1" + dependencies: + ansi-fragments: "npm:^0.2.1" + dayjs: "npm:^1.8.15" + yargs: "npm:^15.1.0" + bin: + logkitty: bin/logkitty.js + checksum: 10c0/2067fad55c0856c0608c51ab75f8ffa5a858c5f847fefa8ec0e5fd3aa0b7d732010169d187283b23583a72aa6b80bbbec4fc6801a6c47c3fac0fbb294786002a + languageName: node + linkType: hard + "long@npm:^5.0.0": - version: 5.2.1 - resolution: "long@npm:5.2.1" - checksum: 10c0/8252ef50b567aa062059d056dab5077c7bfaf8bd4598bcf96ccb61a27ebc0e879d267137f1c5d293dc259d658033013322931793a9de3f3388e4cda1fb91f79d + version: 5.3.2 + resolution: "long@npm:5.3.2" + checksum: 10c0/7130fe1cbce2dca06734b35b70d380ca3f70271c7f8852c922a7c62c86c4e35f0c39290565eca7133c625908d40e126ac57c02b1b1a4636b9457d77e1e60b981 languageName: node linkType: hard @@ -11723,7 +14508,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.11, magic-string@npm:^0.30.3": +"magic-string@npm:^0.30.17, magic-string@npm:^0.30.3": version: 0.30.17 resolution: "magic-string@npm:0.30.17" dependencies: @@ -11732,7 +14517,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:4.0.0": +"make-dir@npm:4.0.0, make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" dependencies: @@ -11741,7 +14526,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^2.1.0": +"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": version: 2.1.0 resolution: "make-dir@npm:2.1.0" dependencies: @@ -11751,15 +14536,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: "npm:^6.0.0" - checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa - languageName: node - linkType: hard - "make-error@npm:^1.1.1, make-error@npm:^1.3.6": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -11815,6 +14591,13 @@ __metadata: languageName: node linkType: hard +"map-cache@npm:^0.2.2": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 10c0/05e3eb005c1b80b9f949ca007687640e8c5d0fc88dc45c3c3ab4902a3bec79d66a58f3e3b04d6985d90cd267c629c7b46c977e9c34433e8c11ecfcbb9f0fa290 + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -11836,6 +14619,15 @@ __metadata: languageName: node linkType: hard +"map-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "map-visit@npm:1.0.0" + dependencies: + object-visit: "npm:^1.0.0" + checksum: 10c0/fb3475e5311939a6147e339999113db607adc11c7c3cd3103e5e9dbf502898416ecba6b1c7c649c6d4d12941de00cee58b939756bdf20a9efe7d4fa5a5738b73 + languageName: node + linkType: hard + "markdown-it@npm:14.1.0, markdown-it@npm:~14.1.0": version: 14.1.0 resolution: "markdown-it@npm:14.1.0" @@ -11927,6 +14719,13 @@ __metadata: languageName: node linkType: hard +"memoize-one@npm:^5.0.0": + version: 5.2.1 + resolution: "memoize-one@npm:5.2.1" + checksum: 10c0/fd22dbe9a978a2b4f30d6a491fc02fb90792432ad0dab840dc96c1734d2bd7c9cdeb6a26130ec60507eb43230559523615873168bcbe8fafab221c30b11d54c1 + languageName: node + linkType: hard + "memorystream@npm:^0.3.1": version: 0.3.1 resolution: "memorystream@npm:0.3.1" @@ -11960,6 +14759,15 @@ __metadata: languageName: node linkType: hard +"merge-stream@npm:^1.0.1": + version: 1.0.1 + resolution: "merge-stream@npm:1.0.1" + dependencies: + readable-stream: "npm:^2.0.1" + checksum: 10c0/a670e74149ce7e0c7bf5cadfa8d8566b6bf67e89cf535db909bdba449a38155e425e43d2e6df0059ed4ce24a31195dce6f18d53043315b8aef4d34d7e6414ba4 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -11974,6 +14782,574 @@ __metadata: languageName: node linkType: hard +"metro-babel-register@npm:0.59.0": + version: 0.59.0 + resolution: "metro-babel-register@npm:0.59.0" + dependencies: + "@babel/core": "npm:^7.0.0" + "@babel/plugin-proposal-class-properties": "npm:^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.0.0" + "@babel/plugin-proposal-optional-chaining": "npm:^7.0.0" + "@babel/plugin-transform-flow-strip-types": "npm:^7.0.0" + "@babel/plugin-transform-modules-commonjs": "npm:^7.0.0" + "@babel/register": "npm:^7.0.0" + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/419e9ef750d97174c2227beb4dd97a7182050d8dc169d1bcfa2e8cc8209f7fae2f1e2ded9e1ef77a0919b2bb02f96bebc01970bfc1779141564652b4869fc693 + languageName: node + linkType: hard + +"metro-babel-transformer@npm:0.59.0": + version: 0.59.0 + resolution: "metro-babel-transformer@npm:0.59.0" + dependencies: + "@babel/core": "npm:^7.0.0" + metro-source-map: "npm:0.59.0" + checksum: 10c0/24bab96e110fbc0f729212089b9915f2db3011059f153af3e0d85d0a870d8bc9afb59220cfe1d3e18f89d47f028733df6ac045bc74c3a870d5ac11855b63842e + languageName: node + linkType: hard + +"metro-babel-transformer@npm:0.76.8": + version: 0.76.8 + resolution: "metro-babel-transformer@npm:0.76.8" + dependencies: + "@babel/core": "npm:^7.20.0" + hermes-parser: "npm:0.12.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/8e2a6d451aecfd39b3d1135635c0875f4d48bf10d9fc206e5adfafffd13bd96177f7a8c208455eb448e39337524ecbaa3c2bce238134fa66f644e022b28afa95 + languageName: node + linkType: hard + +"metro-cache-key@npm:0.76.8": + version: 0.76.8 + resolution: "metro-cache-key@npm:0.76.8" + checksum: 10c0/c672238b37bd24543e05a0b8961a1aff013707d8ad1d783bcfab5a95318d6a3f76431d2d3c5c841e455c123933e4b02869f844b5de3e6e1822601c508e48b789 + languageName: node + linkType: hard + +"metro-cache@npm:0.59.0": + version: 0.59.0 + resolution: "metro-cache@npm:0.59.0" + dependencies: + jest-serializer: "npm:^24.9.0" + metro-core: "npm:0.59.0" + mkdirp: "npm:^0.5.1" + rimraf: "npm:^2.5.4" + checksum: 10c0/85ff763c602f19a5e23123fdb5a8179e0882c77b093d1dddcc57a430181b0857511a18a5583364cba433dce85def7098294dd5e14c75cad6b418a698fc8ed0e9 + languageName: node + linkType: hard + +"metro-cache@npm:0.76.8": + version: 0.76.8 + resolution: "metro-cache@npm:0.76.8" + dependencies: + metro-core: "npm:0.76.8" + rimraf: "npm:^3.0.2" + checksum: 10c0/c7a3005d8ffe086aad86b440b1f81a89ff399a32747abe43f41f33b95e62dd2f7da759b3d2405d04539252866a8a6adddcf71d6503ee9ff8deabc044c9572812 + languageName: node + linkType: hard + +"metro-config@npm:0.59.0, metro-config@npm:^0.59.0": + version: 0.59.0 + resolution: "metro-config@npm:0.59.0" + dependencies: + cosmiconfig: "npm:^5.0.5" + jest-validate: "npm:^24.9.0" + metro: "npm:0.59.0" + metro-cache: "npm:0.59.0" + metro-core: "npm:0.59.0" + checksum: 10c0/772e9a3e813031fdba8588b9f6e71262c58a37182d42c1abd9f8584961fe1d2086dcafcb49a110ca13040d750a9f9c18c095aea3a272bd2e8cb5fc9f965271db + languageName: node + linkType: hard + +"metro-config@npm:0.76.8": + version: 0.76.8 + resolution: "metro-config@npm:0.76.8" + dependencies: + connect: "npm:^3.6.5" + cosmiconfig: "npm:^5.0.5" + jest-validate: "npm:^29.2.1" + metro: "npm:0.76.8" + metro-cache: "npm:0.76.8" + metro-core: "npm:0.76.8" + metro-runtime: "npm:0.76.8" + checksum: 10c0/cbb691d068c403b51e4254c225cda9b62497f12a9e32feb57cde8706712179bffaa5622fef82a155356911c7358ea8fe4469b7719bd1acdfbbd03f9824115be5 + languageName: node + linkType: hard + +"metro-core@npm:0.59.0, metro-core@npm:^0.59.0": + version: 0.59.0 + resolution: "metro-core@npm:0.59.0" + dependencies: + jest-haste-map: "npm:^24.9.0" + lodash.throttle: "npm:^4.1.1" + metro-resolver: "npm:0.59.0" + wordwrap: "npm:^1.0.0" + checksum: 10c0/85f2698a6b4d563156b8d8725b9af87e7cf1dfde52ab3496da268b77ae073903ec835b79c4bfd1b274621f090cdd17dd52455ee3c2c3deaaa75418ef38fe43df + languageName: node + linkType: hard + +"metro-core@npm:0.76.8": + version: 0.76.8 + resolution: "metro-core@npm:0.76.8" + dependencies: + lodash.throttle: "npm:^4.1.1" + metro-resolver: "npm:0.76.8" + checksum: 10c0/29c527e91ab1bf48bc55e5ff2b61d483626369203ea3febee5df6e9490b19460e637fe01cb5be3b485f8a1066bbbaa5ecf3b11f66b9595df0c549a71d09568b1 + languageName: node + linkType: hard + +"metro-file-map@npm:0.76.8": + version: 0.76.8 + resolution: "metro-file-map@npm:0.76.8" + dependencies: + anymatch: "npm:^3.0.3" + debug: "npm:^2.2.0" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^2.3.2" + graceful-fs: "npm:^4.2.4" + invariant: "npm:^2.2.4" + jest-regex-util: "npm:^27.0.6" + jest-util: "npm:^27.2.0" + jest-worker: "npm:^27.2.0" + micromatch: "npm:^4.0.4" + node-abort-controller: "npm:^3.1.1" + nullthrows: "npm:^1.1.1" + walker: "npm:^1.0.7" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/a535569d807bfa934173c7dfdbf6d64d0b23f5b5b42de036708a75485d6546b641125643526c0c000add530ad040f9a51a44de41c526b733f6af9e710becb5d9 + languageName: node + linkType: hard + +"metro-inspector-proxy@npm:0.59.0": + version: 0.59.0 + resolution: "metro-inspector-proxy@npm:0.59.0" + dependencies: + connect: "npm:^3.6.5" + debug: "npm:^2.2.0" + ws: "npm:^1.1.5" + yargs: "npm:^14.2.0" + bin: + metro-inspector-proxy: src/cli.js + checksum: 10c0/fc18c863ef877af8ab5ba32aeba3c1b680e6be524fbd029a3e6e4a279c569907a2267ebf7444aec78dfc37495ab78d14dc1ab4d9aafadcbae8375e5a66c2e4b8 + languageName: node + linkType: hard + +"metro-inspector-proxy@npm:0.76.8": + version: 0.76.8 + resolution: "metro-inspector-proxy@npm:0.76.8" + dependencies: + connect: "npm:^3.6.5" + debug: "npm:^2.2.0" + node-fetch: "npm:^2.2.0" + ws: "npm:^7.5.1" + yargs: "npm:^17.6.2" + bin: + metro-inspector-proxy: src/cli.js + checksum: 10c0/3971d4097e330944ca0044ca1b04c41daac5e03479fd267b968476ad92150055c1f40f457355863aa80e32eba34a6d0708e381cd02fa6a8fa74ac54170943ee1 + languageName: node + linkType: hard + +"metro-minify-terser@npm:0.76.8": + version: 0.76.8 + resolution: "metro-minify-terser@npm:0.76.8" + dependencies: + terser: "npm:^5.15.0" + checksum: 10c0/0fd8a195789dbd297de37819936cdd4f3ae88f6f93f91b1f324d2ad76fe361263f1c64da883d0fa032c42366a88e755ae94c9d543ce0919125f553c96b39f74a + languageName: node + linkType: hard + +"metro-minify-uglify@npm:0.59.0": + version: 0.59.0 + resolution: "metro-minify-uglify@npm:0.59.0" + dependencies: + uglify-es: "npm:^3.1.9" + checksum: 10c0/c7de7d3b574e950600575228673cb80012dd7e373ed770e22fc54dd108b7cf173eb9cbed7b6c4374e965439b5cf4d403db0c77bafcc3e63f08d0147a97f3776c + languageName: node + linkType: hard + +"metro-minify-uglify@npm:0.76.8": + version: 0.76.8 + resolution: "metro-minify-uglify@npm:0.76.8" + dependencies: + uglify-es: "npm:^3.1.9" + checksum: 10c0/75c532cb7a5aaea9819c8b4234266f6a714e552cf03fe8c33b6c1ac7e093d8a5bc905f5272494907c1fc7fb13be3834d1d81048f12d033bf4f43052a1de96caf + languageName: node + linkType: hard + +"metro-react-native-babel-preset@npm:0.59.0": + version: 0.59.0 + resolution: "metro-react-native-babel-preset@npm:0.59.0" + dependencies: + "@babel/plugin-proposal-class-properties": "npm:^7.0.0" + "@babel/plugin-proposal-export-default-from": "npm:^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.0.0" + "@babel/plugin-proposal-object-rest-spread": "npm:^7.0.0" + "@babel/plugin-proposal-optional-catch-binding": "npm:^7.0.0" + "@babel/plugin-proposal-optional-chaining": "npm:^7.0.0" + "@babel/plugin-syntax-dynamic-import": "npm:^7.0.0" + "@babel/plugin-syntax-export-default-from": "npm:^7.0.0" + "@babel/plugin-syntax-flow": "npm:^7.2.0" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.0.0" + "@babel/plugin-syntax-optional-chaining": "npm:^7.0.0" + "@babel/plugin-transform-arrow-functions": "npm:^7.0.0" + "@babel/plugin-transform-block-scoping": "npm:^7.0.0" + "@babel/plugin-transform-classes": "npm:^7.0.0" + "@babel/plugin-transform-computed-properties": "npm:^7.0.0" + "@babel/plugin-transform-destructuring": "npm:^7.0.0" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.0.0" + "@babel/plugin-transform-flow-strip-types": "npm:^7.0.0" + "@babel/plugin-transform-for-of": "npm:^7.0.0" + "@babel/plugin-transform-function-name": "npm:^7.0.0" + "@babel/plugin-transform-literals": "npm:^7.0.0" + "@babel/plugin-transform-modules-commonjs": "npm:^7.0.0" + "@babel/plugin-transform-object-assign": "npm:^7.0.0" + "@babel/plugin-transform-parameters": "npm:^7.0.0" + "@babel/plugin-transform-react-display-name": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx-self": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx-source": "npm:^7.0.0" + "@babel/plugin-transform-regenerator": "npm:^7.0.0" + "@babel/plugin-transform-runtime": "npm:^7.0.0" + "@babel/plugin-transform-shorthand-properties": "npm:^7.0.0" + "@babel/plugin-transform-spread": "npm:^7.0.0" + "@babel/plugin-transform-sticky-regex": "npm:^7.0.0" + "@babel/plugin-transform-template-literals": "npm:^7.0.0" + "@babel/plugin-transform-typescript": "npm:^7.5.0" + "@babel/plugin-transform-unicode-regex": "npm:^7.0.0" + "@babel/template": "npm:^7.0.0" + react-refresh: "npm:^0.4.0" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/8592cc30773dad9cba2a698a2a540cbded377dfc41a688914877dd2293ef0bd5c2dde30c02189f965743b67761b816f996c948edcb2b1324e541746def103550 + languageName: node + linkType: hard + +"metro-react-native-babel-preset@npm:0.76.8": + version: 0.76.8 + resolution: "metro-react-native-babel-preset@npm:0.76.8" + dependencies: + "@babel/core": "npm:^7.20.0" + "@babel/plugin-proposal-async-generator-functions": "npm:^7.0.0" + "@babel/plugin-proposal-class-properties": "npm:^7.18.0" + "@babel/plugin-proposal-export-default-from": "npm:^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.18.0" + "@babel/plugin-proposal-numeric-separator": "npm:^7.0.0" + "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.0" + "@babel/plugin-proposal-optional-catch-binding": "npm:^7.0.0" + "@babel/plugin-proposal-optional-chaining": "npm:^7.20.0" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.0" + "@babel/plugin-syntax-export-default-from": "npm:^7.0.0" + "@babel/plugin-syntax-flow": "npm:^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.0.0" + "@babel/plugin-syntax-optional-chaining": "npm:^7.0.0" + "@babel/plugin-transform-arrow-functions": "npm:^7.0.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.20.0" + "@babel/plugin-transform-block-scoping": "npm:^7.0.0" + "@babel/plugin-transform-classes": "npm:^7.0.0" + "@babel/plugin-transform-computed-properties": "npm:^7.0.0" + "@babel/plugin-transform-destructuring": "npm:^7.20.0" + "@babel/plugin-transform-flow-strip-types": "npm:^7.20.0" + "@babel/plugin-transform-function-name": "npm:^7.0.0" + "@babel/plugin-transform-literals": "npm:^7.0.0" + "@babel/plugin-transform-modules-commonjs": "npm:^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.0.0" + "@babel/plugin-transform-parameters": "npm:^7.0.0" + "@babel/plugin-transform-react-display-name": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx-self": "npm:^7.0.0" + "@babel/plugin-transform-react-jsx-source": "npm:^7.0.0" + "@babel/plugin-transform-runtime": "npm:^7.0.0" + "@babel/plugin-transform-shorthand-properties": "npm:^7.0.0" + "@babel/plugin-transform-spread": "npm:^7.0.0" + "@babel/plugin-transform-sticky-regex": "npm:^7.0.0" + "@babel/plugin-transform-typescript": "npm:^7.5.0" + "@babel/plugin-transform-unicode-regex": "npm:^7.0.0" + "@babel/template": "npm:^7.0.0" + babel-plugin-transform-flow-enums: "npm:^0.0.2" + react-refresh: "npm:^0.4.0" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/594b9d5f38d6a4fbdd3d83084dc2315d8a52e3b32ee541adbe89e4e41ea2f6c2a54571f877a5de5f5770b48e77215a8d1847ed22f852b753a7f7e0ec7f4eb1f5 + languageName: node + linkType: hard + +"metro-react-native-babel-transformer@npm:0.59.0, metro-react-native-babel-transformer@npm:^0.59.0": + version: 0.59.0 + resolution: "metro-react-native-babel-transformer@npm:0.59.0" + dependencies: + "@babel/core": "npm:^7.0.0" + babel-preset-fbjs: "npm:^3.3.0" + metro-babel-transformer: "npm:0.59.0" + metro-react-native-babel-preset: "npm:0.59.0" + metro-source-map: "npm:0.59.0" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/51ee255274403d43cfa875350c4d8c33dd2863223bf0654691033602d3bfc502f0b2c7e9657036254a8ee078be1e60ba7810877b94113f48942f9d9a42238168 + languageName: node + linkType: hard + +"metro-react-native-babel-transformer@npm:0.76.8": + version: 0.76.8 + resolution: "metro-react-native-babel-transformer@npm:0.76.8" + dependencies: + "@babel/core": "npm:^7.20.0" + babel-preset-fbjs: "npm:^3.4.0" + hermes-parser: "npm:0.12.0" + metro-react-native-babel-preset: "npm:0.76.8" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/2294b6c7ebaf578d5a25b4da3eabbe33599f1567fa6163bf365a5eed3ef50e4bb5717b99aa0e3b64e1bd1ad527fa0cbbac3944a0e0c653dcb4bda4915df64353 + languageName: node + linkType: hard + +"metro-resolver@npm:0.59.0, metro-resolver@npm:^0.59.0": + version: 0.59.0 + resolution: "metro-resolver@npm:0.59.0" + dependencies: + absolute-path: "npm:^0.0.0" + checksum: 10c0/fd613cabaffc7cb4b68766f8055415d16793c8ca2a3732c71de2a6fb9f78c4bbddf3f86b48f488b85a2a459abe026a95a3894b10a35f8b209ff84c45adeb766f + languageName: node + linkType: hard + +"metro-resolver@npm:0.76.8": + version: 0.76.8 + resolution: "metro-resolver@npm:0.76.8" + checksum: 10c0/478531fdb200c2dda300a9c381b79bde9d1cca9af91614f870ca85cae17d8525ccd573aa8bb2eff5a66dfb71de81e335d989f6d0aaf9f9c32f92bba5289956ea + languageName: node + linkType: hard + +"metro-runtime@npm:0.76.8": + version: 0.76.8 + resolution: "metro-runtime@npm:0.76.8" + dependencies: + "@babel/runtime": "npm:^7.0.0" + react-refresh: "npm:^0.4.0" + checksum: 10c0/b8a054f48f2bba4663f0ecb3d4850d2fe31e60274527ed32f58cf3e1a3440e07314c31b67f07cae41cf96a78ba8894f975dd99c520bfc848632db0a15920ee43 + languageName: node + linkType: hard + +"metro-source-map@npm:0.59.0": + version: 0.59.0 + resolution: "metro-source-map@npm:0.59.0" + dependencies: + "@babel/traverse": "npm:^7.0.0" + "@babel/types": "npm:^7.0.0" + invariant: "npm:^2.2.4" + metro-symbolicate: "npm:0.59.0" + ob1: "npm:0.59.0" + source-map: "npm:^0.5.6" + vlq: "npm:^1.0.0" + checksum: 10c0/43a24fa7ebda50683b8f697ded693a804e21307327eb2214b486b1d1c6a0ccd325b66138490b78cfa055cc8edd1ba3945aea2bc5079a1efdc4ccffd57c248a06 + languageName: node + linkType: hard + +"metro-source-map@npm:0.76.8": + version: 0.76.8 + resolution: "metro-source-map@npm:0.76.8" + dependencies: + "@babel/traverse": "npm:^7.20.0" + "@babel/types": "npm:^7.20.0" + invariant: "npm:^2.2.4" + metro-symbolicate: "npm:0.76.8" + nullthrows: "npm:^1.1.1" + ob1: "npm:0.76.8" + source-map: "npm:^0.5.6" + vlq: "npm:^1.0.0" + checksum: 10c0/2abbaf4c5bf06033467c9fc27cbad37af31ccc409796912745c1d3775fabe4afac5bed69c4cc455aa7f811bad0fe6f5bef0416ccc982c5f5e7bf6c3adb4c0d1a + languageName: node + linkType: hard + +"metro-symbolicate@npm:0.59.0": + version: 0.59.0 + resolution: "metro-symbolicate@npm:0.59.0" + dependencies: + invariant: "npm:^2.2.4" + metro-source-map: "npm:0.59.0" + source-map: "npm:^0.5.6" + through2: "npm:^2.0.1" + vlq: "npm:^1.0.0" + bin: + metro-symbolicate: src/symbolicate.js + checksum: 10c0/0147ec0758a65cd4110059dde42a23aa11e7b78fdac6a9aabfddbe3b49fe0daadbdb29dd07b9efa0838fb816aa9b87946dcad3dfaab6bf4ffdc19c128139e1d7 + languageName: node + linkType: hard + +"metro-symbolicate@npm:0.76.8": + version: 0.76.8 + resolution: "metro-symbolicate@npm:0.76.8" + dependencies: + invariant: "npm:^2.2.4" + metro-source-map: "npm:0.76.8" + nullthrows: "npm:^1.1.1" + source-map: "npm:^0.5.6" + through2: "npm:^2.0.1" + vlq: "npm:^1.0.0" + bin: + metro-symbolicate: src/index.js + checksum: 10c0/a653fcfaf41487a0bff1dfe175b6bf75eafe672a425f03b811ed510aeb460cb8050037e23c6989784bb34a6ba8117a06db0e28cd98ccb9d3b9ce6138f42ca8bc + languageName: node + linkType: hard + +"metro-transform-plugins@npm:0.76.8": + version: 0.76.8 + resolution: "metro-transform-plugins@npm:0.76.8" + dependencies: + "@babel/core": "npm:^7.20.0" + "@babel/generator": "npm:^7.20.0" + "@babel/template": "npm:^7.0.0" + "@babel/traverse": "npm:^7.20.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/d351097fdbb874c18674e250a11903fb8252e2ac2a88ea0a265c2aca6df002ec22a1a81e77615d5185234fdc6e74d0572187b94904e757121d2e5dc65e33d9f6 + languageName: node + linkType: hard + +"metro-transform-worker@npm:0.76.8": + version: 0.76.8 + resolution: "metro-transform-worker@npm:0.76.8" + dependencies: + "@babel/core": "npm:^7.20.0" + "@babel/generator": "npm:^7.20.0" + "@babel/parser": "npm:^7.20.0" + "@babel/types": "npm:^7.20.0" + babel-preset-fbjs: "npm:^3.4.0" + metro: "npm:0.76.8" + metro-babel-transformer: "npm:0.76.8" + metro-cache: "npm:0.76.8" + metro-cache-key: "npm:0.76.8" + metro-source-map: "npm:0.76.8" + metro-transform-plugins: "npm:0.76.8" + nullthrows: "npm:^1.1.1" + checksum: 10c0/f035ae70d5653563452ac9d08aac54b2b0e8d6874ed1b2f9fe7df3fa480b16fc8b71736bb5c235ff4d1c93975ae932ea29acc6c24b76276094efa20bdb3d0c47 + languageName: node + linkType: hard + +"metro@npm:0.59.0, metro@npm:^0.59.0": + version: 0.59.0 + resolution: "metro@npm:0.59.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + "@babel/core": "npm:^7.0.0" + "@babel/generator": "npm:^7.5.0" + "@babel/parser": "npm:^7.0.0" + "@babel/plugin-external-helpers": "npm:^7.0.0" + "@babel/template": "npm:^7.0.0" + "@babel/traverse": "npm:^7.0.0" + "@babel/types": "npm:^7.0.0" + absolute-path: "npm:^0.0.0" + async: "npm:^2.4.0" + babel-preset-fbjs: "npm:^3.3.0" + buffer-crc32: "npm:^0.2.13" + chalk: "npm:^2.4.1" + ci-info: "npm:^2.0.0" + concat-stream: "npm:^1.6.0" + connect: "npm:^3.6.5" + debug: "npm:^2.2.0" + denodeify: "npm:^1.2.1" + error-stack-parser: "npm:^2.0.6" + eventemitter3: "npm:^3.0.0" + fbjs: "npm:^1.0.0" + fs-extra: "npm:^1.0.0" + graceful-fs: "npm:^4.1.3" + image-size: "npm:^0.6.0" + invariant: "npm:^2.2.4" + jest-haste-map: "npm:^24.9.0" + jest-worker: "npm:^24.9.0" + json-stable-stringify: "npm:^1.0.1" + lodash.throttle: "npm:^4.1.1" + merge-stream: "npm:^1.0.1" + metro-babel-register: "npm:0.59.0" + metro-babel-transformer: "npm:0.59.0" + metro-cache: "npm:0.59.0" + metro-config: "npm:0.59.0" + metro-core: "npm:0.59.0" + metro-inspector-proxy: "npm:0.59.0" + metro-minify-uglify: "npm:0.59.0" + metro-react-native-babel-preset: "npm:0.59.0" + metro-resolver: "npm:0.59.0" + metro-source-map: "npm:0.59.0" + metro-symbolicate: "npm:0.59.0" + mime-types: "npm:2.1.11" + mkdirp: "npm:^0.5.1" + node-fetch: "npm:^2.2.0" + nullthrows: "npm:^1.1.1" + resolve: "npm:^1.5.0" + rimraf: "npm:^2.5.4" + serialize-error: "npm:^2.1.0" + source-map: "npm:^0.5.6" + strip-ansi: "npm:^4.0.0" + temp: "npm:0.8.3" + throat: "npm:^4.1.0" + wordwrap: "npm:^1.0.0" + ws: "npm:^1.1.5" + xpipe: "npm:^1.0.5" + yargs: "npm:^14.2.0" + bin: + metro: src/cli.js + checksum: 10c0/64989f095c1b1e992fb7012474d10da060ffa56f2511015430739443fa83f7b6b11ddc0c58e8f70c9c9a6ca0c734cdf1c62e26237ae936b4b7d9b78b19bcdc3d + languageName: node + linkType: hard + +"metro@npm:0.76.8": + version: 0.76.8 + resolution: "metro@npm:0.76.8" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + "@babel/core": "npm:^7.20.0" + "@babel/generator": "npm:^7.20.0" + "@babel/parser": "npm:^7.20.0" + "@babel/template": "npm:^7.0.0" + "@babel/traverse": "npm:^7.20.0" + "@babel/types": "npm:^7.20.0" + accepts: "npm:^1.3.7" + async: "npm:^3.2.2" + chalk: "npm:^4.0.0" + ci-info: "npm:^2.0.0" + connect: "npm:^3.6.5" + debug: "npm:^2.2.0" + denodeify: "npm:^1.2.1" + error-stack-parser: "npm:^2.0.6" + graceful-fs: "npm:^4.2.4" + hermes-parser: "npm:0.12.0" + image-size: "npm:^1.0.2" + invariant: "npm:^2.2.4" + jest-worker: "npm:^27.2.0" + jsc-safe-url: "npm:^0.2.2" + lodash.throttle: "npm:^4.1.1" + metro-babel-transformer: "npm:0.76.8" + metro-cache: "npm:0.76.8" + metro-cache-key: "npm:0.76.8" + metro-config: "npm:0.76.8" + metro-core: "npm:0.76.8" + metro-file-map: "npm:0.76.8" + metro-inspector-proxy: "npm:0.76.8" + metro-minify-terser: "npm:0.76.8" + metro-minify-uglify: "npm:0.76.8" + metro-react-native-babel-preset: "npm:0.76.8" + metro-resolver: "npm:0.76.8" + metro-runtime: "npm:0.76.8" + metro-source-map: "npm:0.76.8" + metro-symbolicate: "npm:0.76.8" + metro-transform-plugins: "npm:0.76.8" + metro-transform-worker: "npm:0.76.8" + mime-types: "npm:^2.1.27" + node-fetch: "npm:^2.2.0" + nullthrows: "npm:^1.1.1" + rimraf: "npm:^3.0.2" + serialize-error: "npm:^2.1.0" + source-map: "npm:^0.5.6" + strip-ansi: "npm:^6.0.0" + throat: "npm:^5.0.0" + ws: "npm:^7.5.1" + yargs: "npm:^17.6.2" + bin: + metro: src/cli.js + checksum: 10c0/2749faf0c96a6c411ddf826f5a6da215b6303a1a84bdccfe124e395beaa85090cb09c3b95db7b11753d9fa2ff2e91d48f6e64728b8273c75989e4b49ce1ba00f + languageName: node + linkType: hard + "micromark-core-commonmark@npm:2.0.2": version: 2.0.2 resolution: "micromark-core-commonmark@npm:2.0.2" @@ -12271,14 +15647,14 @@ __metadata: linkType: hard "micromark-util-subtokenize@npm:^2.0.0": - version: 2.0.3 - resolution: "micromark-util-subtokenize@npm:2.0.3" + version: 2.1.0 + resolution: "micromark-util-subtokenize@npm:2.1.0" dependencies: devlop: "npm:^1.0.0" micromark-util-chunked: "npm:^2.0.0" micromark-util-symbol: "npm:^2.0.0" micromark-util-types: "npm:^2.0.0" - checksum: 10c0/75501986ecb02a6f06c0f3e58b584ae3ff3553b520260e8ce27d2db8c79b8888861dd9d3b26e30f5c6084fddd90f96dc3ff551f02c2ac4d669ebe920e483b6d6 + checksum: 10c0/bee69eece4393308e657c293ba80d92ebcb637e5f55e21dcf9c3fa732b91a8eda8ac248d76ff375e675175bfadeae4712e5158ef97eef1111789da1ce7ab5067 languageName: node linkType: hard @@ -12353,6 +15729,27 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": + version: 3.1.10 + resolution: "micromatch@npm:3.1.10" + dependencies: + arr-diff: "npm:^4.0.0" + array-unique: "npm:^0.3.2" + braces: "npm:^2.3.1" + define-property: "npm:^2.0.2" + extend-shallow: "npm:^3.0.2" + extglob: "npm:^2.0.4" + fragment-cache: "npm:^0.2.1" + kind-of: "npm:^6.0.2" + nanomatch: "npm:^1.2.9" + object.pick: "npm:^1.3.0" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.2" + checksum: 10c0/531a32e7ac92bef60657820202be71b63d0f945c08a69cc4c239c0b19372b751483d464a850a2e3a5ff6cc9060641e43d44c303af104c1a27493d137d8af017f + languageName: node + linkType: hard + "micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" @@ -12363,21 +15760,37 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": +"mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa languageName: node linkType: hard -"mime-db@npm:^1.54.0": +"mime-db@npm:>= 1.43.0 < 2, mime-db@npm:^1.54.0": version: 1.54.0 resolution: "mime-db@npm:1.54.0" checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284 languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": +"mime-db@npm:~1.23.0": + version: 1.23.0 + resolution: "mime-db@npm:1.23.0" + checksum: 10c0/86de2d1797e7ee2f296eecaf702db94db176abe7a1e4bbde84831677f1f0786484eabcc4139adcded883e88af52df1e54da0e1292c132825bb53ca128882ab57 + languageName: node + linkType: hard + +"mime-types@npm:2.1.11": + version: 2.1.11 + resolution: "mime-types@npm:2.1.11" + dependencies: + mime-db: "npm:~1.23.0" + checksum: 10c0/19d038e96ee095cf0bf7270f2238f7b391758b0df7d0bb584afacc630942b28e7688fa735bc51be8cc1e2b08ada381222112412aec7923006a9c1e43005f3c3e + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -12395,6 +15808,31 @@ __metadata: languageName: node linkType: hard +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mime@npm:^2.4.1": + version: 2.6.0 + resolution: "mime@npm:2.6.0" + bin: + mime: cli.js + checksum: 10c0/a7f2589900d9c16e3bdf7672d16a6274df903da958c1643c9c45771f0478f3846dcb1097f31eb9178452570271361e2149310931ec705c037210fc69639c8e6c + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -12434,16 +15872,16 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^10.0.0, minimatch@npm:~10.0.1": - version: 10.0.1 - resolution: "minimatch@npm:10.0.1" +"minimatch@npm:^10.0.3, minimatch@npm:~10.0.1": + version: 10.0.3 + resolution: "minimatch@npm:10.0.3" dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10c0/e43e4a905c5d70ac4cec8530ceaeccb9c544b1ba8ac45238e2a78121a01c17ff0c373346472d221872563204eabe929ad02669bb575cb1f0cc30facab369f70f languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -12453,11 +15891,11 @@ __metadata: linkType: hard "minimatch@npm:^5.0.1": - version: 5.1.4 - resolution: "minimatch@npm:5.1.4" + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10c0/92090c49aaa8d6f29ab6b225fc4153a575abe6a13580b18e94f704f9012be8b4a98077c1713033e7ff18e9d0db70f543e9c5f0344408ec0ada16bc156a46a76e + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 languageName: node linkType: hard @@ -12490,7 +15928,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": +"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -12612,6 +16050,27 @@ __metadata: languageName: node linkType: hard +"mixin-deep@npm:^1.2.0": + version: 1.3.2 + resolution: "mixin-deep@npm:1.3.2" + dependencies: + for-in: "npm:^1.0.2" + is-extendable: "npm:^1.0.1" + checksum: 10c0/cb39ffb73c377222391af788b4c83d1a6cecb2d9fceb7015384f8deb46e151a9b030c21ef59a79cb524d4557e3f74c7248ab948a62a6e7e296b42644863d183b + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -12637,28 +16096,28 @@ __metadata: languageName: node linkType: hard -"module-definition@npm:^6.0.0": - version: 6.0.0 - resolution: "module-definition@npm:6.0.0" +"module-definition@npm:^6.0.1": + version: 6.0.1 + resolution: "module-definition@npm:6.0.1" dependencies: - ast-module-types: "npm:^6.0.0" - node-source-walk: "npm:^7.0.0" + ast-module-types: "npm:^6.0.1" + node-source-walk: "npm:^7.0.1" bin: module-definition: bin/cli.js - checksum: 10c0/6e9cadc32904c6c3ffaea18e1e509569f5fe3e78d3cdc2c61bc7f77373542b10b42d2883e5a31d39e83c4ee8c68e9bd15937958b19e37e2531baf748f64c2f3f + checksum: 10c0/b6c898e97041512364947e6b892b351352f3bf29fdc512d625586627828cfdd385665fbbc7c52ae3686ce5b026bde9a5e26ae22408812b9b3991f9d786566316 languageName: node linkType: hard "module-details-from-path@npm:^1.0.3": - version: 1.0.3 - resolution: "module-details-from-path@npm:1.0.3" - checksum: 10c0/3d881f3410c142e4c2b1307835a2862ba04e5b3ec6e90655614a0ee2c4b299b4c1d117fb525d2435bf436990026f18d338a197b54ad6bd36252f465c336ff423 + version: 1.0.4 + resolution: "module-details-from-path@npm:1.0.4" + checksum: 10c0/10863413e96dab07dee917eae07afe46f7bf853065cc75a7d2a718adf67574857fb64f8a2c0c9af12ac733a9a8cf652db7ed39b95f7a355d08106cb9cc50c83b languageName: node linkType: hard -"module-lookup-amd@npm:^9.0.1": - version: 9.0.2 - resolution: "module-lookup-amd@npm:9.0.2" +"module-lookup-amd@npm:^9.0.3": + version: 9.0.5 + resolution: "module-lookup-amd@npm:9.0.5" dependencies: commander: "npm:^12.1.0" glob: "npm:^7.2.3" @@ -12666,23 +16125,30 @@ __metadata: requirejs-config-file: "npm:^4.0.0" bin: lookup-amd: bin/cli.js - checksum: 10c0/350f03d1837b1bc8c135c5aaf1d91e5d28f4d89ba0be7319f403ec3ca7f99234c90c93f0de59d6ea9591d09bac895ae200ceffe92f44deb4aebef35e0285af87 + checksum: 10c0/0c7aa77a4a57359d095b7a1ab1a3349ee02d85399a935bfddf47f7a1b1f3e1fa9c0040fdecbf4ce8c842d74665dde32b69467a752a5eb891f0270db005cdb730 languageName: node linkType: hard "moment-timezone@npm:^0.5.43": - version: 0.5.43 - resolution: "moment-timezone@npm:0.5.43" + version: 0.5.48 + resolution: "moment-timezone@npm:0.5.48" dependencies: moment: "npm:^2.29.4" - checksum: 10c0/6f42174e01398d135883fb45aa820e57f34b25aab5ea6c50998139d06f975ee4457275b5e331466b14bff4d830e681c267f9cc462f445eb9c2b84d04add829f6 + checksum: 10c0/ab14ec9d94bc33f29ac18e5417b7f8aca0b17130b952c5cc9697b8fea839e5ece9313af5fd3c9703a05db472b1560ddbfc7ad2aa24aac9afd047d6da6c3c6033 languageName: node linkType: hard "moment@npm:^2.29.4": - version: 2.29.4 - resolution: "moment@npm:2.29.4" - checksum: 10c0/844c6f3ce42862ac9467c8ca4f5e48a00750078682cc5bda1bc0e50cc7ca88e2115a0f932d65a06e4a90e26cb78892be9b3ca3dd6546ca2c4d994cebb787fc2b + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + +"mrmime@npm:^1.0.0": + version: 1.0.1 + resolution: "mrmime@npm:1.0.1" + checksum: 10c0/ab071441da76fd23b3b0d1823d77aacf8679d379a4a94cacd83e487d3d906763b277f3203a594c613602e31ab5209c26a8119b0477c4541ef8555b293a9db6d3 languageName: node linkType: hard @@ -12693,7 +16159,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.1.1, ms@npm:^2.1.3": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -12713,6 +16179,13 @@ __metadata: languageName: node linkType: hard +"mute-stream@npm:0.0.7": + version: 0.0.7 + resolution: "mute-stream@npm:0.0.7" + checksum: 10c0/c687cfe99289166fe17dcbd0cf49612c5d267410a7819b654a82df45016967d7b2b0b18b35410edef86de6bb089a00413557dc0182c5e78a4af50ba5d61edb42 + languageName: node + linkType: hard + "mute-stream@npm:0.0.8": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" @@ -12727,6 +16200,15 @@ __metadata: languageName: node linkType: hard +"nan@npm:^2.12.1": + version: 2.23.0 + resolution: "nan@npm:2.23.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/b986dd257dca53ab43a3b6ca6d0eafde697b69e1d63b242fa4aece50ce97eb169f9c4a5d8eb0eb5f58d118a9595fee11f3198fa210f023440053bb6f54109e73 + languageName: node + linkType: hard + "nano-spawn@npm:^1.0.2": version: 1.0.2 resolution: "nano-spawn@npm:1.0.2" @@ -12743,12 +16225,31 @@ __metadata: languageName: node linkType: hard -"napi-postinstall@npm:^0.2.2": - version: 0.2.4 - resolution: "napi-postinstall@npm:0.2.4" +"nanomatch@npm:^1.2.9": + version: 1.2.13 + resolution: "nanomatch@npm:1.2.13" + dependencies: + arr-diff: "npm:^4.0.0" + array-unique: "npm:^0.3.2" + define-property: "npm:^2.0.2" + extend-shallow: "npm:^3.0.2" + fragment-cache: "npm:^0.2.1" + is-windows: "npm:^1.0.2" + kind-of: "npm:^6.0.2" + object.pick: "npm:^1.3.0" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.1" + checksum: 10c0/0f5cefa755ca2e20c86332821995effb24acb79551ddaf51c1b9112628cad234a0d8fd9ac6aa56ad1f8bfad6ff6ae86e851acb960943249d9fa44b091479953a + languageName: node + linkType: hard + +"napi-postinstall@npm:^0.3.0": + version: 0.3.2 + resolution: "napi-postinstall@npm:0.3.2" bin: napi-postinstall: lib/cli.js - checksum: 10c0/e8c357d7e27848c4af7becf2796afff245a2fc8ba176e1b133410bb1c9934a66d4bc542d0c9f04c73b0ba34ee0486b30b6cd1c62ed3aa36797d394200c9a2a8b + checksum: 10c0/77c67eb9871d24afe7bad30e6115c441d099d6a0e42dc1c49c4a722ff682425e08dc6dd2b03eca10db9b547e724c38fb51325c35039e7ac10dcb714bb88d7326 languageName: node linkType: hard @@ -12766,6 +16267,13 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + "negotiator@npm:^0.6.3, negotiator@npm:~0.6.4": version: 0.6.4 resolution: "negotiator@npm:0.6.4" @@ -12780,13 +16288,34 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.2": +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d languageName: node linkType: hard +"nocache@npm:^2.1.0": + version: 2.1.0 + resolution: "nocache@npm:2.1.0" + checksum: 10c0/24783774a38592735c5beb2346d2beae3ff9134742461b474ebeeb5bf3a0a16a73df8039ecd587f39a5844138a830b08053ce15159e26203f22b3a4f415fb0b4 + languageName: node + linkType: hard + +"nocache@npm:^3.0.1": + version: 3.0.4 + resolution: "nocache@npm:3.0.4" + checksum: 10c0/66e5db1206bee44173358c2264ae9742259273e9719535077fe27807441bad58f0deeadf3cec2aa62d4f86ccb8a0e067c9a64b6329684ddc30a57e377ec458ee + languageName: node + linkType: hard + +"node-abort-controller@npm:^3.1.1": + version: 3.1.1 + resolution: "node-abort-controller@npm:3.1.1" + checksum: 10c0/f7ad0e7a8e33809d4f3a0d1d65036a711c39e9d23e0319d80ebe076b9a3b4432b4d6b86a7fab65521de3f6872ffed36fc35d1327487c48eb88c517803403eda3 + languageName: node + linkType: hard + "node-addon-api@npm:^7.0.0": version: 7.1.1 resolution: "node-addon-api@npm:7.1.1" @@ -12797,11 +16326,20 @@ __metadata: linkType: hard "node-addon-api@npm:^8.3.0": - version: 8.3.1 - resolution: "node-addon-api@npm:8.3.1" + version: 8.5.0 + resolution: "node-addon-api@npm:8.5.0" dependencies: node-gyp: "npm:latest" - checksum: 10c0/e28f1c5094130ecc3a0bf882e0385e74cac9c5112d35287dbce369959551ab7ca4d1f1a69af737107c894c14b4063dd5002e2b3c16a27035d025bb06eefee058 + checksum: 10c0/e4de0b4e70998fed7ef41933946f60565fc3a17cb83b7d626a0c0bb1f734cf7852e0e596f12681e7c8ed424163ee3cdbb4f0abaa9cc269d03f48834c263ba162 + languageName: node + linkType: hard + +"node-dir@npm:^0.1.17": + version: 0.1.17 + resolution: "node-dir@npm:0.1.17" + dependencies: + minimatch: "npm:^3.0.2" + checksum: 10c0/16222e871708c405079ff8122d4a7e1d522c5b90fc8f12b3112140af871cfc70128c376e845dcd0044c625db0d2efebd2d852414599d240564db61d53402b4c1 languageName: node linkType: hard @@ -12819,9 +16357,19 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.1": - version: 2.6.8 - resolution: "node-fetch@npm:2.6.8" +"node-fetch@npm:^1.0.1": + version: 1.7.3 + resolution: "node-fetch@npm:1.7.3" + dependencies: + encoding: "npm:^0.1.11" + is-stream: "npm:^1.0.1" + checksum: 10c0/5a6b56b3edf909ccd20414355867d24f15f1885da3b26be90840241c46e63754ebf4697050f897daab676e3952d969611ffe1d4bc4506cf50f70837e20ad5328 + languageName: node + linkType: hard + +"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" dependencies: whatwg-url: "npm:^5.0.0" peerDependencies: @@ -12829,7 +16377,7 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: 10c0/4e3cfdeb3e5e0e6d1192be08942d6530d74b0ac4fe6d8fc1cbcc3e7f274807b4f662ff1218393ba9e5e0e0c15c66365128726ed5400585feda707c31234d1f16 + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 languageName: node linkType: hard @@ -12845,8 +16393,8 @@ __metadata: linkType: hard "node-gyp@npm:^10.0.0": - version: 10.2.0 - resolution: "node-gyp@npm:10.2.0" + version: 10.3.1 + resolution: "node-gyp@npm:10.3.1" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -12860,13 +16408,13 @@ __metadata: which: "npm:^4.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + checksum: 10c0/87c3b50e1f6f5256b5d2879a8c064eefa53ed444bad2a20870be43bc189db7cbffe22c30af056046c6d904181d73881b1726fd391d2f6f79f89b991019f195ea languageName: node linkType: hard "node-gyp@npm:latest": - version: 11.2.0 - resolution: "node-gyp@npm:11.2.0" + version: 11.3.0 + resolution: "node-gyp@npm:11.3.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -12880,7 +16428,7 @@ __metadata: which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + checksum: 10c0/5f4ad5a729386f7b50096efd4934b06c071dbfbc7d7d541a66d6959a7dccd62f53ff3dc95fffb60bf99d8da1270e23769f82246fcaa6c5645a70c967ae9a3398 languageName: node linkType: hard @@ -12898,19 +16446,26 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.18": - version: 2.0.18 - resolution: "node-releases@npm:2.0.18" - checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa languageName: node linkType: hard -"node-source-walk@npm:^7.0.0": - version: 7.0.0 - resolution: "node-source-walk@npm:7.0.0" +"node-source-walk@npm:^7.0.1": + version: 7.0.1 + resolution: "node-source-walk@npm:7.0.1" dependencies: - "@babel/parser": "npm:^7.24.4" - checksum: 10c0/e604e4e6f79f2e976658c3586576f9b0cfb03197053dfaf3bf76576a6edf2cbe0c92eb42226ed34ffd40559f25e0b7b37247a031ff66a55aa0dd82ca76831771 + "@babel/parser": "npm:^7.26.7" + checksum: 10c0/a3e484940d322d44c1d06cb32072d96338e44c63cdac315a0cb9d28934015cef088ba4ba1c47a274c60e4431d4d773fbb9c544e36ebd0085cba29bb9c7234911 + languageName: node + linkType: hard + +"node-stream-zip@npm:^1.9.1": + version: 1.15.0 + resolution: "node-stream-zip@npm:1.15.0" + checksum: 10c0/429fce95d7e90e846adbe096c61d2ea8d18defc155c0345d25d0f98dd6fc72aeb95039318484a4e0a01dc3814b6d0d1ae0fe91847a29669dff8676ec064078c9 languageName: node linkType: hard @@ -12991,6 +16546,15 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: "npm:^1.0.1" + checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -13105,6 +16669,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: "npm:^2.0.0" + checksum: 10c0/95549a477886f48346568c97b08c4fda9cdbf7ce8a4fbc2213f36896d0d19249e32d68d7451bdcbca8041b5fba04a6b2c4a618beaf19849505c05b700740f1de + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -13114,32 +16687,39 @@ __metadata: languageName: node linkType: hard +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 10c0/56f34bd7c3dcb3bd23481a277fa22918120459d3e9d95ca72976c72e9cac33a97483f0b95fc420e2eb546b9fe6db398273aba9a938650cdb8c98ee8f159dcb30 + languageName: node + linkType: hard + "nwsapi@npm:^2.2.16": - version: 2.2.20 - resolution: "nwsapi@npm:2.2.20" - checksum: 10c0/07f4dafa3186aef7c007863e90acd4342a34ba9d44b22f14f644fdb311f6086887e21c2fc15efaa826c2bc39ab2bc841364a1a630e7c87e0cb723ba59d729297 + version: 2.2.21 + resolution: "nwsapi@npm:2.2.21" + checksum: 10c0/dd330cabb886fd417624bd3af368d86c3d507c002c05fb2f7981874204298deec9e8bd5103d8a0c4a0e0dc280276dc4a59a059e1045eeb7a628f79e6cefba6a3 languageName: node linkType: hard "nx@npm:>=17.1.2 < 21": - version: 20.1.0 - resolution: "nx@npm:20.1.0" + version: 20.8.2 + resolution: "nx@npm:20.8.2" dependencies: "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:20.1.0" - "@nx/nx-darwin-x64": "npm:20.1.0" - "@nx/nx-freebsd-x64": "npm:20.1.0" - "@nx/nx-linux-arm-gnueabihf": "npm:20.1.0" - "@nx/nx-linux-arm64-gnu": "npm:20.1.0" - "@nx/nx-linux-arm64-musl": "npm:20.1.0" - "@nx/nx-linux-x64-gnu": "npm:20.1.0" - "@nx/nx-linux-x64-musl": "npm:20.1.0" - "@nx/nx-win32-arm64-msvc": "npm:20.1.0" - "@nx/nx-win32-x64-msvc": "npm:20.1.0" + "@nx/nx-darwin-arm64": "npm:20.8.2" + "@nx/nx-darwin-x64": "npm:20.8.2" + "@nx/nx-freebsd-x64": "npm:20.8.2" + "@nx/nx-linux-arm-gnueabihf": "npm:20.8.2" + "@nx/nx-linux-arm64-gnu": "npm:20.8.2" + "@nx/nx-linux-arm64-musl": "npm:20.8.2" + "@nx/nx-linux-x64-gnu": "npm:20.8.2" + "@nx/nx-linux-x64-musl": "npm:20.8.2" + "@nx/nx-win32-arm64-msvc": "npm:20.8.2" + "@nx/nx-win32-x64-msvc": "npm:20.8.2" "@yarnpkg/lockfile": "npm:^1.1.0" "@yarnpkg/parsers": "npm:3.0.2" "@zkochan/js-yaml": "npm:0.0.7" - axios: "npm:^1.7.4" + axios: "npm:^1.8.3" chalk: "npm:^4.1.0" cli-cursor: "npm:3.1.0" cli-spinners: "npm:2.6.1" @@ -13159,12 +16739,14 @@ __metadata: npm-run-path: "npm:^4.0.1" open: "npm:^8.4.0" ora: "npm:5.3.0" + resolve.exports: "npm:2.0.3" semver: "npm:^7.5.3" string-width: "npm:^4.2.3" tar-stream: "npm:~2.2.0" tmp: "npm:~0.2.1" tsconfig-paths: "npm:^4.1.2" tslib: "npm:^2.3.0" + yaml: "npm:^2.6.0" yargs: "npm:^17.6.2" yargs-parser: "npm:21.1.1" peerDependencies: @@ -13199,32 +16781,43 @@ __metadata: bin: nx: bin/nx.js nx-cloud: bin/nx-cloud.js - checksum: 10c0/83f2c40357aadb88dfa641998f9356fb7536456421473446027bc0042425c1f04e74d1bfd592591182e033c58c01daef827a7c9064e8af09e90eb9af682db49f + checksum: 10c0/3b6b202f5447f7c10d4755c9485596f607dff4cb39ef6e241c68a3d7f9cd3c5220166ed0760d3a8e2deaaebfe40db54b95ffe9e5796f7ce38c33d87bc3d10c97 languageName: node linkType: hard -"object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 +"ob1@npm:0.59.0": + version: 0.59.0 + resolution: "ob1@npm:0.59.0" + checksum: 10c0/b4e4cb4032435ddebb06b6da6751089669f944a9ca7f4b8728d0ec24b21fe2d90b7c42df2b57b0dc93d535d0c40082d673c3dfef02e7f880210a6263784a1914 + languageName: node + linkType: hard + +"ob1@npm:0.76.8": + version: 0.76.8 + resolution: "ob1@npm:0.76.8" + checksum: 10c0/9ae7e74ea2cc5237a4655a5930d2121436a68ce601cf56939fe06e2226eafd62a706efbf69bf2e846ed0c252cf85eb4b0016ca37e00f6214a0daeb2096a9ba7c languageName: node linkType: hard -"object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 10c0/fad603f408e345c82e946abdf4bfd774260a5ed3e5997a0b057c44153ac32c7271ff19e3a5ae39c858da683ba045ccac2f65245c12763ce4e8594f818f4a648d +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 languageName: node linkType: hard -"object-inspect@npm:^1.13.3": - version: 1.13.3 - resolution: "object-inspect@npm:1.13.3" - checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 +"object-copy@npm:^0.1.0": + version: 0.1.0 + resolution: "object-copy@npm:0.1.0" + dependencies: + copy-descriptor: "npm:^0.1.0" + define-property: "npm:^0.2.5" + kind-of: "npm:^3.0.3" + checksum: 10c0/79314b05e9d626159a04f1d913f4c4aba9eae8848511cf5f4c8e3b04bb3cc313b65f60357f86462c959a14c2d58380fedf89b6b32ecec237c452a5ef3900a293 languageName: node linkType: hard -"object-inspect@npm:^1.13.4": +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 @@ -13238,19 +16831,16 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.3, object.assign@npm:^4.1.5": - version: 4.1.5 - resolution: "object.assign@npm:4.1.5" +"object-visit@npm:^1.0.0": + version: 1.0.1 + resolution: "object-visit@npm:1.0.1" dependencies: - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" - object-keys: "npm:^1.1.1" - checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + isobject: "npm:^3.0.0" + checksum: 10c0/086b475bda24abd2318d2b187c3e928959b89f5cb5883d6fe5a42d03719b61fc18e765f658de9ac8730e67ba9ff26d61e73d991215948ff9ecefe771e0071029 languageName: node linkType: hard -"object.assign@npm:^4.1.7": +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.7": version: 4.1.7 resolution: "object.assign@npm:4.1.7" dependencies: @@ -13299,7 +16889,16 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.2.1": +"object.pick@npm:^1.3.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/cd316ec986e49895a28f2df9182de9cdeee57cd2a952c122aacc86344c28624fe002d9affc4f48b5014ec7c033da9942b08821ddb44db8c5bac5b3ec54bdc31e + languageName: node + linkType: hard + +"object.values@npm:^1.1.6, object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" dependencies: @@ -13311,14 +16910,7 @@ __metadata: languageName: node linkType: hard -"obuf@npm:~1.1.2": - version: 1.1.2 - resolution: "obuf@npm:1.1.2" - checksum: 10c0/520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81 - languageName: node - linkType: hard - -"on-finished@npm:^2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -13327,6 +16919,15 @@ __metadata: languageName: node linkType: hard +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea + languageName: node + linkType: hard + "on-headers@npm:~1.1.0": version: 1.1.0 resolution: "on-headers@npm:1.1.0" @@ -13352,6 +16953,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: "npm:^1.0.0" + checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 + languageName: node + linkType: hard + "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -13370,6 +16980,15 @@ __metadata: languageName: node linkType: hard +"open@npm:^6.2.0": + version: 6.4.0 + resolution: "open@npm:6.4.0" + dependencies: + is-wsl: "npm:^1.1.0" + checksum: 10c0/447115632b4f3939fa0d973c33e17f28538fd268fd8257fc49763f7de6e76d29d65585b15998bbd2137337cfb70a92084a0e1b183a466e53a4829f704f295823 + languageName: node + linkType: hard + "open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" @@ -13382,16 +17001,23 @@ __metadata: linkType: hard "optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: - "@aashutoshrathi/word-wrap": "npm:^1.2.3" deep-is: "npm:^0.1.3" fast-levenshtein: "npm:^2.0.6" levn: "npm:^0.4.1" prelude-ls: "npm:^1.2.1" type-check: "npm:^0.4.0" - checksum: 10c0/66fba794d425b5be51353035cf3167ce6cfa049059cbb93229b819167687e0f48d2bc4603fcb21b091c99acb516aae1083624675b15c4765b2e4693a085e959c + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"options@npm:>=0.0.5": + version: 0.0.6 + resolution: "options@npm:0.0.6" + checksum: 10c0/864945aabe0e132f1fc2b290d1615f6022d48fd789580f91adf8a2a31d36b7c0f93b09c28d2c7b2dc3057e7c7fc7d608cbbe8e9b1b3f5b332d1a023afaca4f04 languageName: node linkType: hard @@ -13411,6 +17037,20 @@ __metadata: languageName: node linkType: hard +"ora@npm:^3.4.0": + version: 3.4.0 + resolution: "ora@npm:3.4.0" + dependencies: + chalk: "npm:^2.4.2" + cli-cursor: "npm:^2.1.0" + cli-spinners: "npm:^2.0.0" + log-symbols: "npm:^2.2.0" + strip-ansi: "npm:^5.2.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/04cb375f222c36a16a95e6c39c473644a99a42fc34d35c37507cb836ea0a71f4d831fcd53198a460869114b2730891d63cc1047304afe5ddb078974d468edfb1 + languageName: node + linkType: hard + "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -13435,7 +17075,7 @@ __metadata: languageName: node linkType: hard -"os-tmpdir@npm:~1.0.2": +"os-tmpdir@npm:^1.0.0, os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 @@ -13476,7 +17116,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -13503,6 +17143,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: "npm:^2.0.0" + checksum: 10c0/7b7f06f718f19e989ce6280ed4396fb3c34dabdee0df948376483032f9d5ec22fdf7077ec942143a75827bb85b11da72016497fc10dac1106c837ed593969ee8 + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -13707,12 +17356,19 @@ __metadata: languageName: node linkType: hard +"parse-node-version@npm:^1.0.0": + version: 1.0.1 + resolution: "parse-node-version@npm:1.0.1" + checksum: 10c0/999cd3d7da1425c2e182dce82b226c6dc842562d3ed79ec47f5c719c32a7f6c1a5352495b894fc25df164be7f2ede4224758255da9902ddef81f2b77ba46bb2c + languageName: node + linkType: hard + "parse-path@npm:^7.0.0": - version: 7.0.0 - resolution: "parse-path@npm:7.0.0" + version: 7.1.0 + resolution: "parse-path@npm:7.1.0" dependencies: protocols: "npm:^2.0.0" - checksum: 10c0/e7646f6b998b083bbd40102643d803557ce4ae18ae1704e6cc7ae2525ea7c5400f4a3635aca3244cfe65ce4dd0ff77db1142dde4d080e8a80c364c4b3e8fe8d2 + checksum: 10c0/8c8c8b3019323d686e7b1cd6fd9653bc233404403ad68827836fbfe59dfe26aaef64ed4e0396d0e20c4a7e1469312ec969a679618960e79d5e7c652dc0da5a0f languageName: node linkType: hard @@ -13732,16 +17388,7 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" - dependencies: - entities: "npm:^4.4.0" - checksum: 10c0/297d7af8224f4b5cb7f6617ecdae98eeaed7f8cbd78956c42785e230505d5a4f07cef352af10d3006fa5c1544b76b57784d3a22d861ae071bbc460c649482bf4 - languageName: node - linkType: hard - -"parse5@npm:^7.2.1": +"parse5@npm:^7.0.0, parse5@npm:^7.2.1": version: 7.3.0 resolution: "parse5@npm:7.3.0" dependencies: @@ -13750,13 +17397,20 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:^1.3.3": +"parseurl@npm:^1.3.3, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 languageName: node linkType: hard +"pascalcase@npm:^0.1.1": + version: 0.1.1 + resolution: "pascalcase@npm:0.1.1" + checksum: 10c0/48dfe90618e33810bf58211d8f39ad2c0262f19ad6354da1ba563935b5f429f36409a1fb9187c220328f7a4dc5969917f8e3e01ee089b5f1627b02aefe39567b + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -13778,6 +17432,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.0": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b + languageName: node + linkType: hard + "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -13888,13 +17549,6 @@ __metadata: languageName: node linkType: hard -"pg-numeric@npm:1.0.2": - version: 1.0.2 - resolution: "pg-numeric@npm:1.0.2" - checksum: 10c0/43dd9884e7b52c79ddc28d2d282d7475fce8bba13452d33c04ceb2e0a65f561edf6699694e8e1c832ff9093770496363183c950dd29608e1bdd98f344b25bca9 - languageName: node - linkType: hard - "pg-pool@npm:^3.10.1": version: 3.10.1 resolution: "pg-pool@npm:3.10.1" @@ -13904,14 +17558,7 @@ __metadata: languageName: node linkType: hard -"pg-protocol@npm:*": - version: 1.10.2 - resolution: "pg-protocol@npm:1.10.2" - checksum: 10c0/3f9b5aba3f356190738ea25ecded3cd033cd2218789acf9c67b75788932c4b594eeb7043481822b69eaae4d84401e00142a2ef156297a8347987a78a52afd50e - languageName: node - linkType: hard - -"pg-protocol@npm:^1.10.3": +"pg-protocol@npm:*, pg-protocol@npm:^1.10.3": version: 1.10.3 resolution: "pg-protocol@npm:1.10.3" checksum: 10c0/f7ef54708c93ee6d271e37678296fc5097e4337fca91a88a3d99359b78633dbdbf6e983f0adb34b7cdd261b7ec7266deb20c3233bf3dfdb498b3e1098e8750b9 @@ -13931,21 +17578,6 @@ __metadata: languageName: node linkType: hard -"pg-types@npm:^4.0.1": - version: 4.0.2 - resolution: "pg-types@npm:4.0.2" - dependencies: - pg-int8: "npm:1.0.1" - pg-numeric: "npm:1.0.2" - postgres-array: "npm:~3.0.1" - postgres-bytea: "npm:~3.0.0" - postgres-date: "npm:~2.1.0" - postgres-interval: "npm:^3.0.0" - postgres-range: "npm:^1.1.1" - checksum: 10c0/780fccda2f3fa2a34e85a72e8e7dadb7d88fbe71ce88f126cb3313f333ad836d02488ec4ff3d94d0c1e5846f735d6e6c6281f8059e6b8919d2180429acaec3e2 - languageName: node - linkType: hard - "pg@npm:^8.8.0": version: 8.16.3 resolution: "pg@npm:8.16.3" @@ -13977,28 +17609,21 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be languageName: node linkType: hard -"picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc - languageName: node - linkType: hard - -"picomatch@npm:^4.0.3": +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": version: 4.0.3 resolution: "picomatch@npm:4.0.3" checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 @@ -14051,13 +17676,22 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.7": +"pirates@npm:^4.0.6, pirates@npm:^4.0.7": version: 4.0.7 resolution: "pirates@npm:4.0.7" checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a languageName: node linkType: hard +"pkg-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "pkg-dir@npm:3.0.0" + dependencies: + find-up: "npm:^3.0.0" + checksum: 10c0/902a3d0c1f8ac43b1795fa1ba6ffeb37dfd53c91469e969790f6ed5e29ff2bdc50b63ba6115dc056d2efb4a040aa2446d512b3804bdafdf302f734fb3ec21847 + languageName: node + linkType: hard + "pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -14067,6 +17701,30 @@ __metadata: languageName: node linkType: hard +"plist@npm:^3.0.1, plist@npm:^3.0.5": + version: 3.1.0 + resolution: "plist@npm:3.1.0" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + base64-js: "npm:^1.5.1" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/db19ba50faafc4103df8e79bcd6b08004a56db2a9dd30b3e5c8b0ef30398ef44344a674e594d012c8fc39e539a2b72cb58c60a76b4b4401cbbc7c8f6b028d93d + languageName: node + linkType: hard + +"plugin-error@npm:^0.1.2": + version: 0.1.2 + resolution: "plugin-error@npm:0.1.2" + dependencies: + ansi-cyan: "npm:^0.1.1" + ansi-red: "npm:^0.1.1" + arr-diff: "npm:^1.0.1" + arr-union: "npm:^2.0.1" + extend-shallow: "npm:^1.1.2" + checksum: 10c0/bc08395a4ae874c4d3215b827be8e86c5535b4c834a1025ebbdea5b33bdfd82ac6db600f15df5a22eefc0f2adfce0da388b4c49fa4543af64220fbf1b6cd381a + languageName: node + linkType: hard + "pluralize@npm:^8.0.0": version: 8.0.0 resolution: "pluralize@npm:8.0.0" @@ -14074,10 +17732,17 @@ __metadata: languageName: node linkType: hard +"posix-character-classes@npm:^0.1.0": + version: 0.1.1 + resolution: "posix-character-classes@npm:0.1.1" + checksum: 10c0/cce88011548a973b4af58361cd8f5f7b5a6faff8eef0901565802f067bcabf82597e920d4c97c22068464be3cbc6447af589f6cc8a7d813ea7165be60a0395bc + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: 10c0/c810983414142071da1d644662ce4caebce890203eb2bc7bf119f37f3fe5796226e117e6cca146b521921fa6531072674174a3325066ac66fce089a53e1e5196 languageName: node linkType: hard @@ -14104,7 +17769,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.40, postcss@npm:^8.4.48, postcss@npm:^8.5.6": +"postcss@npm:^8.5.1, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -14122,13 +17787,6 @@ __metadata: languageName: node linkType: hard -"postgres-array@npm:~3.0.1": - version: 3.0.4 - resolution: "postgres-array@npm:3.0.4" - checksum: 10c0/47f3e648da512bacdd6a5ed55cf770605ec271330789faeece0fd13805a49f376d6e5c9e0e353377be11a9545e727dceaa2473566c505432bf06366ccd04c6b2 - languageName: node - linkType: hard - "postgres-bytea@npm:~1.0.0": version: 1.0.0 resolution: "postgres-bytea@npm:1.0.0" @@ -14136,15 +17794,6 @@ __metadata: languageName: node linkType: hard -"postgres-bytea@npm:~3.0.0": - version: 3.0.0 - resolution: "postgres-bytea@npm:3.0.0" - dependencies: - obuf: "npm:~1.1.2" - checksum: 10c0/41c79cc48aa730c5ba3eda6ab989a940034f07a1f57b8f2777dce56f1b8cca16c5870582932b5b10cc605048aef9b6157e06253c871b4717cafc6d00f55376aa - languageName: node - linkType: hard - "postgres-date@npm:~1.0.4": version: 1.0.7 resolution: "postgres-date@npm:1.0.7" @@ -14152,13 +17801,6 @@ __metadata: languageName: node linkType: hard -"postgres-date@npm:~2.1.0": - version: 2.1.0 - resolution: "postgres-date@npm:2.1.0" - checksum: 10c0/00a7472c10788f6b0d08d24108bf1eb80858de1bd6317740198a564918ea4a69b80c98148167b92ae688abd606483020d0de0dd3a36f3ea9a3e26bbeef3464f4 - languageName: node - linkType: hard - "postgres-interval@npm:^1.1.0": version: 1.2.0 resolution: "postgres-interval@npm:1.2.0" @@ -14168,42 +17810,28 @@ __metadata: languageName: node linkType: hard -"postgres-interval@npm:^3.0.0": - version: 3.0.0 - resolution: "postgres-interval@npm:3.0.0" - checksum: 10c0/8b570b30ea37c685e26d136d34460f246f98935a1533defc4b53bb05ee23ae3dc7475b718ec7ea607a57894d8c6b4f1adf67ca9cc83a75bdacffd427d5c68de8 - languageName: node - linkType: hard - -"postgres-range@npm:^1.1.1": - version: 1.1.4 - resolution: "postgres-range@npm:1.1.4" - checksum: 10c0/254494ef81df208e0adeae6b66ce394aba37914ea14c7ece55a45fb6691b7db04bee74c825380a47c887a9f87158fd3d86f758f9cc60b76d3a38ce5aca7912e8 - languageName: node - linkType: hard - -"precinct@npm:^12.0.2": - version: 12.1.2 - resolution: "precinct@npm:12.1.2" +"precinct@npm:^12.2.0": + version: 12.2.0 + resolution: "precinct@npm:12.2.0" dependencies: - "@dependents/detective-less": "npm:^5.0.0" + "@dependents/detective-less": "npm:^5.0.1" commander: "npm:^12.1.0" - detective-amd: "npm:^6.0.0" - detective-cjs: "npm:^6.0.0" - detective-es6: "npm:^5.0.0" - detective-postcss: "npm:^7.0.0" - detective-sass: "npm:^6.0.0" - detective-scss: "npm:^5.0.0" - detective-stylus: "npm:^5.0.0" - detective-typescript: "npm:^13.0.0" - detective-vue2: "npm:^2.0.3" - module-definition: "npm:^6.0.0" - node-source-walk: "npm:^7.0.0" - postcss: "npm:^8.4.40" - typescript: "npm:^5.5.4" + detective-amd: "npm:^6.0.1" + detective-cjs: "npm:^6.0.1" + detective-es6: "npm:^5.0.1" + detective-postcss: "npm:^7.0.1" + detective-sass: "npm:^6.0.1" + detective-scss: "npm:^5.0.1" + detective-stylus: "npm:^5.0.1" + detective-typescript: "npm:^14.0.0" + detective-vue2: "npm:^2.2.0" + module-definition: "npm:^6.0.1" + node-source-walk: "npm:^7.0.1" + postcss: "npm:^8.5.1" + typescript: "npm:^5.7.3" bin: precinct: bin/cli.js - checksum: 10c0/c0ccb00bcddd9023830a29002560d6f8ab3177f92809ad16e76062ae8250ad145d9125b240a491aefed5365ffdcc0283540cc8a5b79387a3b6787d67b0366cb4 + checksum: 10c0/5ce79638391b29cbfd99ac5d756cc05f1a8dd505474ca33b44ad3a62dc130c8681fff5edfa464ccc92fe4024c49cc39a67c7c993243a067e960e8e946044185b languageName: node linkType: hard @@ -14239,18 +17867,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:30.0.2, pretty-format@npm:^30.0.0": - version: 30.0.2 - resolution: "pretty-format@npm:30.0.2" - dependencies: - "@jest/schemas": "npm:30.0.1" - ansi-styles: "npm:^5.2.0" - react-is: "npm:^18.3.1" - checksum: 10c0/cf542dc2d0be95e2b1c6e3a397a4fc13fce1c9f8feed6b56165c0d23c7a83423abb6b032ed8e3e1b7c1c0709f9b117dd30b5185f107e58f8766616be6de84850 - languageName: node - linkType: hard - -"pretty-format@npm:30.0.5": +"pretty-format@npm:30.0.5, pretty-format@npm:^30.0.0": version: 30.0.5 resolution: "pretty-format@npm:30.0.5" dependencies: @@ -14261,6 +17878,42 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^24.9.0": + version: 24.9.0 + resolution: "pretty-format@npm:24.9.0" + dependencies: + "@jest/types": "npm:^24.9.0" + ansi-regex: "npm:^4.0.0" + ansi-styles: "npm:^3.2.0" + react-is: "npm:^16.8.4" + checksum: 10c0/1e75c0ae55dab8953a5fe8025aab0a6d6090773561b672a7a00108f6cfb7dace198b27143392382dff913cb71f6fbc10ed23beaddf2117c380588a3b575825f0 + languageName: node + linkType: hard + +"pretty-format@npm:^25.1.0, pretty-format@npm:^25.2.0": + version: 25.5.0 + resolution: "pretty-format@npm:25.5.0" + dependencies: + "@jest/types": "npm:^25.5.0" + ansi-regex: "npm:^5.0.0" + ansi-styles: "npm:^4.0.0" + react-is: "npm:^16.12.0" + checksum: 10c0/cbcf79f57a96f5eb9970722614a360539940606a20a924f6202e309433af4ad5b71ba210b6b3efcdcdad178f9aefa74f04a447d86520d721fbe155ff43b33112 + languageName: node + linkType: hard + +"pretty-format@npm:^26.5.2, pretty-format@npm:^26.6.2": + version: 26.6.2 + resolution: "pretty-format@npm:26.6.2" + dependencies: + "@jest/types": "npm:^26.6.2" + ansi-regex: "npm:^5.0.0" + ansi-styles: "npm:^4.0.0" + react-is: "npm:^17.0.1" + checksum: 10c0/b5ddf0e949b874b699d313fe9407f0eb65e67d00823b2dd95335905a73457260af7612f3bff6b48611fcca9ffcff003359e4c9faba4200d6209da433a859aef3 + languageName: node + linkType: hard + "pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -14357,6 +18010,34 @@ __metadata: languageName: node linkType: hard +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: "npm:~2.0.3" + checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f + languageName: node + linkType: hard + +"promise@npm:^8.0.3, promise@npm:^8.3.0": + version: 8.3.0 + resolution: "promise@npm:8.3.0" + dependencies: + asap: "npm:~2.0.6" + checksum: 10c0/6fccae27a10bcce7442daf090279968086edd2e3f6cebe054b71816403e2526553edf510d13088a4d0f14d7dfa9b9dfb188cab72d6f942e186a4353b6a29c8bf + languageName: node + linkType: hard + +"prompts@npm:^2.4.0": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: "npm:^3.0.3" + sisteransi: "npm:^1.0.5" + checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 + languageName: node + linkType: hard + "promzard@npm:^1.0.0": version: 1.0.2 resolution: "promzard@npm:1.0.2" @@ -14378,7 +18059,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:*, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -14410,9 +18091,9 @@ __metadata: linkType: hard "protocols@npm:^2.0.0, protocols@npm:^2.0.1": - version: 2.0.1 - resolution: "protocols@npm:2.0.1" - checksum: 10c0/016cc58a596e401004a028a2f7005e3444bf89ee8f606409c411719374d1e8bba0464fc142a065cce0d19f41669b2f7ffe25a8bde4f16ce3b6eb01fabc51f2e7 + version: 2.0.2 + resolution: "protocols@npm:2.0.2" + checksum: 10c0/b87d78c1fcf038d33691da28447ce94011d5c7f0c7fd25bcb5fb4d975991c99117873200c84f4b6a9d7f8b9092713a064356236960d1473a7d6fcd4228897b60 languageName: node linkType: hard @@ -14452,9 +18133,11 @@ __metadata: linkType: hard "psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 10c0/6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a languageName: node linkType: hard @@ -14466,12 +18149,12 @@ __metadata: linkType: hard "pump@npm:^3.0.0": - version: 3.0.2 - resolution: "pump@npm:3.0.2" + version: 3.0.3 + resolution: "pump@npm:3.0.3" dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9 languageName: node linkType: hard @@ -14482,14 +18165,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.2.0 - resolution: "punycode@npm:2.2.0" - checksum: 10c0/c4c67082ab53d4304e7f2bb0635290db5baa84758cd4ade4219f24c16ecd803dd5022054186e9c778a4df851cc989b02201a35eaed6b08cb9cabec8b8e2d8332 - languageName: node - linkType: hard - -"punycode@npm:^2.3.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -14526,6 +18202,15 @@ __metadata: languageName: node linkType: hard +"queue@npm:6.0.2": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: "npm:~2.0.3" + checksum: 10c0/cf987476cc72e7d3aaabe23ccefaab1cd757a2b5e0c8d80b67c9575a6b5e1198807ffd4f0948a3f118b149d1111d810ee773473530b77a5c606673cac2c9c996 + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -14549,7 +18234,7 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:^1.2.1": +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 @@ -14610,6 +18295,16 @@ __metadata: languageName: node linkType: hard +"react-devtools-core@npm:^4.27.2, react-devtools-core@npm:^4.6.0": + version: 4.28.5 + resolution: "react-devtools-core@npm:4.28.5" + dependencies: + shell-quote: "npm:^1.6.1" + ws: "npm:^7" + checksum: 10c0/1d71f9b69b8f557a752ba778a20eee9d33bf4393546dd32c96fa034a4b7cc4053f1ac4fccf1ed686a18e1149aa94c26f6d6c3a2c131c958a504199e8503d9ee1 + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.3.1 resolution: "react-dom@npm:18.3.1" @@ -14623,9 +18318,9 @@ __metadata: linkType: hard "react-fast-compare@npm:^3.2.0": - version: 3.2.0 - resolution: "react-fast-compare@npm:3.2.0" - checksum: 10c0/2a7d75ce9fb5da1e3c01f74a5cd592f3369a8cc8d44e93654bf147ab221f430238e8be70677e896f2bfcb96a1cb7a47a8d05d84633de764a9d57d27005a4bb9e + version: 3.2.2 + resolution: "react-fast-compare@npm:3.2.2" + checksum: 10c0/0bbd2f3eb41ab2ff7380daaa55105db698d965c396df73e6874831dbafec8c4b5b08ba36ff09df01526caa3c61595247e3269558c284e37646241cba2b90a367 languageName: node linkType: hard @@ -14654,24 +18349,24 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1, react-is@npm:^16.3.2, react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 +"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: 10c0/6eb5e4b28028c23e2bfcf73371e72cd4162e4ac7ab445ddae2afe24e347a37d6dc22fae6e1748632cd43c6d4f9b8f86dcf26bf9275e1874f436d129952528ae0 +"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.3.2, react-is@npm:^16.7.0, react-is@npm:^16.8.4": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 languageName: node linkType: hard -"react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 +"react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 10c0/2bdb6b93fbb1820b024b496042cce405c57e2f85e777c9aabd55f9b26d145408f9f74f5934676ffdc46f3dcff656d78413a6e43968e7b3f92eea35b3052e9053 languageName: node linkType: hard @@ -14682,6 +18377,102 @@ __metadata: languageName: node linkType: hard +"react-native-device-info@npm:^14.0.2": + version: 14.0.4 + resolution: "react-native-device-info@npm:14.0.4" + peerDependencies: + react-native: "*" + checksum: 10c0/3d89519b4e9f9f130b352f5243282f8b807aba0f55ccc0e1dc9f15b285215949751491ef2f11f1984a55f0f5e0ae76cd16620d2cdfcc118e2ca5f39d300d5524 + languageName: node + linkType: hard + +"react-native@npm:0.72.6": + version: 0.72.6 + resolution: "react-native@npm:0.72.6" + dependencies: + "@jest/create-cache-key-function": "npm:^29.2.1" + "@react-native-community/cli": "npm:11.3.7" + "@react-native-community/cli-platform-android": "npm:11.3.7" + "@react-native-community/cli-platform-ios": "npm:11.3.7" + "@react-native/assets-registry": "npm:^0.72.0" + "@react-native/codegen": "npm:^0.72.7" + "@react-native/gradle-plugin": "npm:^0.72.11" + "@react-native/js-polyfills": "npm:^0.72.1" + "@react-native/normalize-colors": "npm:^0.72.0" + "@react-native/virtualized-lists": "npm:^0.72.8" + abort-controller: "npm:^3.0.0" + anser: "npm:^1.4.9" + base64-js: "npm:^1.1.2" + deprecated-react-native-prop-types: "npm:4.1.0" + event-target-shim: "npm:^5.0.1" + flow-enums-runtime: "npm:^0.0.5" + invariant: "npm:^2.2.4" + jest-environment-node: "npm:^29.2.1" + jsc-android: "npm:^250231.0.0" + memoize-one: "npm:^5.0.0" + metro-runtime: "npm:0.76.8" + metro-source-map: "npm:0.76.8" + mkdirp: "npm:^0.5.1" + nullthrows: "npm:^1.1.1" + pretty-format: "npm:^26.5.2" + promise: "npm:^8.3.0" + react-devtools-core: "npm:^4.27.2" + react-refresh: "npm:^0.4.0" + react-shallow-renderer: "npm:^16.15.0" + regenerator-runtime: "npm:^0.13.2" + scheduler: "npm:0.24.0-canary-efb381bbf-20230505" + stacktrace-parser: "npm:^0.1.10" + use-sync-external-store: "npm:^1.0.0" + whatwg-fetch: "npm:^3.0.0" + ws: "npm:^6.2.2" + yargs: "npm:^17.6.2" + peerDependencies: + react: 18.2.0 + bin: + react-native: cli.js + checksum: 10c0/1e2e04fd7d68deca567034df409cf9dbfc38677f6eb0b6316c9fe6a10832b788bbe8f709e361b1434b3e7dbe2fd214998ecb4244cb248ab05cda081a5d6da46c + languageName: node + linkType: hard + +"react-native@npm:^0.63.0": + version: 0.63.5 + resolution: "react-native@npm:0.63.5" + dependencies: + "@babel/runtime": "npm:^7.0.0" + "@react-native-community/cli": "npm:^4.10.0" + "@react-native-community/cli-platform-android": "npm:^4.10.0" + "@react-native-community/cli-platform-ios": "npm:^4.10.0" + abort-controller: "npm:^3.0.0" + anser: "npm:^1.4.9" + base64-js: "npm:^1.1.2" + event-target-shim: "npm:^5.0.1" + fbjs: "npm:^1.0.0" + fbjs-scripts: "npm:^1.1.0" + hermes-engine: "npm:~0.5.0" + invariant: "npm:^2.2.4" + jsc-android: "npm:^245459.0.0" + metro-babel-register: "npm:0.59.0" + metro-react-native-babel-transformer: "npm:0.59.0" + metro-source-map: "npm:0.59.0" + nullthrows: "npm:^1.1.1" + pretty-format: "npm:^24.9.0" + promise: "npm:^8.0.3" + prop-types: "npm:^15.7.2" + react-devtools-core: "npm:^4.6.0" + react-refresh: "npm:^0.4.0" + regenerator-runtime: "npm:^0.13.2" + scheduler: "npm:0.19.1" + stacktrace-parser: "npm:^0.1.3" + use-subscription: "npm:^1.0.0" + whatwg-fetch: "npm:^3.0.0" + peerDependencies: + react: 16.13.1 + bin: + react-native: ./cli.js + checksum: 10c0/b40b80d01662baa4918dc4e525e68c013588d567050eb056bfe44f2d0e0ef62dce5bad520b6c94884624a5c298fd27f2a53852ae28efe9c3371d54636a062195 + languageName: node + linkType: hard + "react-redux@npm:^9.2.0": version: 9.2.0 resolution: "react-redux@npm:9.2.0" @@ -14708,6 +18499,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.4.0": + version: 0.4.3 + resolution: "react-refresh@npm:0.4.3" + checksum: 10c0/2b4e4b14b54bfbdfdd6d1c16b8476151b3e61083387061d4e5923b0342c678f6d0f23705835c3a04ab151bd92551d437395da3fb52ea7461a408f457d11ac6fa + languageName: node + linkType: hard + "react-router-bootstrap@npm:^0.26.2": version: 0.26.3 resolution: "react-router-bootstrap@npm:0.26.3" @@ -14721,26 +18519,38 @@ __metadata: linkType: hard "react-router-dom@npm:^6.23.0, react-router-dom@npm:^6.6.2": - version: 6.23.0 - resolution: "react-router-dom@npm:6.23.0" + version: 6.30.1 + resolution: "react-router-dom@npm:6.30.1" dependencies: - "@remix-run/router": "npm:1.16.0" - react-router: "npm:6.23.0" + "@remix-run/router": "npm:1.23.0" + react-router: "npm:6.30.1" peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 10c0/c249f3ca44a9e73cb931665563273c7d69709e9dbc9532f145cb6d9a3b3874f18c0752e2d949090b6d139d915ae14a3cbdfedb351c731a8202e20bbcfc800fd4 + checksum: 10c0/e9e1297236b0faa864424ad7d51c392fc6e118595d4dad4cd542fd217c479a81601a81c6266d5801f04f9e154de02d3b094fc22ccb544e755c2eb448fab4ec6b languageName: node linkType: hard -"react-router@npm:6.23.0": - version: 6.23.0 - resolution: "react-router@npm:6.23.0" +"react-router@npm:6.30.1": + version: 6.30.1 + resolution: "react-router@npm:6.30.1" dependencies: - "@remix-run/router": "npm:1.16.0" + "@remix-run/router": "npm:1.23.0" peerDependencies: react: ">=16.8" - checksum: 10c0/567eb764d0814a9af2ea83c7d0bcf8a0a49d7070b4a7fffbbe8a4e4a376ca4e6adaa762b47760b110993eb2773fc617da7e26ab564d59cfd768130671a1b990e + checksum: 10c0/0414326f2d8e0c107fb4603cf4066dacba6a1f6f025c6e273f003e177b2f18888aca3de06d9b5522908f0e41de93be1754c37e82aa97b3a269c4742c08e82539 + languageName: node + linkType: hard + +"react-shallow-renderer@npm:^16.15.0": + version: 16.15.0 + resolution: "react-shallow-renderer@npm:16.15.0" + dependencies: + object-assign: "npm:^4.1.1" + react-is: "npm:^16.12.0 || ^17.0.0 || ^18.0.0" + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/c194d741792e86043a4ae272f7353c1cb9412bc649945c4220c6a101a6ea5410cceb3d65d5a4d750f11a24f7426e8eec7977e8a4e3ad5d3ee235ca2b18166fa8 languageName: node linkType: hard @@ -14759,12 +18569,22 @@ __metadata: languageName: node linkType: hard +"react@npm:^17.0.0": + version: 17.0.2 + resolution: "react@npm:17.0.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: 10c0/07ae8959acf1596f0550685102fd6097d461a54a4fd46a50f88a0cd7daaa97fdd6415de1dcb4bfe0da6aa43221a6746ce380410fa848acc60f8ac41f6649c148 + languageName: node + linkType: hard + "react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard @@ -14838,18 +18658,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.2": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 - languageName: node - linkType: hard - -"readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.1, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -14864,10 +18673,21 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.2": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + "readdirp@npm:^4.0.1": - version: 4.0.2 - resolution: "readdirp@npm:4.0.2" - checksum: 10c0/a16ecd8ef3286dcd90648c3b103e3826db2b766cdb4a988752c43a83f683d01c7059158d623cbcd8bdfb39e65d302d285be2d208e7d9f34d022d912b929217dd + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 languageName: node linkType: hard @@ -14880,6 +18700,25 @@ __metadata: languageName: node linkType: hard +"readline@npm:^1.3.0": + version: 1.3.0 + resolution: "readline@npm:1.3.0" + checksum: 10c0/7404c9edc3fd29430221ef1830867c8d87e50612e4ce70f84ecd55686f7db1c81d67c6a4dcb407839f4c459ad05dd34524a2c7a97681e91878367c68d0e38665 + languageName: node + linkType: hard + +"recast@npm:^0.21.0": + version: 0.21.5 + resolution: "recast@npm:0.21.5" + dependencies: + ast-types: "npm:0.15.2" + esprima: "npm:~4.0.0" + source-map: "npm:~0.6.1" + tslib: "npm:^2.0.1" + checksum: 10c0/a45168c82195f24fa2c70293a624fece0069a2e8e8adb637f9963777735f81cb3bb62e55172db677ec3573b08b2daaf1eddd85b74da6fe0bd37c9b15eeaf94b4 + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -14890,6 +18729,15 @@ __metadata: languageName: node linkType: hard +"redux-saga@npm:^1.3.0": + version: 1.3.0 + resolution: "redux-saga@npm:1.3.0" + dependencies: + "@redux-saga/core": "npm:^1.3.0" + checksum: 10c0/7e93b5b75270cf5d7d359b3866405649fc801777a40835de0abdd342a8713c7ab75b795fc29725ee123ff63ed3241d7ce3ffed77f6de47fc6d4b9db84cc8b137 + languageName: node + linkType: hard + "redux-thunk@npm:^3.1.0": version: 3.1.0 resolution: "redux-thunk@npm:3.1.0" @@ -14931,22 +18779,36 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.14.0": - version: 0.14.0 - resolution: "regenerator-runtime@npm:0.14.0" - checksum: 10c0/e25f062c1a183f81c99681691a342760e65c55e8d3a4d4fe347ebe72433b123754b942b70b622959894e11f8a9131dc549bd3c9a5234677db06a4af42add8d12 +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.2": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 10c0/12b069dc774001fbb0014f6a28f11c09ebfe3c0d984d88c9bced77fdb6fedbacbca434d24da9ae9371bfbf23f754869307fb51a4c98a8b8b18e5ef748677ca24 languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.5.2": - version: 1.5.2 - resolution: "regexp.prototype.flags@npm:1.5.2" +"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": + version: 1.0.2 + resolution: "regex-not@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.6" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - set-function-name: "npm:^2.0.1" - checksum: 10c0/0f3fc4f580d9c349f8b560b012725eb9c002f36daa0041b3fbf6f4238cb05932191a4d7d5db3b5e2caa336d5150ad0402ed2be81f711f9308fe7e1a9bf9bd552 + extend-shallow: "npm:^3.0.2" + safe-regex: "npm:^1.1.0" + checksum: 10c0/a0f8d6045f63b22e9759db10e248369c443b41cedd7dba0922d002b66c2734bc2aef0d98c4d45772d1f756245f4c5203856b88b9624bba2a58708858a8d485d6 languageName: node linkType: hard @@ -14964,6 +18826,59 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.12.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.1.0" + checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: "npm:~3.0.2" + bin: + regjsparser: bin/parser + checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc + languageName: node + linkType: hard + +"repeat-element@npm:^1.1.2": + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 10c0/81aa8d82bc845780803ef52df3533fa399974b99df571d0bb86e91f0ffca9ee4b9c4e8e5e72af087938cc28d2aef93d106a6d01da685d72ce96455b90a9f9f69 + languageName: node + linkType: hard + +"repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 10c0/87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d + languageName: node + linkType: hard + "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -14991,6 +18906,13 @@ __metadata: languageName: node linkType: hard +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 + languageName: node + linkType: hard + "requirejs-config-file@npm:^4.0.0": version: 4.0.0 resolution: "requirejs-config-file@npm:4.0.0" @@ -15034,10 +18956,10 @@ __metadata: languageName: node linkType: hard -"resolve-dependency-path@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-dependency-path@npm:4.0.0" - checksum: 10c0/85fe19087de9c41e8a967a7066f0c8a615b06728f45cb1a9f399146c62c7105b8f284fc7fab1f5ccd0bf876a6d10ac511a4c4a39097bc794a44a224c82e049cf +"resolve-dependency-path@npm:^4.0.1": + version: 4.0.1 + resolution: "resolve-dependency-path@npm:4.0.1" + checksum: 10c0/55cc696412387d3d2e2d98d3c1e44df661bfcc35ccd8035b61ace3575c7b2704ef55c75f4409fba99049f9fa70fc7b9c5f896a5d893f4548d376d33445addd9b languageName: node linkType: hard @@ -15048,6 +18970,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: 10c0/24affcf8e81f4c62f0dcabc774afe0e19c1f38e34e43daac0ddb409d79435fc3037f612b0cc129178b8c220442c3babd673e88e870d27215c99454566e770ebc + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -15055,7 +18984,21 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8": +"resolve-url@npm:^0.2.1": + version: 0.2.1 + resolution: "resolve-url@npm:0.2.1" + checksum: 10c0/c285182cfcddea13a12af92129ce0569be27fb0074ffaefbd3ba3da2eac2acecdfc996d435c4982a9fa2b4708640e52837c9153a5ab9255886a00b0b9e8d2a54 + languageName: node + linkType: hard + +"resolve.exports@npm:2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4, resolve@npm:^1.22.8, resolve@npm:^1.5.0": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -15081,7 +19024,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.5.0#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -15107,6 +19050,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: "npm:^2.0.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 + languageName: node + linkType: hard + "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -15127,10 +19080,17 @@ __metadata: languageName: node linkType: hard +"ret@npm:~0.1.10": + version: 0.1.15 + resolution: "ret@npm:0.1.15" + checksum: 10c0/01f77cad0f7ea4f955852c03d66982609893edc1240c0c964b4c9251d0f9fb6705150634060d169939b096d3b77f4c84d6b6098a5b5d340160898c8581f1f63f + languageName: node + linkType: hard + "retry-as-promised@npm:^7.0.4": - version: 7.0.4 - resolution: "retry-as-promised@npm:7.0.4" - checksum: 10c0/3cfe4924c80cfc0a55b3af10010941a76832ec949f01c732cb6678b9411919a3eeff0586199fb274d3c3082e215065c6555268c8345cb22e432753b62eb65bd8 + version: 7.1.1 + resolution: "retry-as-promised@npm:7.1.1" + checksum: 10c0/d0f8477d0e5e3c979947824ea415ea622c4a9f423d6f2d2c421182243085c8aaf4686efcaccb4573a7f6bf4b094d9ee39d239f20b9e31ed601dd489ea3713198 languageName: node linkType: hard @@ -15142,26 +19102,30 @@ __metadata: linkType: hard "reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rfdc@npm:^1.3.0": - version: 1.3.0 - resolution: "rfdc@npm:1.3.0" - checksum: 10c0/a17fd7b81f42c7ae4cb932abd7b2f677b04cc462a03619fb46945ae1ccae17c3bc87c020ffdde1751cbfa8549860a2883486fdcabc9b9de3f3108af32b69a667 + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa languageName: node linkType: hard -"rfdc@npm:^1.4.1": +"rfdc@npm:^1.3.0, rfdc@npm:^1.4.1": version: 1.4.1 resolution: "rfdc@npm:1.4.1" checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 languageName: node linkType: hard +"rimraf@npm:^2.5.4": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -15195,6 +19159,26 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:~2.2.6": + version: 2.2.8 + resolution: "rimraf@npm:2.2.8" + bin: + rimraf: ./bin.js + checksum: 10c0/5d3ce4c1e874d184dbd416371730819f565ae6bd920f61c742a0704d6e23ae2c95f45f0d8bc20a4f9068342101f9c1656906fb086a18497f4a0f03db3c1610fa + languageName: node + linkType: hard + +"rimraf@npm:~2.6.2": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/f1e646f8c567795f2916aef7aadf685b543da6b9a53e482bb04b07472c7eef2b476045ba1e29f401c301c66b630b22b815ab31fdd60c5e1ae6566ff523debf45 + languageName: node + linkType: hard + "rollup@npm:^4.39.0, rollup@npm:^4.40.0": version: 4.46.2 resolution: "rollup@npm:4.46.2" @@ -15290,7 +19274,14 @@ __metadata: languageName: node linkType: hard -"run-async@npm:^2.4.0": +"rsvp@npm:^4.8.4": + version: 4.8.5 + resolution: "rsvp@npm:4.8.5" + checksum: 10c0/7978f01060a48204506a8ebe15cdbd468498f5ae538b1d7ee3e7630375ba7cb2f98df2f596c12d3f4d5d5c21badc1c6ca8009f5142baded8511609a28eabd19a + languageName: node + linkType: hard + +"run-async@npm:^2.2.0, run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" checksum: 10c0/35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 @@ -15320,16 +19311,23 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" +"rx-lite-aggregates@npm:^4.0.8": + version: 4.0.8 + resolution: "rx-lite-aggregates@npm:4.0.8" dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + rx-lite: "npm:*" + checksum: 10c0/e21f95feca7e63b861fd711a980924cbaa9cb8ebc4786c7cbc287e153d5e96fbd48c0a8a978e53594174d4a68d5d2263b823a2b975c80a955f5748eb59cdec60 + languageName: node + linkType: hard + +"rx-lite@npm:*, rx-lite@npm:^4.0.8": + version: 4.0.8 + resolution: "rx-lite@npm:4.0.8" + checksum: 10c0/a3e76e3a6471347855196e30450bc500f7b1becfdbb0f3d58b1f1d5d6f89165a159e8549b4403084023de99938d67f43a3319c92b1b46c3fd8d7318ecce42c79 languageName: node linkType: hard -"rxjs@npm:^7.8.2": +"rxjs@npm:^7.5.1, rxjs@npm:^7.5.5, rxjs@npm:^7.8.2": version: 7.8.2 resolution: "rxjs@npm:7.8.2" dependencies: @@ -15338,18 +19336,6 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-array-concat@npm:1.1.0" - dependencies: - call-bind: "npm:^1.0.5" - get-intrinsic: "npm:^1.2.2" - has-symbols: "npm:^1.0.3" - isarray: "npm:^2.0.5" - checksum: 10c0/833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af - languageName: node - linkType: hard - "safe-array-concat@npm:^1.1.3": version: 1.1.3 resolution: "safe-array-concat@npm:1.1.3" @@ -15387,17 +19373,6 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.3": - version: 1.0.3 - resolution: "safe-regex-test@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.6" - es-errors: "npm:^1.3.0" - is-regex: "npm:^1.1.4" - checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 - languageName: node - linkType: hard - "safe-regex-test@npm:^1.1.0": version: 1.1.0 resolution: "safe-regex-test@npm:1.1.0" @@ -15409,10 +19384,19 @@ __metadata: languageName: node linkType: hard +"safe-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex@npm:1.1.0" + dependencies: + ret: "npm:~0.1.10" + checksum: 10c0/547d58aa5184cbef368fd5ed5f28d20f911614748c5da6b35f53fd6626396707587251e6e3d1e3010fd3ff1212e413841b8825eaa5f317017ca62a30899af31a + languageName: node + linkType: hard + "safe-stable-stringify@npm:^2.3.1": - version: 2.4.2 - resolution: "safe-stable-stringify@npm:2.4.2" - checksum: 10c0/9120fb0576693a3d04fc39fec594df446ad9975a5b8c0771d1adcad164c64810996880328c0092550764d094f33a58dc823fc85204f2f1ee40b040e24f106335 + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49 languageName: node linkType: hard @@ -15423,14 +19407,34 @@ __metadata: languageName: node linkType: hard -"sass-lookup@npm:^6.0.1": - version: 6.0.1 - resolution: "sass-lookup@npm:6.0.1" +"sane@npm:^4.0.3": + version: 4.1.0 + resolution: "sane@npm:4.1.0" + dependencies: + "@cnakazawa/watch": "npm:^1.0.3" + anymatch: "npm:^2.0.0" + capture-exit: "npm:^2.0.0" + exec-sh: "npm:^0.3.2" + execa: "npm:^1.0.0" + fb-watchman: "npm:^2.0.0" + micromatch: "npm:^3.1.4" + minimist: "npm:^1.1.1" + walker: "npm:~1.0.5" + bin: + sane: ./src/cli.js + checksum: 10c0/7d0991ecaa10b02c6d0339a6f7e31db776971f3b659a351916dcc7ce3464671e72b54d80bcce118e39d4343e1e56c699fe35f6cb89fbd88b07095b72841cbfb0 + languageName: node + linkType: hard + +"sass-lookup@npm:^6.1.0": + version: 6.1.0 + resolution: "sass-lookup@npm:6.1.0" dependencies: - commander: "npm:^12.0.0" + commander: "npm:^12.1.0" + enhanced-resolve: "npm:^5.18.0" bin: sass-lookup: bin/cli.js - checksum: 10c0/11fa68eb3689f34fa29dec5e84c218c92e02798df9db45fe066aca6406629692ddfb5fda587e8778dec9ef317fe3d8728da2128bad1e3cfb21ac5e1390918cdd + checksum: 10c0/a4b774554fea5d234603d0ba96f5e79cc6c32182a0c55f9a8333c8ee13bb0e6146bd3fc1299b2fe8b2a56551ff5df1f66ef55b858042a0001efd027e4de26fdf languageName: node linkType: hard @@ -15451,6 +19455,13 @@ __metadata: languageName: node linkType: hard +"sax@npm:^1.2.4": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c + languageName: node + linkType: hard + "saxes@npm:^6.0.0": version: 6.0.0 resolution: "saxes@npm:6.0.0" @@ -15460,6 +19471,25 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:0.19.1": + version: 0.19.1 + resolution: "scheduler@npm:0.19.1" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: 10c0/9658932a73148a93d791c064b331d9690ddfecc4de25bcd6c9b89f5f1166e3d23d9c31c1595d66565e5ffbb34d47035cb14841aba6444bc266bfcd215cefe9c0 + languageName: node + linkType: hard + +"scheduler@npm:0.24.0-canary-efb381bbf-20230505": + version: 0.24.0-canary-efb381bbf-20230505 + resolution: "scheduler@npm:0.24.0-canary-efb381bbf-20230505" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/4fb594d64c692199117160bbd1a5261f03287f8ec59d9ca079a772e5fbb3139495ebda843324d7c8957c07390a0825acb6f72bd29827fb9e155d793db6c2e2bc + languageName: node + linkType: hard + "scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" @@ -15469,7 +19499,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.1.0, semver@npm:^5.6.0": version: 5.7.2 resolution: "semver@npm:5.7.2" bin: @@ -15478,7 +19508,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.1": +"semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -15487,7 +19517,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.2": +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.2": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -15496,6 +19526,27 @@ __metadata: languageName: node linkType: hard +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 + languageName: node + linkType: hard + "send@npm:^1.1.0, send@npm:^1.2.0": version: 1.2.0 resolution: "send@npm:1.2.0" @@ -15565,6 +19616,13 @@ __metadata: languageName: node linkType: hard +"serialize-error@npm:^2.1.0": + version: 2.1.0 + resolution: "serialize-error@npm:2.1.0" + checksum: 10c0/919c40d293cd36b16bb3fce38a3a460e0c51a34cf0ee59815bbeec7c48ffe0a66ea2dec08aa5340ef6dfc1f22e7317f6e1ed76cdbb2ec3c494c0c4debfb344f8 + languageName: node + linkType: hard + "serialize-javascript@npm:^6.0.1": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" @@ -15574,6 +19632,18 @@ __metadata: languageName: node linkType: hard +"serve-static@npm:^1.13.1": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.19.0" + checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f + languageName: node + linkType: hard + "serve-static@npm:^2.2.0": version: 2.2.0 resolution: "serve-static@npm:2.2.0" @@ -15593,20 +19663,6 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.2.1": - version: 1.2.1 - resolution: "set-function-length@npm:1.2.1" - dependencies: - define-data-property: "npm:^1.1.2" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.3" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.1" - checksum: 10c0/1927e296599f2c04d210c1911f1600430a5e49e04a6d8bb03dca5487b95a574da9968813a2ced9a774bd3e188d4a6208352c8f64b8d4674cdb021dca21e190ca - languageName: node - linkType: hard - "set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -15621,17 +19677,6 @@ __metadata: languageName: node linkType: hard -"set-function-name@npm:^2.0.1": - version: 2.0.1 - resolution: "set-function-name@npm:2.0.1" - dependencies: - define-data-property: "npm:^1.0.1" - functions-have-names: "npm:^1.2.3" - has-property-descriptors: "npm:^1.0.0" - checksum: 10c0/6be7d3e15be47f4db8a5a563a35c60b5e7c4af91cc900e8972ffad33d3aaa227900faa55f60121cdb04b85866a734bb7fe4cd91f654c632861cc86121a48312a - languageName: node - linkType: hard - "set-function-name@npm:^2.0.2": version: 2.0.2 resolution: "set-function-name@npm:2.0.2" @@ -15655,6 +19700,25 @@ __metadata: languageName: node linkType: hard +"set-value@npm:^2.0.0, set-value@npm:^2.0.1": + version: 2.0.1 + resolution: "set-value@npm:2.0.1" + dependencies: + extend-shallow: "npm:^2.0.1" + is-extendable: "npm:^0.1.1" + is-plain-object: "npm:^2.0.3" + split-string: "npm:^3.0.1" + checksum: 10c0/4c40573c4f6540456e4b38b95f570272c4cfbe1d12890ad4057886da8535047cd772dfadf5b58e2e87aa244dfb4c57e3586f6716b976fc47c5144b6b09e1811b + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -15694,10 +19758,29 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:^1.6.1": - version: 1.7.4 - resolution: "shell-quote@npm:1.7.4" - checksum: 10c0/54a9f16eee9449879290b9ab082d380ff229b9176608879087d1c21c423ad0bf954fe02941963ee80cafce6e09d629ae5b209ac7061de22cf8e1b9b3edf3e694 +"shell-quote@npm:1.6.1": + version: 1.6.1 + resolution: "shell-quote@npm:1.6.1" + dependencies: + array-filter: "npm:~0.0.0" + array-map: "npm:~0.0.0" + array-reduce: "npm:~0.0.0" + jsonify: "npm:~0.0.0" + checksum: 10c0/6c3011671b55ef64f022d83d4b1fb0b2f35f4c75dcbad8f7bd8d50285f07927544af80e3e753f155d8763c41ba84fe3898e5727ecb4f2b7f8752d3b097b41001 + languageName: node + linkType: hard + +"shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.3": + version: 1.8.3 + resolution: "shell-quote@npm:1.8.3" + checksum: 10c0/bee87c34e1e986cfb4c30846b8e6327d18874f10b535699866f368ade11ea4ee45433d97bf5eada22c4320c27df79c3a6a7eb1bf3ecfc47f2c997d9e5e2672fd + languageName: node + linkType: hard + +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: 10c0/ae8b27c389db2a00acfc8da90240f11577685a8f3e40008f826a3bea8b4f3b3ecd305c26be024b4a0fd3b123d132c1569d6e238097960a9a543b6c60760fb46a languageName: node linkType: hard @@ -15736,18 +19819,6 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.4": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" - dependencies: - call-bind: "npm:^1.0.7" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - object-inspect: "npm:^1.13.1" - checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f - languageName: node - linkType: hard - "side-channel@npm:^1.1.0": version: 1.1.0 resolution: "side-channel@npm:1.1.0" @@ -15761,7 +19832,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -15789,6 +19860,17 @@ __metadata: languageName: node linkType: hard +"simple-plist@npm:^1.0.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: "npm:0.1.1" + bplist-parser: "npm:0.3.2" + plist: "npm:^3.0.5" + checksum: 10c0/226c283492d8518d715e4133d94bdbd15c0619561bcde583b4807b36cde106c0078c615b9b4e25c0e8758a4ae4e79ed5dd76e57cd528d8b7001ecab5ad35e343 + languageName: node + linkType: hard + "simple-swizzle@npm:^0.2.2": version: 0.2.2 resolution: "simple-swizzle@npm:0.2.2" @@ -15807,6 +19889,13 @@ __metadata: languageName: node linkType: hard +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 + languageName: node + linkType: hard + "slash@npm:3.0.0, slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -15814,6 +19903,24 @@ __metadata: languageName: node linkType: hard +"slash@npm:^2.0.0": + version: 2.0.0 + resolution: "slash@npm:2.0.0" + checksum: 10c0/f83dbd3cb62c41bb8fcbbc6bf5473f3234b97fa1d008f571710a9d3757a28c7169e1811cad1554ccb1cc531460b3d221c9a7b37f549398d9a30707f0a5af9193 + languageName: node + linkType: hard + +"slice-ansi@npm:^2.0.0": + version: 2.1.0 + resolution: "slice-ansi@npm:2.1.0" + dependencies: + ansi-styles: "npm:^3.2.0" + astral-regex: "npm:^1.0.0" + is-fullwidth-code-point: "npm:^2.0.0" + checksum: 10c0/c317b21ec9e3d3968f3d5b548cbfc2eae331f58a03f1352621020799cbe695b3611ee972726f8f32d4ca530065a5ec9c74c97fde711c1f41b4a1585876b2c191 + languageName: node + linkType: hard + "slice-ansi@npm:^3.0.0": version: 3.0.0 resolution: "slice-ansi@npm:3.0.0" @@ -15877,24 +19984,60 @@ __metadata: languageName: node linkType: hard +"snapdragon-node@npm:^2.0.1": + version: 2.1.1 + resolution: "snapdragon-node@npm:2.1.1" + dependencies: + define-property: "npm:^1.0.0" + isobject: "npm:^3.0.0" + snapdragon-util: "npm:^3.0.1" + checksum: 10c0/7616e6a1ca054afe3ad8defda17ebe4c73b0800d2e0efd635c44ee1b286f8ac7900517314b5330862ce99b28cd2782348ee78bae573ff0f55832ad81d9657f3f + languageName: node + linkType: hard + +"snapdragon-util@npm:^3.0.1": + version: 3.0.1 + resolution: "snapdragon-util@npm:3.0.1" + dependencies: + kind-of: "npm:^3.2.0" + checksum: 10c0/4441856d343399ba7f37f79681949d51b922e290fcc07e7bc94655a50f584befa4fb08f40c3471cd160e004660161964d8ff140cba49baa59aa6caba774240e3 + languageName: node + linkType: hard + +"snapdragon@npm:^0.8.1": + version: 0.8.2 + resolution: "snapdragon@npm:0.8.2" + dependencies: + base: "npm:^0.11.1" + debug: "npm:^2.2.0" + define-property: "npm:^0.2.5" + extend-shallow: "npm:^2.0.1" + map-cache: "npm:^0.2.2" + source-map: "npm:^0.5.6" + source-map-resolve: "npm:^0.5.0" + use: "npm:^3.1.0" + checksum: 10c0/dfdac1f73d47152d72fc07f4322da09bbddfa31c1c9c3ae7346f252f778c45afa5b03e90813332f02f04f6de8003b34a168c456f8bb719024d092f932520ffca + languageName: node + linkType: hard + "socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" dependencies: - agent-base: "npm:^7.1.1" + agent-base: "npm:^7.1.2" debug: "npm:^4.3.4" socks: "npm:^2.8.3" - checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 languageName: node linkType: hard "socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" + version: 2.8.6 + resolution: "socks@npm:2.8.6" dependencies: ip-address: "npm:^9.0.5" smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + checksum: 10c0/15b95db4caa359c80bfa880ff3e58f3191b9ffa4313570e501a60ee7575f51e4be664a296f4ee5c2c40544da179db6140be53433ce41ec745f9d51f342557514 languageName: node linkType: hard @@ -15907,13 +20050,26 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf languageName: node linkType: hard +"source-map-resolve@npm:^0.5.0": + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" + dependencies: + atob: "npm:^2.1.2" + decode-uri-component: "npm:^0.2.0" + resolve-url: "npm:^0.2.1" + source-map-url: "npm:^0.4.0" + urix: "npm:^0.1.0" + checksum: 10c0/410acbe93882e058858d4c1297be61da3e1533f95f25b95903edddc1fb719654e705663644677542d1fb78a66390238fad1a57115fc958a0724cf9bb509caf57 + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -15924,7 +20080,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -15934,6 +20090,20 @@ __metadata: languageName: node linkType: hard +"source-map-url@npm:^0.4.0": + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: 10c0/f8af0678500d536c7f643e32094d6718a4070ab4ca2d2326532512cfbe2d5d25a45849b4b385879326f2d7523bb3b686d0360dd347a3cda09fd89a5c28d4bc58 + languageName: node + linkType: hard + +"source-map@npm:^0.5.6": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -15941,20 +20111,27 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.7.3": + version: 0.7.6 + resolution: "source-map@npm:0.7.6" + checksum: 10c0/59f6f05538539b274ba771d2e9e32f6c65451982510564438e048bc1352f019c6efcdc6dd07909b1968144941c14015c2c7d4369fb7c4d7d53ae769716dcc16c + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" dependencies: spdx-expression-parse: "npm:^3.0.0" spdx-license-ids: "npm:^3.0.0" - checksum: 10c0/25909eecc4024963a8e398399dbdd59ddb925bd7dbecd9c9cf6df0d75c29b68cd30b82123564acc51810eb02cfc4b634a2e16e88aa982433306012e318849249 + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 languageName: node linkType: hard "spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: 10c0/83089e77d2a91cb6805a5c910a2bedb9e50799da091f532c2ba4150efdef6e53f121523d3e2dc2573a340dc0189e648b03157097f65465b3a0c06da1f18d7e8a + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 languageName: node linkType: hard @@ -15979,9 +20156,18 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.12 - resolution: "spdx-license-ids@npm:3.0.12" - checksum: 10c0/b749db2fdecf4ac1893b8e4c435c3bfe5247af9cb412a3cd8375c8bc5a24ad7f3c4263dfe0fc04701f98613f189787700f1deac3e9272c96dfaffc01826c2d0f + version: 3.0.21 + resolution: "spdx-license-ids@npm:3.0.21" + checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 + languageName: node + linkType: hard + +"split-string@npm:^3.0.1, split-string@npm:^3.0.2": + version: 3.1.0 + resolution: "split-string@npm:3.1.0" + dependencies: + extend-shallow: "npm:^3.0.0" + checksum: 10c0/72d7cd625445c7af215130e1e2bc183013bb9dd48a074eda1d35741e2b0dcb355e6df5b5558a62543a24dcec37dd1d6eb7a6228ff510d3c9de0f3dc1d1da8a70 languageName: node linkType: hard @@ -15995,9 +20181,9 @@ __metadata: linkType: hard "split2@npm:^4.1.0": - version: 4.1.0 - resolution: "split2@npm:4.1.0" - checksum: 10c0/c02219211c6c55137977b729b44a22462386bf8878f61c9221ebb0347509ffeaf1285f93a9376e361e03f2c8969e83fff0c04745f56dcccdd30c65bec7db8084 + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 10c0/b292beb8ce9215f8c642bb68be6249c5a4c7f332fc8ecadae7be5cbdf1ea95addc95f0459ef2e7ad9d45fd1064698a097e4eb211c83e772b49bc0ee423e91534 languageName: node linkType: hard @@ -16079,7 +20265,16 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.6": +"stack-utils@npm:^1.0.1": + version: 1.0.5 + resolution: "stack-utils@npm:1.0.5" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/9e65d2a3f4fd13c4fe2615804a6721b5bd1067d7cbc1aa20588e5a9d0cd05b9dc83ae574a4c03180d2bf78804a8453406e1cef70ab47adfb38724aad67a308f5 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3, stack-utils@npm:^2.0.6": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" dependencies: @@ -16088,6 +20283,22 @@ __metadata: languageName: node linkType: hard +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 10c0/18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 + languageName: node + linkType: hard + +"stacktrace-parser@npm:^0.1.10, stacktrace-parser@npm:^0.1.3": + version: 0.1.11 + resolution: "stacktrace-parser@npm:0.1.11" + dependencies: + type-fest: "npm:^0.7.1" + checksum: 10c0/4633d9afe8cd2f6c7fb2cebdee3cc8de7fd5f6f9736645fd08c0f66872a303061ce9cc0ccf46f4216dc94a7941b56e331012398dc0024dc25e46b5eb5d4ff018 + languageName: node + linkType: hard + "start-server-and-test@npm:^2.0.1": version: 2.0.13 resolution: "start-server-and-test@npm:2.0.13" @@ -16108,13 +20319,37 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1, statuses@npm:^2.0.1": +"static-extend@npm:^0.1.1": + version: 0.1.2 + resolution: "static-extend@npm:0.1.2" + dependencies: + define-property: "npm:^0.2.5" + object-copy: "npm:^0.1.0" + checksum: 10c0/284f5865a9e19d079f1badbcd70d5f9f82e7a08393f818a220839cd5f71729e89105e1c95322bd28e833161d484cee671380ca443869ae89578eef2bf55c0653 + languageName: node + linkType: hard + +"statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 languageName: node linkType: hard +"statuses@npm:^2.0.1": + version: 2.0.2 + resolution: "statuses@npm:2.0.2" + checksum: 10c0/a9947d98ad60d01f6b26727570f3bcceb6c8fa789da64fe6889908fe2e294d57503b14bf2b5af7605c2d36647259e856635cd4c49eab41667658ec9d0080ec3f + languageName: node + linkType: hard + +"statuses@npm:~1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: 10c0/e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.1.0": version: 1.1.0 resolution: "stop-iteration-iterator@npm:1.1.0" @@ -16125,6 +20360,13 @@ __metadata: languageName: node linkType: hard +"stream-buffers@npm:2.2.x": + version: 2.2.0 + resolution: "stream-buffers@npm:2.2.0" + checksum: 10c0/14a351f0a066eaa08c8c64a74f4aedd87dd7a8e59d4be224703da33dca3eb370828ee6c0ae3fff59a9c743e8098728fc95c5f052ae7741672a31e6b1430ba50a + languageName: node + linkType: hard + "stream-combiner@npm:~0.0.4": version: 0.0.4 resolution: "stream-combiner@npm:0.0.4" @@ -16171,6 +20413,27 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^2.1.0": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 + languageName: node + linkType: hard + +"string-width@npm:^3.0.0, string-width@npm:^3.1.0": + version: 3.1.0 + resolution: "string-width@npm:3.1.0" + dependencies: + emoji-regex: "npm:^7.0.1" + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^5.1.0" + checksum: 10c0/85fa0d4f106e7999bb68c1c640c76fa69fb8c069dab75b009e29c123914e2d3b532e6cfa4b9d1bd913176fc83dedd7a2d7bf40d21a81a8a1978432cedfb65b91 + languageName: node + linkType: hard + "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -16215,13 +20478,14 @@ __metadata: linkType: hard "string.prototype.padend@npm:^3.0.0": - version: 3.1.4 - resolution: "string.prototype.padend@npm:3.1.4" + version: 3.1.6 + resolution: "string.prototype.padend@npm:3.1.6" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10c0/11feb9ae51a32febc73bb3b38d29900405c736f47613badff773ab830f23faad796c43d51e18090cada975b82831f66bdcb6b5353739a019b7fcc321900205ad + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/8f2c8c1f3db1efcdc210668c80c87f2cea1253d6029ff296a172b5e13edc9adebeed4942d023de8d31f9b13b69f3f5d73de7141959b1f09817fba5f527e83be1 languageName: node linkType: hard @@ -16250,18 +20514,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.8": - version: 1.2.8 - resolution: "string.prototype.trim@npm:1.2.8" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 10c0/4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.7, string.prototype.trimend@npm:^1.0.9": +"string.prototype.trimend@npm:^1.0.9": version: 1.0.9 resolution: "string.prototype.trimend@npm:1.0.9" dependencies: @@ -16273,17 +20526,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimstart@npm:1.0.7" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 10c0/0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f - languageName: node - linkType: hard - "string.prototype.trimstart@npm:^1.0.8": version: 1.0.8 resolution: "string.prototype.trimstart@npm:1.0.8" @@ -16333,16 +20575,25 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1": - version: 7.0.1 - resolution: "strip-ansi@npm:7.0.1" +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a94805f54caefae6cf4870ee6acfe50cff69d90a37994bf02c096042d9939ee211e1568f34b9fa5efa03c7d7fea79cb3ac8a4e517ceb848284ae300da06ca7e9 + ansi-regex: "npm:^3.0.0" + checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d + languageName: node + linkType: hard + +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: "npm:^4.1.0" + checksum: 10c0/de4658c8a097ce3b15955bc6008f67c0790f85748bdc025b7bc8c52c7aee94bc4f9e50624516150ed173c3db72d851826cd57e7a85fe4e4bb6dbbebd5d297fdf languageName: node linkType: hard -"strip-ansi@npm:^7.1.0": +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: @@ -16365,6 +20616,13 @@ __metadata: languageName: node linkType: hard +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 10c0/f336beed8622f7c1dd02f2cbd8422da9208fae81daf184f73656332899978919d5c0ca84dc6cfc49ad1fc4dd7badcde5412a063cf4e0d7f8ed95a13a63f68f45 + languageName: node + linkType: hard + "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" @@ -16395,14 +20653,28 @@ __metadata: languageName: node linkType: hard -"stylus-lookup@npm:^6.0.0": - version: 6.0.0 - resolution: "stylus-lookup@npm:6.0.0" +"strnum@npm:^1.1.1": + version: 1.1.2 + resolution: "strnum@npm:1.1.2" + checksum: 10c0/a0fce2498fa3c64ce64a40dada41beb91cabe3caefa910e467dc0518ef2ebd7e4d10f8c2202a6104f1410254cae245066c0e94e2521fb4061a5cb41831952392 + languageName: node + linkType: hard + +"stylus-lookup@npm:^6.1.0": + version: 6.1.0 + resolution: "stylus-lookup@npm:6.1.0" dependencies: - commander: "npm:^12.0.0" + commander: "npm:^12.1.0" bin: stylus-lookup: bin/cli.js - checksum: 10c0/c7be40d1b4a2a65ca8e525875d130be13c43305e4eef3ee01b1da579af08bae633ce89281970d1089330033116df0c751f8cb007ab92431cd1a2ae25da9e8b2d + checksum: 10c0/1b5868a6709fbd5597985d89bc265cb85ac03e456c6ecdf4342506b0082094b7bae7030ffbb04d5b13ce44bbdce66db4594bdd4c766817b4a0d32c9fcc42bdcd + languageName: node + linkType: hard + +"sudo-prompt@npm:^9.0.0": + version: 9.2.1 + resolution: "sudo-prompt@npm:9.2.1" + checksum: 10c0/e56793513a9c95f66367a3be2ec4c1adee84a2a62f1b7ff6453d610586dcd373d7d8f4df522a7dae03aea8b779ef7f7ba25d1130d24fb1e495cfbbc2c72c7486 languageName: node linkType: hard @@ -16415,6 +20687,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^6.1.0": + version: 6.1.0 + resolution: "supports-color@npm:6.1.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/ebf2befe41b55932c6d77192b91775f1403c389440ce2dab6f72663cf32ee87a1d9dea3512131a18e45ccac91424a8873b266142828489d0206d65ee93d224b6 + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -16424,7 +20705,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -16448,18 +20729,18 @@ __metadata: linkType: hard "synckit@npm:^0.11.7, synckit@npm:^0.11.8": - version: 0.11.8 - resolution: "synckit@npm:0.11.8" + version: 0.11.11 + resolution: "synckit@npm:0.11.11" dependencies: - "@pkgr/core": "npm:^0.2.4" - checksum: 10c0/a1de5131ee527512afcaafceb2399b2f3e63678e56b831e1cb2dc7019c972a8b654703a3b94ef4166868f87eb984ea252b467c9d9e486b018ec2e6a55c24dfd8 + "@pkgr/core": "npm:^0.2.9" + checksum: 10c0/f0761495953d12d94a86edf6326b3a565496c72f9b94c02549b6961fb4d999f4ca316ce6b3eb8ed2e4bfc5056a8de65cda0bd03a233333a35221cd2fdc0e196b languageName: node linkType: hard "tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + version: 2.2.2 + resolution: "tapable@npm:2.2.2" + checksum: 10c0/8ad130aa705cab6486ad89e42233569a1fb1ff21af115f59cebe9f2b45e9e7995efceaa9cc5062510cdb4ec673b527924b2ab812e3579c55ad659ae92117011e languageName: node linkType: hard @@ -16520,17 +20801,36 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.17.4": - version: 5.31.3 - resolution: "terser@npm:5.31.3" +"temp@npm:0.8.3": + version: 0.8.3 + resolution: "temp@npm:0.8.3" + dependencies: + os-tmpdir: "npm:^1.0.0" + rimraf: "npm:~2.2.6" + checksum: 10c0/649453e503d073f5b8fc7f8a15f3847cbc949a4b41a07e75a43562de1d87a880211f5487b9e7e32ebc8b26140e4907389d22fd1ec74987a4f6c930e8ae9d3dbb + languageName: node + linkType: hard + +"temp@npm:^0.8.4": + version: 0.8.4 + resolution: "temp@npm:0.8.4" + dependencies: + rimraf: "npm:~2.6.2" + checksum: 10c0/7f071c963031bfece37e13c5da11e9bb451e4ddfc4653e23e327a2f91594102dc826ef6a693648e09a6e0eb856f507967ec759ae55635e0878091eccf411db37 + languageName: node + linkType: hard + +"terser@npm:^5.15.0, terser@npm:^5.17.4": + version: 5.43.1 + resolution: "terser@npm:5.43.1" dependencies: "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.8.2" + acorn: "npm:^8.14.0" commander: "npm:^2.20.0" source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 10c0/eb2b525dada9febd3db74e94bd295f9cd7abd809e4f9c6bbc795a3048ad50fd327c15eab99db383fa820239680eef6d2dbd7dc05361769c204ddee5cf684d41e + checksum: 10c0/9cd3fa09ea6bcb79eb71995216b8bef0651b18c5c3877535fc699a77e1ab43b140a4da5811ac9baeb654fa9ec939b17324092f0f0bdb19c402e101e3db946986 languageName: node linkType: hard @@ -16566,6 +20866,20 @@ __metadata: languageName: node linkType: hard +"throat@npm:^4.1.0": + version: 4.1.0 + resolution: "throat@npm:4.1.0" + checksum: 10c0/2719e5adee890a437b68db58725086c4296091a613229b79602f34ff5016e7411e12299ff2a04032dac9e11e3781e8c7a06c58d472bf9abf17b034fe50434d64 + languageName: node + linkType: hard + +"throat@npm:^5.0.0": + version: 5.0.0 + resolution: "throat@npm:5.0.0" + checksum: 10c0/1b9c661dabf93ff9026fecd781ccfd9b507c41b9d5e581614884fffd09f3f9ebfe26d3be668ccf904fd324dd3f6efe1a3ec7f83e91b1dff9fdcc6b7d39b8bfe3 + languageName: node + linkType: hard + "throttleit@npm:^1.0.0": version: 1.0.1 resolution: "throttleit@npm:1.0.1" @@ -16573,7 +20887,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.0": +"through2@npm:^2.0.0, through2@npm:^2.0.1": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: @@ -16590,6 +20904,13 @@ __metadata: languageName: node linkType: hard +"time-stamp@npm:^1.0.0": + version: 1.1.0 + resolution: "time-stamp@npm:1.1.0" + checksum: 10c0/99340b52a6ab3ce805c30c1884baee06251c54ef37d852979edf2b2b1d649664fc1ced50e0c7df90f8deb3dc28cb310af3e6002c2b63966c68f488e0bac3e5c5 + languageName: node + linkType: hard + "tinyglobby@npm:0.2.12": version: 0.2.12 resolution: "tinyglobby@npm:0.2.12" @@ -16633,6 +20954,25 @@ __metadata: languageName: node linkType: hard +"to-object-path@npm:^0.3.0": + version: 0.3.0 + resolution: "to-object-path@npm:0.3.0" + dependencies: + kind-of: "npm:^3.0.2" + checksum: 10c0/731832a977614c03a770363ad2bd9e9c82f233261861724a8e612bb90c705b94b1a290a19f52958e8e179180bb9b71121ed65e245691a421467726f06d1d7fc3 + languageName: node + linkType: hard + +"to-regex-range@npm:^2.1.0": + version: 2.1.1 + resolution: "to-regex-range@npm:2.1.1" + dependencies: + is-number: "npm:^3.0.0" + repeat-string: "npm:^1.6.1" + checksum: 10c0/440d82dbfe0b2e24f36dd8a9467240406ad1499fc8b2b0f547372c22ed1d092ace2a3eb522bb09bfd9c2f39bf1ca42eb78035cf6d2b8c9f5c78da3abc96cd949 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -16642,6 +20982,18 @@ __metadata: languageName: node linkType: hard +"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": + version: 3.0.2 + resolution: "to-regex@npm:3.0.2" + dependencies: + define-property: "npm:^2.0.2" + extend-shallow: "npm:^3.0.2" + regex-not: "npm:^1.0.2" + safe-regex: "npm:^1.1.0" + checksum: 10c0/99d0b8ef397b3f7abed4bac757b0f0bb9f52bfd39167eb7105b144becfaa9a03756892352d01ac6a911f0c1ceef9f81db68c46899521a3eed054082042796120 + languageName: node + linkType: hard + "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -16717,18 +21069,18 @@ __metadata: linkType: hard "triple-beam@npm:^1.3.0": - version: 1.3.0 - resolution: "triple-beam@npm:1.3.0" - checksum: 10c0/a6da96495f25b6c04b3629df5161c7eb84760927943f16665fd8dcd3a643daadf73d69eee78306b4b68d606937f22f8703afe763bc8d3723632ffb1f3a798493 + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 10c0/4bf1db71e14fe3ff1c3adbe3c302f1fdb553b74d7591a37323a7badb32dc8e9c290738996cbb64f8b10dc5a3833645b5d8c26221aaaaa12e50d1251c9aba2fea languageName: node linkType: hard "ts-api-utils@npm:^1.3.0": - version: 1.4.0 - resolution: "ts-api-utils@npm:1.4.0" + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" peerDependencies: typescript: ">=4.2.0" - checksum: 10c0/1b2bfa50ea52771d564bb143bb69010d25cda03ed573095fbac9b86f717012426443af6647e00e3db70fca60360482a30c1be7cf73c3521c321f6bf5e3594ea0 + checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a languageName: node linkType: hard @@ -16742,14 +21094,14 @@ __metadata: linkType: hard "ts-graphviz@npm:^2.1.2": - version: 2.1.5 - resolution: "ts-graphviz@npm:2.1.5" + version: 2.1.6 + resolution: "ts-graphviz@npm:2.1.6" dependencies: "@ts-graphviz/adapter": "npm:^2.0.6" - "@ts-graphviz/ast": "npm:^2.0.6" + "@ts-graphviz/ast": "npm:^2.0.7" "@ts-graphviz/common": "npm:^2.1.5" - "@ts-graphviz/core": "npm:^2.0.6" - checksum: 10c0/837502881055e832239ef7b17a1c74d209fd09d17f3a82d3a7aeff287060d3e3dc3977c4b97abf290294c984ecba5242cf939e7690d8761fa6386c2681b2eb36 + "@ts-graphviz/core": "npm:^2.0.7" + checksum: 10c0/ecc3d1f75d067b846bad332954e96652eeeccd53be82eef83065e9fad7568a656ed936f23932fe131d8ea0f88ecdf38cb19ca5cb753e081d6d79848a2fa80088 languageName: node linkType: hard @@ -16861,7 +21213,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": +"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.8.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -16957,6 +21309,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.7.1": + version: 0.7.1 + resolution: "type-fest@npm:0.7.1" + checksum: 10c0/ce6b5ef806a76bf08d0daa78d65e61f24d9a0380bd1f1df36ffb61f84d14a0985c3a921923cf4b97831278cb6fa9bf1b89c751df09407e0510b14e8c081e4e0f + languageName: node + linkType: hard + "type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": version: 0.8.1 resolution: "type-fest@npm:0.8.1" @@ -16982,17 +21341,6 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-buffer@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.7" - es-errors: "npm:^1.3.0" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da - languageName: node - linkType: hard - "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -17004,19 +21352,6 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "typed-array-byte-length@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 - languageName: node - linkType: hard - "typed-array-byte-length@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-byte-length@npm:1.0.3" @@ -17030,20 +21365,6 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-byte-offset@npm:1.0.2" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f - languageName: node - linkType: hard - "typed-array-byte-offset@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-byte-offset@npm:1.0.4" @@ -17059,20 +21380,6 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.5": - version: 1.0.5 - resolution: "typed-array-length@npm:1.0.5" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - possible-typed-array-names: "npm:^1.0.0" - checksum: 10c0/5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5 - languageName: node - linkType: hard - "typed-array-length@npm:^1.0.7": version: 1.0.7 resolution: "typed-array-length@npm:1.0.7" @@ -17094,23 +21401,57 @@ __metadata: languageName: node linkType: hard -"typescript@npm:>=3 < 6, typescript@npm:^5.4.4, typescript@npm:^5.4.5, typescript@npm:^5.5.4, typescript@npm:^5.8.2": - version: 5.8.3 - resolution: "typescript@npm:5.8.3" +"typescript-compare@npm:^0.0.2": + version: 0.0.2 + resolution: "typescript-compare@npm:0.0.2" + dependencies: + typescript-logic: "npm:^0.0.0" + checksum: 10c0/8ac842798875fef83fa1b592de85d9ba546f72ff5554b995ee2a46e0e91c92f25e7b83780f308c85609dda9cbb5d027164479b772935d7a20b2d97e44e241ed5 + languageName: node + linkType: hard + +"typescript-logic@npm:^0.0.0": + version: 0.0.0 + resolution: "typescript-logic@npm:0.0.0" + checksum: 10c0/c40adbbc5debb02ede2041ef7e0165c611620ddd1257d2df237bd77eb14cc47b975218c5d842b6a9eaeebe37a6ff5bcff576a90117f32dfd60dabb7b4cd86928 + languageName: node + linkType: hard + +"typescript-tuple@npm:^2.2.1": + version: 2.2.1 + resolution: "typescript-tuple@npm:2.2.1" + dependencies: + typescript-compare: "npm:^0.0.2" + checksum: 10c0/415f6b975b14437b3b55fc843a5aa9f4f6804e72a0197003882b668d52b632dfddbbde91da4b946ea877a658d5805a9fd8e761640cafd07838eee8f17195e20e + languageName: node + linkType: hard + +"typescript@npm:>=3 < 6, typescript@npm:^5.7.3, typescript@npm:^5.8.2, typescript@npm:^5.8.3": + version: 5.9.2 + resolution: "typescript@npm:5.9.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 + checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.4.4#optional!builtin, typescript@patch:typescript@npm%3A^5.4.5#optional!builtin, typescript@patch:typescript@npm%3A^5.5.4#optional!builtin, typescript@patch:typescript@npm%3A^5.8.2#optional!builtin": - version: 5.8.3 - resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" +"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.7.3#optional!builtin, typescript@patch:typescript@npm%3A^5.8.2#optional!builtin, typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": + version: 5.9.2 + resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb + checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e + languageName: node + linkType: hard + +"ua-parser-js@npm:^0.7.18": + version: 0.7.40 + resolution: "ua-parser-js@npm:0.7.40" + bin: + ua-parser-js: script/cli.js + checksum: 10c0/d114f0b71b5b0106dcc0cb7cc26a44690073e886fa1444f8c03131d4f57b3f6645f9fb7b308b0aaaa5a2774461f9e8fe1a2a1c3ff69aa531316fcf14cd44dbe3 languageName: node linkType: hard @@ -17130,6 +21471,18 @@ __metadata: languageName: node linkType: hard +"uglify-es@npm:^3.1.9": + version: 3.3.10 + resolution: "uglify-es@npm:3.3.10" + dependencies: + commander: "npm:~2.14.1" + source-map: "npm:~0.6.1" + bin: + uglifyjs: bin/uglifyjs + checksum: 10c0/165b19b331f72aae4a0eeb4350606d8e5d39c82315ef8eaa8d3a0706d16be9282f6055b5e1e46914422b3e56520740fc68cec40a0b06e7fd6905b1f680528487 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.19.3 resolution: "uglify-js@npm:3.19.3" @@ -17139,15 +21492,10 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": +"ultron@npm:1.0.x": version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.0.3" - which-boxed-primitive: "npm:^1.0.2" - checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + resolution: "ultron@npm:1.0.2" + checksum: 10c0/67a4d8c8f2fd52879de20ba38af29ced455457f454e33dcf47cd2ded01f16d5004ffa4fed3690ade63b6581ee5d8dc65a14566385e8d1fa682b65a0bdb681b6e languageName: node linkType: hard @@ -17194,9 +21542,9 @@ __metadata: linkType: hard "underscore@npm:^1.13.1": - version: 1.13.6 - resolution: "underscore@npm:1.13.6" - checksum: 10c0/5f57047f47273044c045fddeb8b141dafa703aa487afd84b319c2495de2e685cecd0b74abec098292320d518b267c0c4598e45aa47d4c3628d0d4020966ba521 + version: 1.13.7 + resolution: "underscore@npm:1.13.7" + checksum: 10c0/fad2b4aac48847674aaf3c30558f383399d4fdafad6dd02dd60e4e1b8103b52c5a9e5937e0cc05dacfd26d6a0132ed0410ab4258241240757e4a4424507471cd languageName: node linkType: hard @@ -17207,6 +21555,49 @@ __metadata: languageName: node linkType: hard +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 + languageName: node + linkType: hard + +"union-value@npm:^1.0.0": + version: 1.0.1 + resolution: "union-value@npm:1.0.1" + dependencies: + arr-union: "npm:^3.1.0" + get-value: "npm:^2.0.6" + is-extendable: "npm:^0.1.1" + set-value: "npm:^2.0.1" + checksum: 10c0/8758d880cb9545f62ce9cfb9b791b2b7a206e0ff5cc4b9d7cd6581da2c6839837fbb45e639cf1fd8eef3cae08c0201b614b7c06dd9f5f70d9dbe7c5fe2fbf592 + languageName: node + linkType: hard + "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -17250,6 +21641,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + "universalify@npm:^0.2.0": version: 0.2.0 resolution: "universalify@npm:0.2.0" @@ -17258,13 +21656,13 @@ __metadata: linkType: hard "universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 10c0/07092b9f46df61b823d8ab5e57f0ee5120c178b39609a95e4a15a98c42f6b0b8e834e66fbb47ff92831786193be42f1fd36347169b88ce8639d0f9670af24a71 + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a languageName: node linkType: hard -"unpipe@npm:1.0.0": +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c @@ -17272,29 +21670,29 @@ __metadata: linkType: hard "unrs-resolver@npm:^1.7.11": - version: 1.9.1 - resolution: "unrs-resolver@npm:1.9.1" - dependencies: - "@unrs/resolver-binding-android-arm-eabi": "npm:1.9.1" - "@unrs/resolver-binding-android-arm64": "npm:1.9.1" - "@unrs/resolver-binding-darwin-arm64": "npm:1.9.1" - "@unrs/resolver-binding-darwin-x64": "npm:1.9.1" - "@unrs/resolver-binding-freebsd-x64": "npm:1.9.1" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.9.1" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.9.1" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.9.1" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.9.1" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.9.1" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.9.1" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.9.1" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.9.1" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.9.1" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.9.1" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.9.1" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.9.1" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.9.1" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.9.1" - napi-postinstall: "npm:^0.2.2" + version: 1.11.1 + resolution: "unrs-resolver@npm:1.11.1" + dependencies: + "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" + "@unrs/resolver-binding-android-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" + "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" + napi-postinstall: "npm:^0.3.0" dependenciesMeta: "@unrs/resolver-binding-android-arm-eabi": optional: true @@ -17334,7 +21732,17 @@ __metadata: optional: true "@unrs/resolver-binding-win32-x64-msvc": optional: true - checksum: 10c0/fded9251b6c180c92c0510abe63e4fa9a5a4adcdcf3c9f7920507dc9f1ec756de5e71d1258f12bf4a32f7042e1fe142b6dc1003d8a6fb4d0bf1234226c879b01 + checksum: 10c0/c91b112c71a33d6b24e5c708dab43ab80911f2df8ee65b87cd7a18fb5af446708e98c4b415ca262026ad8df326debcc7ca6a801b2935504d87fd6f0b9d70dce1 + languageName: node + linkType: hard + +"unset-value@npm:^1.0.0": + version: 1.0.0 + resolution: "unset-value@npm:1.0.0" + dependencies: + has-value: "npm:^0.3.1" + isobject: "npm:^3.0.0" + checksum: 10c0/68a796dde4a373afdbf017de64f08490a3573ebee549136da0b3a2245299e7f65f647ef70dc13c4ac7f47b12fba4de1646fa0967a365638578fedce02b9c0b1f languageName: node linkType: hard @@ -17352,17 +21760,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.1": - version: 1.1.1 - resolution: "update-browserslist-db@npm:1.1.1" +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" dependencies: escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.0" + picocolors: "npm:^1.1.1" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/536a2979adda2b4be81b07e311bd2f3ad5e978690987956bc5f514130ad50cac87cd22c710b686d79731e00fbee8ef43efe5fcd72baa241045209195d43dcc80 + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 languageName: node linkType: hard @@ -17375,6 +21783,13 @@ __metadata: languageName: node linkType: hard +"urix@npm:^0.1.0": + version: 0.1.0 + resolution: "urix@npm:0.1.0" + checksum: 10c0/264f1b29360c33c0aec5fb9819d7e28f15d1a3b83175d2bcc9131efe8583f459f07364957ae3527f1478659ec5b2d0f1ad401dfb625f73e4d424b3ae35fc5fc0 + languageName: node + linkType: hard + "url-parse@npm:^1.5.3": version: 1.5.10 resolution: "url-parse@npm:1.5.10" @@ -17385,12 +21800,30 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.4.0": - version: 1.4.0 - resolution: "use-sync-external-store@npm:1.4.0" +"use-subscription@npm:^1.0.0": + version: 1.11.0 + resolution: "use-subscription@npm:1.11.0" + dependencies: + use-sync-external-store: "npm:^1.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/6aa31e134d56e90a37f0f8232ece5ab5b74f35224e52bfd5b9a9e1af668423bba37715ee0f932f9e40dd9f8825d2efb90a1d254a7014b55a470b033acfadf4a3 + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.4.0, use-sync-external-store@npm:^1.5.0": + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10c0/ec011a5055962c0f6b509d6e78c0b143f8cd069890ae370528753053c55e3b360d3648e76cfaa854faa7a59eb08d6c5fb1015e60ffde9046d32f5b2a295acea5 + checksum: 10c0/1b8663515c0be34fa653feb724fdcce3984037c78dd4a18f68b2c8be55cc1a1084c578d5b75f158d41b5ddffc2bf5600766d1af3c19c8e329bb20af2ec6f52f4 + languageName: node + linkType: hard + +"use@npm:^3.1.0": + version: 3.1.1 + resolution: "use@npm:3.1.1" + checksum: 10c0/75b48673ab80d5139c76922630d5a8a44e72ed58dbaf54dee1b88352d10e1c1c1fc332066c782d8ae9a56503b85d3dc67ff6d2ffbd9821120466d1280ebb6d6e languageName: node linkType: hard @@ -17408,6 +21841,26 @@ __metadata: languageName: node linkType: hard +"util@npm:^0.12.3": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: "npm:^2.0.3" + is-arguments: "npm:^1.0.4" + is-generator-function: "npm:^1.0.7" + is-typed-array: "npm:^1.1.3" + which-typed-array: "npm:^1.1.2" + checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: 10c0/02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 + languageName: node + linkType: hard + "uuid@npm:^10.0.0": version: 10.0.0 resolution: "uuid@npm:10.0.0" @@ -17417,6 +21870,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 + languageName: node + linkType: hard + "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -17434,13 +21896,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.0.1 - resolution: "v8-to-istanbul@npm:9.0.1" + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" dependencies: "@jridgewell/trace-mapping": "npm:^0.3.12" "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^1.6.0" - checksum: 10c0/aaa6491ee0505010a818a98bd7abdb30c0136a93eac12106b836e1afb519759ea4da795cceaf7fe871d26ed6cb669e46fd48533d6f8107a23213d723a028f805 + convert-source-map: "npm:^2.0.0" + checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 languageName: node linkType: hard @@ -17462,9 +21924,9 @@ __metadata: linkType: hard "validator@npm:^13.9.0": - version: 13.9.0 - resolution: "validator@npm:13.9.0" - checksum: 10c0/0a0af4b37779671b53ef790aa9d36f71a605c9d41c6daf198d2a1051ce549bcdca3313fa3b52c8fa24577e1a4968ec9404ad8a928d3607d51bccef6d6e33bee7 + version: 13.15.15 + resolution: "validator@npm:13.15.15" + checksum: 10c0/f5349d1fbb9cc36f9f6c5dab1880764ddad1d0d2b084e2a71e5964f7de1635d20e406611559df9a3db24828ce775cbee5e3b6dd52f0d555a61939ed7ea5990bd languageName: node linkType: hard @@ -17541,6 +22003,13 @@ __metadata: languageName: node linkType: hard +"vlq@npm:^1.0.0": + version: 1.0.1 + resolution: "vlq@npm:1.0.1" + checksum: 10c0/a8ec5c95d747c840198f20b4973327fa317b98397f341e7a2f352bfcf385aeb73c0eea01cc6d406c20169298375397e259efc317aec53c8ffc001ec998204aed + languageName: node + linkType: hard + "w3c-xmlserializer@npm:^5.0.0": version: 5.0.0 resolution: "w3c-xmlserializer@npm:5.0.0" @@ -17579,7 +22048,7 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.8": +"walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -17606,10 +22075,37 @@ __metadata: languageName: node linkType: hard +"web-encoding@npm:1.1.5": + version: 1.1.5 + resolution: "web-encoding@npm:1.1.5" + dependencies: + "@zxing/text-encoding": "npm:0.9.0" + util: "npm:^0.12.3" + dependenciesMeta: + "@zxing/text-encoding": + optional: true + checksum: 10c0/59d5413338ec0894c690006f5d8508b0c88cae1d8c78606c3f326e351c672196461ed808b849fe08d0900fa56a61fcacb9ff576499068d2ead0a7bc04afa7d34 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.1.1": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"web-vitals@npm:^4.0.1": + version: 4.2.4 + resolution: "web-vitals@npm:4.2.4" + checksum: 10c0/383c9281d5b556bcd190fde3c823aeb005bb8cf82e62c75b47beb411014a4ed13fa5c5e0489ed0f1b8d501cd66b0bebcb8624c1a75750bd5df13e2a3b1b2d194 + languageName: node + linkType: hard + "web-vitals@npm:^5.0.3": - version: 5.0.3 - resolution: "web-vitals@npm:5.0.3" - checksum: 10c0/9bc6e6673eb913033ad962600b9bdf454aa1cf8dcf2611ecb65d00687d1befbdc85d528cb2d3630204284dc94a623e0daedf29816e7fe07aba595f9fea9d96cb + version: 5.1.0 + resolution: "web-vitals@npm:5.1.0" + checksum: 10c0/1af22ddbe2836ba880fcb492cfba24c3349f4760ebb5e92f38324ea67bca3c4dbb9c86f1a32af4795b6115cdaf98b90000cf3a7402bffef6e8c503f0d1b2e706 languageName: node linkType: hard @@ -17636,10 +22132,10 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:^3.4.1": - version: 3.6.2 - resolution: "whatwg-fetch@npm:3.6.2" - checksum: 10c0/cc10f6893fe71839250b6e2fa9bc293bcf0ca5b93129712a7d1097fb7528b3ff617eb065098dc972e74d1455378e514aa34c0901ded41584be16508db63477c8 +"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.0.0, whatwg-fetch@npm:^3.4.1": + version: 3.6.20 + resolution: "whatwg-fetch@npm:3.6.20" + checksum: 10c0/fa972dd14091321d38f36a4d062298df58c2248393ef9e8b154493c347c62e2756e25be29c16277396046d6eaa4b11bd174f34e6403fff6aaca9fb30fa1ff46d languageName: node linkType: hard @@ -17670,19 +22166,6 @@ __metadata: languageName: node linkType: hard -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" - dependencies: - is-bigint: "npm:^1.0.1" - is-boolean-object: "npm:^1.1.0" - is-number-object: "npm:^1.0.4" - is-string: "npm:^1.0.5" - is-symbol: "npm:^1.0.3" - checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -17729,34 +22212,14 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.14": - version: 1.1.14 - resolution: "which-typed-array@npm:1.1.14" - dependencies: - available-typed-arrays: "npm:^1.0.6" - call-bind: "npm:^1.0.5" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.1" - checksum: 10c0/0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56 - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": - version: 1.1.18 - resolution: "which-typed-array@npm:1.1.18" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - for-each: "npm:^0.3.3" - gopd: "npm:^1.2.0" - has-tostringtag: "npm:^1.0.2" - checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e languageName: node linkType: hard -"which-typed-array@npm:^1.1.19": +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19, which-typed-array@npm:^1.1.2": version: 1.1.19 resolution: "which-typed-array@npm:1.1.19" dependencies: @@ -17852,6 +22315,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -17870,6 +22340,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^5.1.0": + version: 5.1.0 + resolution: "wrap-ansi@npm:5.1.0" + dependencies: + ansi-styles: "npm:^3.2.0" + string-width: "npm:^3.0.0" + strip-ansi: "npm:^5.0.0" + checksum: 10c0/fcd0b39b7453df512f2fe8c714a1c1b147fe3e6a4b5a2e4de6cadc3af47212f335eceaffe588e98322d6345e72672137e2c0b834d8a662e73a32296c1c8216bb + languageName: node + linkType: hard + "wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -17920,7 +22401,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^2.4.2": +"write-file-atomic@npm:^2.3.0, write-file-atomic@npm:^2.4.2": version: 2.4.3 resolution: "write-file-atomic@npm:2.4.3" dependencies: @@ -17956,9 +22437,43 @@ __metadata: languageName: node linkType: hard +"ws@npm:^1.1.0, ws@npm:^1.1.5": + version: 1.1.5 + resolution: "ws@npm:1.1.5" + dependencies: + options: "npm:>=0.0.5" + ultron: "npm:1.0.x" + checksum: 10c0/6d4fba17187cded3d12f3ca5c0dec54f83ad4b6320b1e42dbd2ebea869208552e284276f65c7f4c3f2a0789aeb72ff34fb360e6a796bf3c316603bffcc5e287b + languageName: node + linkType: hard + +"ws@npm:^6.2.2": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: "npm:~1.0.0" + checksum: 10c0/56a35b9799993cea7ce2260197e7879f21bbbb194a967f31acbbda6f7f46ecda4365951966fb062044c95197e19fb2f053be6f65c172435455186835f494de41 + languageName: node + linkType: hard + +"ws@npm:^7, ws@npm:^7.5.1": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + "ws@npm:^8.18.0": - version: 8.18.2 - resolution: "ws@npm:8.18.2" + version: 8.18.3 + resolution: "ws@npm:8.18.3" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -17967,7 +22482,17 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/4b50f67931b8c6943c893f59c524f0e4905bbd183016cfb0f2b8653aa7f28dad4e456b9d99d285bbb67cca4fedd9ce90dfdfaa82b898a11414ebd66ee99141e4 + checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53 + languageName: node + linkType: hard + +"xcode@npm:^2.0.0": + version: 2.1.0 + resolution: "xcode@npm:2.1.0" + dependencies: + simple-plist: "npm:^1.0.0" + uuid: "npm:^3.3.2" + checksum: 10c0/e779966f863456cee90dcd48968e4f724891c1576256e2e052acd5a9ed1622d7e57a9e1513b933ede3464bcd5818b95524de8a2db3d0d7f2897af0528bc0f91f languageName: node linkType: hard @@ -17978,6 +22503,13 @@ __metadata: languageName: node linkType: hard +"xmlbuilder@npm:^15.1.1": + version: 15.1.1 + resolution: "xmlbuilder@npm:15.1.1" + checksum: 10c0/665266a8916498ff8d82b3d46d3993913477a254b98149ff7cff060d9b7cc0db7cf5a3dae99aed92355254a808c0e2e3ec74ad1b04aa1061bdb8dfbea26c18b8 + languageName: node + linkType: hard + "xmlchars@npm:^2.2.0": version: 2.2.0 resolution: "xmlchars@npm:2.2.0" @@ -17985,6 +22517,22 @@ __metadata: languageName: node linkType: hard +"xmldoc@npm:^1.1.2": + version: 1.3.0 + resolution: "xmldoc@npm:1.3.0" + dependencies: + sax: "npm:^1.2.4" + checksum: 10c0/7957c57ff77008ced62063560d3e8f80c7fdf31d3fafa12d16c9f1fe676c8255f50889e8f41b61cca4cd473b841eedf2625089dcaf3f6b8717df521b9d0acfcf + languageName: node + linkType: hard + +"xpipe@npm:^1.0.5": + version: 1.0.8 + resolution: "xpipe@npm:1.0.8" + checksum: 10c0/5b069f89736241aab085f1a33b880f287dbb7240a780d2aea43154f2f8d0db28cc2a5c5ca4c3c69a7707eea5ea8fc676df771a5b91767fd33a022b5f3b6f335d + languageName: node + linkType: hard + "xtend@npm:^4.0.0, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -17992,6 +22540,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -18020,7 +22575,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.8.0": +"yaml@npm:^2.2.1, yaml@npm:^2.6.0, yaml@npm:^2.8.0": version: 2.8.0 resolution: "yaml@npm:2.8.0" bin: @@ -18036,6 +22591,26 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^15.0.1": + version: 15.0.3 + resolution: "yargs-parser@npm:15.0.3" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10c0/396bba6fd8cbe568ea64c85583c6814d886719980ebadce03f34dd5f6b339e0260a364ab65a3e3b97db93ba2ecf0f544aac13b389f682b16170fabbfd2a20b1b + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 + languageName: node + linkType: hard + "yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" @@ -18058,6 +22633,44 @@ __metadata: languageName: node linkType: hard +"yargs@npm:^14.2.0": + version: 14.2.3 + resolution: "yargs@npm:14.2.3" + dependencies: + cliui: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + find-up: "npm:^3.0.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^3.0.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^15.0.1" + checksum: 10c0/dceba0f167f182dfea9ab7e8924e3c0eff7197746e2c2776bf1ca5a342ccdf27d8ee995616670f558388502b2a19b9d809f88a4192da67cc0a83f01acc2f7c74 + languageName: node + linkType: hard + +"yargs@npm:^15.1.0": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: "npm:^6.0.0" + decamelize: "npm:^1.2.0" + find-up: "npm:^4.1.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^4.2.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^18.1.2" + checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d + languageName: node + linkType: hard + "yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" @@ -18096,3 +22709,10 @@ __metadata: checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f languageName: node linkType: hard + +"zone.js@npm:^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0": + version: 0.14.10 + resolution: "zone.js@npm:0.14.10" + checksum: 10c0/61283d152cb1eff899bae61621dccd572aa9f47e0c60c04b249bf86b43e3e4ba627bf6dba371b725023a4f302f39e554d7bf2d25bbf40c869c6c52f774b17e8b + languageName: node + linkType: hard