From 43f448c61f8ea993603027efad7b9a59dae47f1b Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Sat, 14 Dec 2024 00:01:08 +0100 Subject: [PATCH 01/24] [cartservice] - Add Exemplars to Cart Service (#1830) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP-Add Exemplars to Cart Service * Bump AspNetCore instrumentation Co-authored-by: Piotr Kiełkowicz * Add source and meter * Remove logs and add boundaries * Add HistogramBucketBoundaries * Drop trailing space * Apply suggestions from code review Co-authored-by: Piotr Kiełkowicz * changelog * indent --------- Co-authored-by: Piotr Kiełkowicz --- CHANGELOG.md | 9 +++--- src/cartservice/src/Program.cs | 3 ++ src/cartservice/src/cartservice.csproj | 28 +++++++++---------- .../src/cartstore/ValkeyCartStore.cs | 26 +++++++++++++++++ src/cartservice/src/services/CartService.cs | 7 ++--- .../tests/cartservice.tests.csproj | 10 +++---- 6 files changed, 56 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c9a41b936..d23ee07c0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,6 @@ the release. ## Unreleased -* [flagd] Update `paymentServiceFailure` to use a list of variants. -* [paymentservice] Add loyalty level attributes to spans. - Added `service.name` to logs. - ([#1815](https://github.com/open-telemetry/opentelemetry-demo/pull/1815)) * [grafana] Update grafana to 11.3.0 ([#1764](https://github.com/open-telemetry/opentelemetry-demo/pull/1764)) * [chore] Move build args to .env file @@ -29,8 +25,13 @@ the release. ([#1794](https://github.com/open-telemetry/opentelemetry-demo/pull/1784)) * [paymentservice] Add nodejs instrumentation for runtime metrics ([#1797](https://github.com/open-telemetry/opentelemetry-demo/pull/1797)) +* [flagd and paymentservice] Update `paymentServiceFailure` to use a list of + variants and add loyalty level attributes to spans. Added `service.name` to logs. + ([#1815](https://github.com/open-telemetry/opentelemetry-demo/pull/1815)) * [accounting] rename accountingservice to accounting ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1827)) +* [cartservice] - Add Exemplars to Cart Service + ([#1830](https://github.com/open-telemetry/opentelemetry-demo/pull/1830)) ## 1.12.0 diff --git a/src/cartservice/src/Program.cs b/src/cartservice/src/Program.cs index e4e6a28e11..6c52229ce4 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cartservice/src/Program.cs @@ -61,6 +61,7 @@ builder.Services.AddOpenTelemetry() .ConfigureResource(appResourceBuilder) .WithTracing(tracerBuilder => tracerBuilder + .AddSource("OpenTelemetry.Demo.Cart") .AddRedisInstrumentation( options => options.SetVerboseDatabaseStatements = true) .AddAspNetCoreInstrumentation() @@ -68,9 +69,11 @@ .AddHttpClientInstrumentation() .AddOtlpExporter()) .WithMetrics(meterBuilder => meterBuilder + .AddMeter("OpenTelemetry.Demo.Cart") .AddProcessInstrumentation() .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() + .SetExemplarFilter(ExemplarFilterType.TraceBased) .AddOtlpExporter()); OpenFeature.Api.Instance.AddHooks(new TracingHook()); builder.Services.AddGrpc(); diff --git a/src/cartservice/src/cartservice.csproj b/src/cartservice/src/cartservice.csproj index 5b5e31373f..d62a131f7f 100644 --- a/src/cartservice/src/cartservice.csproj +++ b/src/cartservice/src/cartservice.csproj @@ -15,22 +15,22 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - + diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cartservice/src/cartstore/ValkeyCartStore.cs index aa79afedea..1a16dcc6c0 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cartservice/src/cartstore/ValkeyCartStore.cs @@ -7,6 +7,8 @@ using StackExchange.Redis; using Google.Protobuf; using Microsoft.Extensions.Logging; +using System.Diagnostics.Metrics; +using System.Diagnostics; namespace cartservice.cartstore; @@ -23,6 +25,20 @@ public class ValkeyCartStore : ICartStore private readonly byte[] _emptyCartBytes; private readonly string _connectionString; + private static readonly ActivitySource CartActivitySource = new("OpenTelemetry.Demo.Cart"); + private static readonly Meter CartMeter = new Meter("OpenTelemetry.Demo.Cart"); + private static readonly Histogram addItemHistogram = CartMeter.CreateHistogram( + "app.cart.add_item.latency", + advice: new InstrumentAdvice + { + HistogramBucketBoundaries = [ 500000, 600000, 700000, 800000, 900000, 1000000, 1100000 ] + }); + private static readonly Histogram getCartHistogram = CartMeter.CreateHistogram( + "app.cart.get_cart.latency", + advice: new InstrumentAdvice + { + HistogramBucketBoundaries = [ 300000, 400000, 500000, 600000, 700000, 800000, 900000 ] + }); private readonly ConfigurationOptions _redisConnectionOptions; public ValkeyCartStore(ILogger logger, string valkeyAddress) @@ -105,6 +121,7 @@ private void EnsureRedisConnected() public async Task AddItemAsync(string userId, string productId, int quantity) { + var stopwatch = Stopwatch.StartNew(); _logger.LogInformation("AddItemAsync called with userId={userId}, productId={productId}, quantity={quantity}", userId, productId, quantity); try @@ -146,6 +163,10 @@ public async Task AddItemAsync(string userId, string productId, int quantity) { throw new RpcException(new Status(StatusCode.FailedPrecondition, $"Can't access cart storage. {ex}")); } + finally + { + addItemHistogram.Record(stopwatch.ElapsedTicks); + } } public async Task EmptyCartAsync(string userId) @@ -169,6 +190,7 @@ public async Task EmptyCartAsync(string userId) public async Task GetCartAsync(string userId) { + var stopwatch = Stopwatch.StartNew(); _logger.LogInformation("GetCartAsync called with userId={userId}", userId); try @@ -192,6 +214,10 @@ public async Task EmptyCartAsync(string userId) { throw new RpcException(new Status(StatusCode.FailedPrecondition, $"Can't access cart storage. {ex}")); } + finally + { + getCartHistogram.Record(stopwatch.ElapsedTicks); + } } public bool Ping() diff --git a/src/cartservice/src/services/CartService.cs b/src/cartservice/src/services/CartService.cs index d071c37080..093b3bda2d 100644 --- a/src/cartservice/src/services/CartService.cs +++ b/src/cartservice/src/services/CartService.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using System; using Grpc.Core; -using OpenTelemetry.Trace; using cartservice.cartstore; using OpenFeature; using Oteldemo; @@ -41,7 +40,7 @@ public override async Task AddItem(AddItemRequest request, ServerCallCont } catch (RpcException ex) { - activity?.RecordException(ex); + activity?.AddException(ex); activity?.SetStatus(ActivityStatusCode.Error, ex.Message); throw; } @@ -67,7 +66,7 @@ public override async Task GetCart(GetCartRequest request, ServerCallConte } catch (RpcException ex) { - activity?.RecordException(ex); + activity?.AddException(ex); activity?.SetStatus(ActivityStatusCode.Error, ex.Message); throw; } @@ -92,7 +91,7 @@ public override async Task EmptyCart(EmptyCartRequest request, ServerCall } catch (RpcException ex) { - Activity.Current?.RecordException(ex); + Activity.Current?.AddException(ex); Activity.Current?.SetStatus(ActivityStatusCode.Error, ex.Message); throw; } diff --git a/src/cartservice/tests/cartservice.tests.csproj b/src/cartservice/tests/cartservice.tests.csproj index 4c7a083d85..fd079fc30f 100644 --- a/src/cartservice/tests/cartservice.tests.csproj +++ b/src/cartservice/tests/cartservice.tests.csproj @@ -5,11 +5,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 9b7cfada48e2ecb39d96fba579202573cbd94c38 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Mon, 16 Dec 2024 04:04:24 -0500 Subject: [PATCH 02/24] [otel-collector] - rename otelcol to otel-collector (#1841) --- .env | 6 ++-- .github/workflows/label-pr.yml | 2 +- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 2 +- docker-compose-tests_include-override.yml | 2 +- docker-compose.minimal.yml | 28 +++++++-------- docker-compose.yml | 34 +++++++++---------- renovate.json5 | 4 +-- src/frontend/pages/_app.tsx | 4 +-- .../utils/telemetry/FrontendTracer.ts | 4 +-- .../demo/opentelemetry-collector.json | 8 ++--- .../otelcol-config-extras.yml | 0 .../otelcol-config.yml | 2 +- src/prometheus/prometheus-config.yaml | 2 +- test/tracetesting/tracetest-config.yaml | 2 +- 15 files changed, 51 insertions(+), 51 deletions(-) rename src/{otelcollector => otel-collector}/otelcol-config-extras.yml (100%) rename src/{otelcollector => otel-collector}/otelcol-config.yml (98%) diff --git a/.env b/.env index 844e885c5a..8f8668e931 100644 --- a/.env +++ b/.env @@ -28,11 +28,11 @@ ENV_PLATFORM=local # OpenTelemetry Collector HOST_FILESYSTEM=/ DOCKER_SOCK=/var/run/docker.sock -OTEL_COLLECTOR_HOST=otelcol +OTEL_COLLECTOR_HOST=otel-collector OTEL_COLLECTOR_PORT_GRPC=4317 OTEL_COLLECTOR_PORT_HTTP=4318 -OTEL_COLLECTOR_CONFIG=./src/otelcollector/otelcol-config.yml -OTEL_COLLECTOR_CONFIG_EXTRAS=./src/otelcollector/otelcol-config-extras.yml +OTEL_COLLECTOR_CONFIG=./src/otel-collector/otelcol-config.yml +OTEL_COLLECTOR_CONFIG_EXTRAS=./src/otel-collector/otelcol-config-extras.yml OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:8080/otlp-http/v1/traces diff --git a/.github/workflows/label-pr.yml b/.github/workflows/label-pr.yml index e027769190..73707abf73 100644 --- a/.github/workflows/label-pr.yml +++ b/.github/workflows/label-pr.yml @@ -30,7 +30,7 @@ jobs: - 'docker-compose*.yml' - 'src/flagd/**' - 'src/grafana/**' - - 'src/otelcollector/**' + - 'src/otel-collector/**' - 'src/prometheus/**' - name: "Add Label: docs-update-required" diff --git a/CHANGELOG.md b/CHANGELOG.md index d23ee07c0f..cf8b07c509 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,8 @@ the release. ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1827)) * [cartservice] - Add Exemplars to Cart Service ([#1830](https://github.com/open-telemetry/opentelemetry-demo/pull/1830)) +* [otel-collector] rename otelcol to otel-collector + ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 40cbbccc28..7a9042fee9 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -107,7 +107,7 @@ services: depends_on: tracetest-postgres: condition: service_healthy - otelcol: + otel-collector: condition: service_started healthcheck: test: [ "CMD", "wget", "--spider", "localhost:11633" ] diff --git a/docker-compose-tests_include-override.yml b/docker-compose-tests_include-override.yml index 1a115b663f..b9c3c837e0 100644 --- a/docker-compose-tests_include-override.yml +++ b/docker-compose-tests_include-override.yml @@ -3,7 +3,7 @@ services: - otelcol: + otel-collector: command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-tracetest.yml" ] environment: - ENVOY_PORT diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 1acbf44471..8d8c699dbb 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -45,7 +45,7 @@ services: - OTEL_LOGS_EXPORTER=otlp - OTEL_SERVICE_NAME=adservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -76,7 +76,7 @@ services: depends_on: valkey-cart: condition: service_started - otelcol: + otel-collector: condition: service_started logging: *logging @@ -122,7 +122,7 @@ services: condition: service_started shippingservice: condition: service_started - otelcol: + otel-collector: condition: service_started logging: *logging @@ -150,7 +150,7 @@ services: - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -176,7 +176,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=emailservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -233,7 +233,7 @@ services: condition: service_started shippingservice: condition: service_started - otelcol: + otel-collector: condition: service_started imageprovider: condition: service_started @@ -308,7 +308,7 @@ services: - OTEL_SERVICE_NAME=imageprovider - OTEL_RESOURCE_ATTRIBUTES depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -374,7 +374,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=paymentservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -402,7 +402,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=productcatalogservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -430,7 +430,7 @@ services: - OTEL_SERVICE_NAME=quoteservice - OTEL_PHP_INTERNAL_METRICS_ENABLED=true depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -463,7 +463,7 @@ services: depends_on: productcatalogservice: condition: service_started - otelcol: + otel-collector: condition: service_started logging: *logging @@ -490,7 +490,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=shippingservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -581,9 +581,9 @@ services: logging: *logging # OpenTelemetry Collector - otelcol: + otel-collector: image: ${COLLECTOR_CONTRIB_IMAGE} - container_name: otel-col + container_name: otel-collector deploy: resources: limits: diff --git a/docker-compose.yml b/docker-compose.yml index 984d4c8858..c08f93bfb0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,7 +38,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=accounting depends_on: - otelcol: + otel-collector: condition: service_started kafka: condition: service_healthy @@ -72,7 +72,7 @@ services: - OTEL_LOGS_EXPORTER=otlp - OTEL_SERVICE_NAME=adservice depends_on: - otelcol: + otel-collector: condition: service_started flagd: condition: service_started @@ -106,7 +106,7 @@ services: depends_on: valkey-cart: condition: service_started - otelcol: + otel-collector: condition: service_started flagd: condition: service_started @@ -156,7 +156,7 @@ services: condition: service_started shippingservice: condition: service_started - otelcol: + otel-collector: condition: service_started kafka: condition: service_healthy @@ -188,7 +188,7 @@ services: - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -215,7 +215,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=emailservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -246,7 +246,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=frauddetectionservice depends_on: - otelcol: + otel-collector: condition: service_started kafka: condition: service_healthy @@ -305,7 +305,7 @@ services: condition: service_started shippingservice: condition: service_started - otelcol: + otel-collector: condition: service_started imageprovider: condition: service_started @@ -384,7 +384,7 @@ services: - OTEL_SERVICE_NAME=imageprovider - OTEL_RESOURCE_ATTRIBUTES depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -451,7 +451,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=paymentservice depends_on: - otelcol: + otel-collector: condition: service_started flagd: condition: service_started @@ -482,7 +482,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=productcatalogservice depends_on: - otelcol: + otel-collector: condition: service_started flagd: condition: service_started @@ -512,7 +512,7 @@ services: - OTEL_SERVICE_NAME=quoteservice - OTEL_PHP_INTERNAL_METRICS_ENABLED=true depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -546,7 +546,7 @@ services: depends_on: productcatalogservice: condition: service_started - otelcol: + otel-collector: condition: service_started flagd: condition: service_started @@ -575,7 +575,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=shippingservice depends_on: - otelcol: + otel-collector: condition: service_started logging: *logging @@ -628,7 +628,7 @@ services: ports: - "${FLAGD_UI_PORT}" depends_on: - otelcol: + otel-collector: condition: service_started flagd: condition: service_started @@ -725,9 +725,9 @@ services: logging: *logging # OpenTelemetry Collector - otelcol: + otel-collector: image: ${COLLECTOR_CONTRIB_IMAGE} - container_name: otel-col + container_name: otel-collector deploy: resources: limits: diff --git a/renovate.json5 b/renovate.json5 index f871b2b08a..e354f5c83f 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -67,8 +67,8 @@ "groupName": "loadgenerator", }, { - "matchFileNames": ["src/otelcollector/**"], - "groupName": "otelcollector", + "matchFileNames": ["src/otel-collector/**"], + "groupName": "otel-collector", }, { "matchFileNames": ["src/paymentservice/**"], diff --git a/src/frontend/pages/_app.tsx b/src/frontend/pages/_app.tsx index e49b51f7c6..67ee8b18ba 100755 --- a/src/frontend/pages/_app.tsx +++ b/src/frontend/pages/_app.tsx @@ -4,7 +4,6 @@ import '../styles/globals.css'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import App, { AppContext, AppProps } from 'next/app'; -import { getCookie } from 'cookies-next'; import CurrencyProvider from '../providers/Currency.provider'; import CartProvider from '../providers/Cart.provider'; import { ThemeProvider } from 'styled-components'; @@ -26,8 +25,7 @@ declare global { } if (typeof window !== 'undefined') { - const collector = getCookie('otelCollectorUrl')?.toString() || ''; - FrontendTracer(collector); + FrontendTracer(); if (window.location) { const session = SessionGateway.getSession(); diff --git a/src/frontend/utils/telemetry/FrontendTracer.ts b/src/frontend/utils/telemetry/FrontendTracer.ts index de9e8a30ec..69681970f1 100644 --- a/src/frontend/utils/telemetry/FrontendTracer.ts +++ b/src/frontend/utils/telemetry/FrontendTracer.ts @@ -19,7 +19,7 @@ const { IS_SYNTHETIC_REQUEST = '', } = typeof window !== 'undefined' ? window.ENV : {}; -const FrontendTracer = (collectorString: string) => { +const FrontendTracer = () => { let resource = new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: NEXT_PUBLIC_OTEL_SERVICE_NAME, }); @@ -33,7 +33,7 @@ const FrontendTracer = (collectorString: string) => { provider.addSpanProcessor( new BatchSpanProcessor( new OTLPTraceExporter({ - url: NEXT_PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || collectorString || 'http://localhost:4318/v1/traces', + url: NEXT_PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || 'http://localhost:4318/v1/traces', }), { scheduledDelayMillis: 500, diff --git a/src/grafana/provisioning/dashboards/demo/opentelemetry-collector.json b/src/grafana/provisioning/dashboards/demo/opentelemetry-collector.json index 1c574262c7..353cb7c32e 100644 --- a/src/grafana/provisioning/dashboards/demo/opentelemetry-collector.json +++ b/src/grafana/provisioning/dashboards/demo/opentelemetry-collector.json @@ -25,7 +25,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, - "id": 4, + "id": 3, "links": [], "panels": [ { @@ -3055,13 +3055,13 @@ "type": "prometheus", "uid": "$datasource" }, - "definition": "label_values(otelcol_process_uptime, job)", + "definition": "label_values(otelcol_process_uptime_total,job)", "includeAll": false, "label": "Job", "name": "job", "options": [], "query": { - "query": "label_values(otelcol_process_uptime, job)", + "query": "label_values(otelcol_process_uptime_total,job)", "refId": "StandardVariableQuery" }, "refresh": 1, @@ -3234,6 +3234,6 @@ "timezone": "utc", "title": "OpenTelemetry Collector", "uid": "BKf2sowmj", - "version": 10, + "version": 1, "weekStart": "" } diff --git a/src/otelcollector/otelcol-config-extras.yml b/src/otel-collector/otelcol-config-extras.yml similarity index 100% rename from src/otelcollector/otelcol-config-extras.yml rename to src/otel-collector/otelcol-config-extras.yml diff --git a/src/otelcollector/otelcol-config.yml b/src/otel-collector/otelcol-config.yml similarity index 98% rename from src/otelcollector/otelcol-config.yml rename to src/otel-collector/otelcol-config.yml index e58a454cb6..387d1a0d47 100644 --- a/src/otelcollector/otelcol-config.yml +++ b/src/otel-collector/otelcol-config.yml @@ -83,7 +83,7 @@ receivers: prometheus: config: scrape_configs: - - job_name: 'otelcol' + - job_name: 'otel-collector' scrape_interval: 10s static_configs: - targets: ['0.0.0.0:8888'] diff --git a/src/prometheus/prometheus-config.yaml b/src/prometheus/prometheus-config.yaml index c4404c4840..ecc0d1090c 100644 --- a/src/prometheus/prometheus-config.yaml +++ b/src/prometheus/prometheus-config.yaml @@ -11,4 +11,4 @@ scrape_configs: - job_name: otel-collector static_configs: - targets: - - 'otelcol:8888' + - 'otel-collector:8888' diff --git a/test/tracetesting/tracetest-config.yaml b/test/tracetesting/tracetest-config.yaml index 8cd23c94c4..7f2490368f 100644 --- a/test/tracetesting/tracetest-config.yaml +++ b/test/tracetesting/tracetest-config.yaml @@ -17,7 +17,7 @@ telemetry: exporter: type: collector collector: - endpoint: otelcol:4317 + endpoint: otel-collector:4317 server: telemetry: From fa7847efb691e323236955c6126d486cf2c1b558 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Mon, 16 Dec 2024 11:00:56 +0100 Subject: [PATCH 03/24] [grafana] Add Exemplars Dashboard (#1836) * [grafana] Add Exemplars Dashboard * changelog * use heatmap and 95th pct chart * decrease user load to 5 * increase Jaeger capacity * use heatmap for histogram * linter fix * Add extra row --------- Co-authored-by: Pierre Tessier --- .env | 2 +- CHANGELOG.md | 2 + docker-compose.yml | 4 +- .../dashboards/demo/exemplars-dashboard.json | 435 ++++++++++++++++++ 4 files changed, 440 insertions(+), 3 deletions(-) create mode 100644 src/grafana/provisioning/dashboards/demo/exemplars-dashboard.json diff --git a/.env b/.env index 8f8668e931..98a71cc3f5 100644 --- a/.env +++ b/.env @@ -94,7 +94,7 @@ IMAGE_PROVIDER_DOCKERFILE=./src/imageprovider/Dockerfile # Load Generator LOCUST_WEB_PORT=8089 -LOCUST_USERS=10 +LOCUST_USERS=5 LOCUST_HOST=http://${FRONTEND_PROXY_ADDR} LOCUST_WEB_HOST=loadgenerator LOCUST_AUTOSTART=true diff --git a/CHANGELOG.md b/CHANGELOG.md index cf8b07c509..986502c12f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,8 @@ the release. ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1827)) * [cartservice] - Add Exemplars to Cart Service ([#1830](https://github.com/open-telemetry/opentelemetry-demo/pull/1830)) +* [grafana] Add Exemplars Dashboard + ([#1836](https://github.com/open-telemetry/opentelemetry-demo/pull/1836)) * [otel-collector] rename otelcol to otel-collector ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) diff --git a/docker-compose.yml b/docker-compose.yml index c08f93bfb0..52d7b9b588 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -689,7 +689,7 @@ services: image: ${JAEGERTRACING_IMAGE} container_name: jaeger command: - - "--memory.max-traces=5000" + - "--memory.max-traces=25000" - "--query.base-path=/jaeger/ui" - "--prometheus.server-url=http://${PROMETHEUS_ADDR}" - "--prometheus.query.normalize-calls=true" @@ -697,7 +697,7 @@ services: deploy: resources: limits: - memory: 400M + memory: 1200M restart: unless-stopped ports: - "${JAEGER_SERVICE_PORT}" # Jaeger UI diff --git a/src/grafana/provisioning/dashboards/demo/exemplars-dashboard.json b/src/grafana/provisioning/dashboards/demo/exemplars-dashboard.json new file mode 100644 index 0000000000..9d8ed82061 --- /dev/null +++ b/src/grafana/provisioning/dashboards/demo/exemplars-dashboard.json @@ -0,0 +1,435 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 4, + "panels": [], + "title": "GetCart Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 5, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_get_cart_latency_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 GetCart", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart GetCart Latency with Exemplars", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 2, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_get_cart_latency_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "GetCart Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 3, + "panels": [], + "title": "AddItem Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 6, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_add_item_latency_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "AddItem Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 1, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_add_item_latency_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 AddItem", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart AddItem Latency with Exemplars", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cart Service Exemplars", + "uid": "ce6sd46kfkglca", + "version": 1, + "weekStart": "" +} From 90a1bf1ef3a1dab0c1559832b9fc8edf2cbe6d19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 10:07:39 +0100 Subject: [PATCH 04/24] build(deps): bump the go-production-dependencies group across 2 directories with 1 update (#1847) * build(deps): bump the go-production-dependencies group across 2 directories with 1 update Bumps the go-production-dependencies group with 1 update in the /src/checkoutservice directory: google.golang.org/protobuf. Bumps the go-production-dependencies group with 1 update in the /src/productcatalogservice directory: google.golang.org/protobuf. Updates `google.golang.org/protobuf` from 1.35.2 to 1.36.0 Updates `google.golang.org/protobuf` from 1.35.2 to 1.36.0 --- updated-dependencies: - dependency-name: google.golang.org/protobuf dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-production-dependencies - dependency-name: google.golang.org/protobuf dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-production-dependencies ... Signed-off-by: dependabot[bot] * chore: update protobuf Signed-off-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../genproto/oteldemo/demo.pb.go | 375 ++++++++---------- src/checkoutservice/go.mod | 2 +- src/checkoutservice/go.sum | 4 +- .../genproto/oteldemo/demo.pb.go | 375 ++++++++---------- src/productcatalogservice/go.mod | 2 +- src/productcatalogservice/go.sum | 4 +- 6 files changed, 342 insertions(+), 420 deletions(-) diff --git a/src/checkoutservice/genproto/oteldemo/demo.pb.go b/src/checkoutservice/genproto/oteldemo/demo.pb.go index 8cb45c9be8..3cc8230359 100644 --- a/src/checkoutservice/genproto/oteldemo/demo.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.0 // protoc v4.24.4 // source: demo.proto @@ -35,12 +35,11 @@ const ( ) type CartItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` unknownFields protoimpl.UnknownFields - - ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CartItem) Reset() { @@ -88,12 +87,11 @@ func (x *CartItem) GetQuantity() int32 { } type AddItemRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Item *CartItem `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Item *CartItem `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddItemRequest) Reset() { @@ -141,11 +139,10 @@ func (x *AddItemRequest) GetItem() *CartItem { } type EmptyCartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EmptyCartRequest) Reset() { @@ -186,11 +183,10 @@ func (x *EmptyCartRequest) GetUserId() string { } type GetCartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCartRequest) Reset() { @@ -231,12 +227,11 @@ func (x *GetCartRequest) GetUserId() string { } type Cart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Cart) Reset() { @@ -284,9 +279,9 @@ func (x *Cart) GetItems() []*CartItem { } type Empty struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Empty) Reset() { @@ -320,12 +315,11 @@ func (*Empty) Descriptor() ([]byte, []int) { } type ListRecommendationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ProductIds []string `protobuf:"bytes,2,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ProductIds []string `protobuf:"bytes,2,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRecommendationsRequest) Reset() { @@ -373,11 +367,10 @@ func (x *ListRecommendationsRequest) GetProductIds() []string { } type ListRecommendationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ProductIds []string `protobuf:"bytes,1,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` unknownFields protoimpl.UnknownFields - - ProductIds []string `protobuf:"bytes,1,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRecommendationsResponse) Reset() { @@ -418,18 +411,17 @@ func (x *ListRecommendationsResponse) GetProductIds() []string { } type Product struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Picture string `protobuf:"bytes,4,opt,name=picture,proto3" json:"picture,omitempty"` - PriceUsd *Money `protobuf:"bytes,5,opt,name=price_usd,json=priceUsd,proto3" json:"price_usd,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Picture string `protobuf:"bytes,4,opt,name=picture,proto3" json:"picture,omitempty"` + PriceUsd *Money `protobuf:"bytes,5,opt,name=price_usd,json=priceUsd,proto3" json:"price_usd,omitempty"` // Categories such as "clothing" or "kitchen" that can be used to look up // other related products. - Categories []string `protobuf:"bytes,6,rep,name=categories,proto3" json:"categories,omitempty"` + Categories []string `protobuf:"bytes,6,rep,name=categories,proto3" json:"categories,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Product) Reset() { @@ -505,11 +497,10 @@ func (x *Product) GetCategories() []string { } type ListProductsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Products []*Product `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` unknownFields protoimpl.UnknownFields - - Products []*Product `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListProductsResponse) Reset() { @@ -550,11 +541,10 @@ func (x *ListProductsResponse) GetProducts() []*Product { } type GetProductRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetProductRequest) Reset() { @@ -595,11 +585,10 @@ func (x *GetProductRequest) GetId() string { } type SearchProductsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` unknownFields protoimpl.UnknownFields - - Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SearchProductsRequest) Reset() { @@ -640,11 +629,10 @@ func (x *SearchProductsRequest) GetQuery() string { } type SearchProductsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Results []*Product `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` unknownFields protoimpl.UnknownFields - - Results []*Product `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SearchProductsResponse) Reset() { @@ -685,12 +673,11 @@ func (x *SearchProductsResponse) GetResults() []*Product { } type GetQuoteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetQuoteRequest) Reset() { @@ -738,11 +725,10 @@ func (x *GetQuoteRequest) GetItems() []*CartItem { } type GetQuoteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CostUsd *Money `protobuf:"bytes,1,opt,name=cost_usd,json=costUsd,proto3" json:"cost_usd,omitempty"` unknownFields protoimpl.UnknownFields - - CostUsd *Money `protobuf:"bytes,1,opt,name=cost_usd,json=costUsd,proto3" json:"cost_usd,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetQuoteResponse) Reset() { @@ -783,12 +769,11 @@ func (x *GetQuoteResponse) GetCostUsd() *Money { } type ShipOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ShipOrderRequest) Reset() { @@ -836,11 +821,10 @@ func (x *ShipOrderRequest) GetItems() []*CartItem { } type ShipOrderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TrackingId string `protobuf:"bytes,1,opt,name=tracking_id,json=trackingId,proto3" json:"tracking_id,omitempty"` unknownFields protoimpl.UnknownFields - - TrackingId string `protobuf:"bytes,1,opt,name=tracking_id,json=trackingId,proto3" json:"tracking_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ShipOrderResponse) Reset() { @@ -881,15 +865,14 @@ func (x *ShipOrderResponse) GetTrackingId() string { } type Address struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StreetAddress string `protobuf:"bytes,1,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"` + City string `protobuf:"bytes,2,opt,name=city,proto3" json:"city,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Country string `protobuf:"bytes,4,opt,name=country,proto3" json:"country,omitempty"` + ZipCode string `protobuf:"bytes,5,opt,name=zip_code,json=zipCode,proto3" json:"zip_code,omitempty"` unknownFields protoimpl.UnknownFields - - StreetAddress string `protobuf:"bytes,1,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"` - City string `protobuf:"bytes,2,opt,name=city,proto3" json:"city,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - Country string `protobuf:"bytes,4,opt,name=country,proto3" json:"country,omitempty"` - ZipCode string `protobuf:"bytes,5,opt,name=zip_code,json=zipCode,proto3" json:"zip_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Address) Reset() { @@ -959,10 +942,7 @@ func (x *Address) GetZipCode() string { // Represents an amount of money with its currency type. type Money struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The 3-letter currency code defined in ISO 4217. CurrencyCode string `protobuf:"bytes,1,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` // The whole units of the amount. @@ -974,7 +954,9 @@ type Money struct { // If `units` is zero, `nanos` can be positive, zero, or negative. // If `units` is negative, `nanos` must be negative or zero. // For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000. - Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` + Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Money) Reset() { @@ -1029,12 +1011,11 @@ func (x *Money) GetNanos() int32 { } type GetSupportedCurrenciesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The 3-letter currency code defined in ISO 4217. CurrencyCodes []string `protobuf:"bytes,1,rep,name=currency_codes,json=currencyCodes,proto3" json:"currency_codes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetSupportedCurrenciesResponse) Reset() { @@ -1075,13 +1056,12 @@ func (x *GetSupportedCurrenciesResponse) GetCurrencyCodes() []string { } type CurrencyConversionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - From *Money `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + From *Money `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` // The 3-letter currency code defined in ISO 4217. - ToCode string `protobuf:"bytes,2,opt,name=to_code,json=toCode,proto3" json:"to_code,omitempty"` + ToCode string `protobuf:"bytes,2,opt,name=to_code,json=toCode,proto3" json:"to_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CurrencyConversionRequest) Reset() { @@ -1129,14 +1109,13 @@ func (x *CurrencyConversionRequest) GetToCode() string { } type CreditCardInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CreditCardNumber string `protobuf:"bytes,1,opt,name=credit_card_number,json=creditCardNumber,proto3" json:"credit_card_number,omitempty"` - CreditCardCvv int32 `protobuf:"varint,2,opt,name=credit_card_cvv,json=creditCardCvv,proto3" json:"credit_card_cvv,omitempty"` - CreditCardExpirationYear int32 `protobuf:"varint,3,opt,name=credit_card_expiration_year,json=creditCardExpirationYear,proto3" json:"credit_card_expiration_year,omitempty"` - CreditCardExpirationMonth int32 `protobuf:"varint,4,opt,name=credit_card_expiration_month,json=creditCardExpirationMonth,proto3" json:"credit_card_expiration_month,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CreditCardNumber string `protobuf:"bytes,1,opt,name=credit_card_number,json=creditCardNumber,proto3" json:"credit_card_number,omitempty"` + CreditCardCvv int32 `protobuf:"varint,2,opt,name=credit_card_cvv,json=creditCardCvv,proto3" json:"credit_card_cvv,omitempty"` + CreditCardExpirationYear int32 `protobuf:"varint,3,opt,name=credit_card_expiration_year,json=creditCardExpirationYear,proto3" json:"credit_card_expiration_year,omitempty"` + CreditCardExpirationMonth int32 `protobuf:"varint,4,opt,name=credit_card_expiration_month,json=creditCardExpirationMonth,proto3" json:"credit_card_expiration_month,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreditCardInfo) Reset() { @@ -1198,12 +1177,11 @@ func (x *CreditCardInfo) GetCreditCardExpirationMonth() int32 { } type ChargeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Amount *Money `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + CreditCard *CreditCardInfo `protobuf:"bytes,2,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` unknownFields protoimpl.UnknownFields - - Amount *Money `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` - CreditCard *CreditCardInfo `protobuf:"bytes,2,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChargeRequest) Reset() { @@ -1251,11 +1229,10 @@ func (x *ChargeRequest) GetCreditCard() *CreditCardInfo { } type ChargeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChargeResponse) Reset() { @@ -1296,12 +1273,11 @@ func (x *ChargeResponse) GetTransactionId() string { } type OrderItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Item *CartItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` + Cost *Money `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` unknownFields protoimpl.UnknownFields - - Item *CartItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` - Cost *Money `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` + sizeCache protoimpl.SizeCache } func (x *OrderItem) Reset() { @@ -1349,15 +1325,14 @@ func (x *OrderItem) GetCost() *Money { } type OrderResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - ShippingTrackingId string `protobuf:"bytes,2,opt,name=shipping_tracking_id,json=shippingTrackingId,proto3" json:"shipping_tracking_id,omitempty"` - ShippingCost *Money `protobuf:"bytes,3,opt,name=shipping_cost,json=shippingCost,proto3" json:"shipping_cost,omitempty"` - ShippingAddress *Address `protobuf:"bytes,4,opt,name=shipping_address,json=shippingAddress,proto3" json:"shipping_address,omitempty"` - Items []*OrderItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + ShippingTrackingId string `protobuf:"bytes,2,opt,name=shipping_tracking_id,json=shippingTrackingId,proto3" json:"shipping_tracking_id,omitempty"` + ShippingCost *Money `protobuf:"bytes,3,opt,name=shipping_cost,json=shippingCost,proto3" json:"shipping_cost,omitempty"` + ShippingAddress *Address `protobuf:"bytes,4,opt,name=shipping_address,json=shippingAddress,proto3" json:"shipping_address,omitempty"` + Items []*OrderItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *OrderResult) Reset() { @@ -1426,12 +1401,11 @@ func (x *OrderResult) GetItems() []*OrderItem { } type SendOrderConfirmationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Order *OrderResult `protobuf:"bytes,2,opt,name=order,proto3" json:"order,omitempty"` unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - Order *OrderResult `protobuf:"bytes,2,opt,name=order,proto3" json:"order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SendOrderConfirmationRequest) Reset() { @@ -1479,15 +1453,14 @@ func (x *SendOrderConfirmationRequest) GetOrder() *OrderResult { } type PlaceOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + UserCurrency string `protobuf:"bytes,2,opt,name=user_currency,json=userCurrency,proto3" json:"user_currency,omitempty"` + Address *Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` + CreditCard *CreditCardInfo `protobuf:"bytes,6,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - UserCurrency string `protobuf:"bytes,2,opt,name=user_currency,json=userCurrency,proto3" json:"user_currency,omitempty"` - Address *Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` - Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` - CreditCard *CreditCardInfo `protobuf:"bytes,6,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PlaceOrderRequest) Reset() { @@ -1556,11 +1529,10 @@ func (x *PlaceOrderRequest) GetCreditCard() *CreditCardInfo { } type PlaceOrderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Order *OrderResult `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"` unknownFields protoimpl.UnknownFields - - Order *OrderResult `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PlaceOrderResponse) Reset() { @@ -1601,12 +1573,11 @@ func (x *PlaceOrderResponse) GetOrder() *OrderResult { } type AdRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // List of important key words from the current page describing the context. - ContextKeys []string `protobuf:"bytes,1,rep,name=context_keys,json=contextKeys,proto3" json:"context_keys,omitempty"` + ContextKeys []string `protobuf:"bytes,1,rep,name=context_keys,json=contextKeys,proto3" json:"context_keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdRequest) Reset() { @@ -1647,11 +1618,10 @@ func (x *AdRequest) GetContextKeys() []string { } type AdResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Ads []*Ad `protobuf:"bytes,1,rep,name=ads,proto3" json:"ads,omitempty"` unknownFields protoimpl.UnknownFields - - Ads []*Ad `protobuf:"bytes,1,rep,name=ads,proto3" json:"ads,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdResponse) Reset() { @@ -1692,14 +1662,13 @@ func (x *AdResponse) GetAds() []*Ad { } type Ad struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // url to redirect to when an ad is clicked. RedirectUrl string `protobuf:"bytes,1,opt,name=redirect_url,json=redirectUrl,proto3" json:"redirect_url,omitempty"` // short advertisement text to display. - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Ad) Reset() { @@ -1747,13 +1716,12 @@ func (x *Ad) GetText() string { } type Flag struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Flag) Reset() { @@ -1808,11 +1776,10 @@ func (x *Flag) GetEnabled() bool { } type GetFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFlagRequest) Reset() { @@ -1853,11 +1820,10 @@ func (x *GetFlagRequest) GetName() string { } type GetFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` unknownFields protoimpl.UnknownFields - - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFlagResponse) Reset() { @@ -1898,13 +1864,12 @@ func (x *GetFlagResponse) GetFlag() *Flag { } type CreateFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateFlagRequest) Reset() { @@ -1959,11 +1924,10 @@ func (x *CreateFlagRequest) GetEnabled() bool { } type CreateFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` unknownFields protoimpl.UnknownFields - - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateFlagResponse) Reset() { @@ -2004,12 +1968,11 @@ func (x *CreateFlagResponse) GetFlag() *Flag { } type UpdateFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateFlagRequest) Reset() { @@ -2057,9 +2020,9 @@ func (x *UpdateFlagRequest) GetEnabled() bool { } type UpdateFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateFlagResponse) Reset() { @@ -2093,9 +2056,9 @@ func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { } type ListFlagsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListFlagsRequest) Reset() { @@ -2129,11 +2092,10 @@ func (*ListFlagsRequest) Descriptor() ([]byte, []int) { } type ListFlagsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` unknownFields protoimpl.UnknownFields - - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListFlagsResponse) Reset() { @@ -2174,11 +2136,10 @@ func (x *ListFlagsResponse) GetFlag() []*Flag { } type DeleteFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteFlagRequest) Reset() { @@ -2219,9 +2180,9 @@ func (x *DeleteFlagRequest) GetName() string { } type DeleteFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteFlagResponse) Reset() { diff --git a/src/checkoutservice/go.mod b/src/checkoutservice/go.mod index 18cda9f418..f796e55451 100644 --- a/src/checkoutservice/go.mod +++ b/src/checkoutservice/go.mod @@ -22,7 +22,7 @@ require ( go.opentelemetry.io/otel/trace v1.33.0 google.golang.org/grpc v1.69.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.35.2 + google.golang.org/protobuf v1.36.0 ) require ( diff --git a/src/checkoutservice/go.sum b/src/checkoutservice/go.sum index 2e9207367a..8559307563 100644 --- a/src/checkoutservice/go.sum +++ b/src/checkoutservice/go.sum @@ -265,8 +265,8 @@ google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI= google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= -google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= -google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= +google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/src/productcatalogservice/genproto/oteldemo/demo.pb.go b/src/productcatalogservice/genproto/oteldemo/demo.pb.go index 8cb45c9be8..3cc8230359 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.0 // protoc v4.24.4 // source: demo.proto @@ -35,12 +35,11 @@ const ( ) type CartItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` unknownFields protoimpl.UnknownFields - - ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CartItem) Reset() { @@ -88,12 +87,11 @@ func (x *CartItem) GetQuantity() int32 { } type AddItemRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Item *CartItem `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Item *CartItem `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddItemRequest) Reset() { @@ -141,11 +139,10 @@ func (x *AddItemRequest) GetItem() *CartItem { } type EmptyCartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EmptyCartRequest) Reset() { @@ -186,11 +183,10 @@ func (x *EmptyCartRequest) GetUserId() string { } type GetCartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetCartRequest) Reset() { @@ -231,12 +227,11 @@ func (x *GetCartRequest) GetUserId() string { } type Cart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Cart) Reset() { @@ -284,9 +279,9 @@ func (x *Cart) GetItems() []*CartItem { } type Empty struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Empty) Reset() { @@ -320,12 +315,11 @@ func (*Empty) Descriptor() ([]byte, []int) { } type ListRecommendationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + ProductIds []string `protobuf:"bytes,2,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ProductIds []string `protobuf:"bytes,2,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRecommendationsRequest) Reset() { @@ -373,11 +367,10 @@ func (x *ListRecommendationsRequest) GetProductIds() []string { } type ListRecommendationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ProductIds []string `protobuf:"bytes,1,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` unknownFields protoimpl.UnknownFields - - ProductIds []string `protobuf:"bytes,1,rep,name=product_ids,json=productIds,proto3" json:"product_ids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListRecommendationsResponse) Reset() { @@ -418,18 +411,17 @@ func (x *ListRecommendationsResponse) GetProductIds() []string { } type Product struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Picture string `protobuf:"bytes,4,opt,name=picture,proto3" json:"picture,omitempty"` - PriceUsd *Money `protobuf:"bytes,5,opt,name=price_usd,json=priceUsd,proto3" json:"price_usd,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Picture string `protobuf:"bytes,4,opt,name=picture,proto3" json:"picture,omitempty"` + PriceUsd *Money `protobuf:"bytes,5,opt,name=price_usd,json=priceUsd,proto3" json:"price_usd,omitempty"` // Categories such as "clothing" or "kitchen" that can be used to look up // other related products. - Categories []string `protobuf:"bytes,6,rep,name=categories,proto3" json:"categories,omitempty"` + Categories []string `protobuf:"bytes,6,rep,name=categories,proto3" json:"categories,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Product) Reset() { @@ -505,11 +497,10 @@ func (x *Product) GetCategories() []string { } type ListProductsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Products []*Product `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` unknownFields protoimpl.UnknownFields - - Products []*Product `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListProductsResponse) Reset() { @@ -550,11 +541,10 @@ func (x *ListProductsResponse) GetProducts() []*Product { } type GetProductRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetProductRequest) Reset() { @@ -595,11 +585,10 @@ func (x *GetProductRequest) GetId() string { } type SearchProductsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` unknownFields protoimpl.UnknownFields - - Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SearchProductsRequest) Reset() { @@ -640,11 +629,10 @@ func (x *SearchProductsRequest) GetQuery() string { } type SearchProductsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Results []*Product `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` unknownFields protoimpl.UnknownFields - - Results []*Product `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SearchProductsResponse) Reset() { @@ -685,12 +673,11 @@ func (x *SearchProductsResponse) GetResults() []*Product { } type GetQuoteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetQuoteRequest) Reset() { @@ -738,11 +725,10 @@ func (x *GetQuoteRequest) GetItems() []*CartItem { } type GetQuoteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CostUsd *Money `protobuf:"bytes,1,opt,name=cost_usd,json=costUsd,proto3" json:"cost_usd,omitempty"` unknownFields protoimpl.UnknownFields - - CostUsd *Money `protobuf:"bytes,1,opt,name=cost_usd,json=costUsd,proto3" json:"cost_usd,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetQuoteResponse) Reset() { @@ -783,12 +769,11 @@ func (x *GetQuoteResponse) GetCostUsd() *Money { } type ShipOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Items []*CartItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ShipOrderRequest) Reset() { @@ -836,11 +821,10 @@ func (x *ShipOrderRequest) GetItems() []*CartItem { } type ShipOrderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TrackingId string `protobuf:"bytes,1,opt,name=tracking_id,json=trackingId,proto3" json:"tracking_id,omitempty"` unknownFields protoimpl.UnknownFields - - TrackingId string `protobuf:"bytes,1,opt,name=tracking_id,json=trackingId,proto3" json:"tracking_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ShipOrderResponse) Reset() { @@ -881,15 +865,14 @@ func (x *ShipOrderResponse) GetTrackingId() string { } type Address struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StreetAddress string `protobuf:"bytes,1,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"` + City string `protobuf:"bytes,2,opt,name=city,proto3" json:"city,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Country string `protobuf:"bytes,4,opt,name=country,proto3" json:"country,omitempty"` + ZipCode string `protobuf:"bytes,5,opt,name=zip_code,json=zipCode,proto3" json:"zip_code,omitempty"` unknownFields protoimpl.UnknownFields - - StreetAddress string `protobuf:"bytes,1,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"` - City string `protobuf:"bytes,2,opt,name=city,proto3" json:"city,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - Country string `protobuf:"bytes,4,opt,name=country,proto3" json:"country,omitempty"` - ZipCode string `protobuf:"bytes,5,opt,name=zip_code,json=zipCode,proto3" json:"zip_code,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Address) Reset() { @@ -959,10 +942,7 @@ func (x *Address) GetZipCode() string { // Represents an amount of money with its currency type. type Money struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The 3-letter currency code defined in ISO 4217. CurrencyCode string `protobuf:"bytes,1,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` // The whole units of the amount. @@ -974,7 +954,9 @@ type Money struct { // If `units` is zero, `nanos` can be positive, zero, or negative. // If `units` is negative, `nanos` must be negative or zero. // For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000. - Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` + Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Money) Reset() { @@ -1029,12 +1011,11 @@ func (x *Money) GetNanos() int32 { } type GetSupportedCurrenciesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The 3-letter currency code defined in ISO 4217. CurrencyCodes []string `protobuf:"bytes,1,rep,name=currency_codes,json=currencyCodes,proto3" json:"currency_codes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetSupportedCurrenciesResponse) Reset() { @@ -1075,13 +1056,12 @@ func (x *GetSupportedCurrenciesResponse) GetCurrencyCodes() []string { } type CurrencyConversionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - From *Money `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + From *Money `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` // The 3-letter currency code defined in ISO 4217. - ToCode string `protobuf:"bytes,2,opt,name=to_code,json=toCode,proto3" json:"to_code,omitempty"` + ToCode string `protobuf:"bytes,2,opt,name=to_code,json=toCode,proto3" json:"to_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CurrencyConversionRequest) Reset() { @@ -1129,14 +1109,13 @@ func (x *CurrencyConversionRequest) GetToCode() string { } type CreditCardInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CreditCardNumber string `protobuf:"bytes,1,opt,name=credit_card_number,json=creditCardNumber,proto3" json:"credit_card_number,omitempty"` - CreditCardCvv int32 `protobuf:"varint,2,opt,name=credit_card_cvv,json=creditCardCvv,proto3" json:"credit_card_cvv,omitempty"` - CreditCardExpirationYear int32 `protobuf:"varint,3,opt,name=credit_card_expiration_year,json=creditCardExpirationYear,proto3" json:"credit_card_expiration_year,omitempty"` - CreditCardExpirationMonth int32 `protobuf:"varint,4,opt,name=credit_card_expiration_month,json=creditCardExpirationMonth,proto3" json:"credit_card_expiration_month,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CreditCardNumber string `protobuf:"bytes,1,opt,name=credit_card_number,json=creditCardNumber,proto3" json:"credit_card_number,omitempty"` + CreditCardCvv int32 `protobuf:"varint,2,opt,name=credit_card_cvv,json=creditCardCvv,proto3" json:"credit_card_cvv,omitempty"` + CreditCardExpirationYear int32 `protobuf:"varint,3,opt,name=credit_card_expiration_year,json=creditCardExpirationYear,proto3" json:"credit_card_expiration_year,omitempty"` + CreditCardExpirationMonth int32 `protobuf:"varint,4,opt,name=credit_card_expiration_month,json=creditCardExpirationMonth,proto3" json:"credit_card_expiration_month,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreditCardInfo) Reset() { @@ -1198,12 +1177,11 @@ func (x *CreditCardInfo) GetCreditCardExpirationMonth() int32 { } type ChargeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Amount *Money `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + CreditCard *CreditCardInfo `protobuf:"bytes,2,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` unknownFields protoimpl.UnknownFields - - Amount *Money `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` - CreditCard *CreditCardInfo `protobuf:"bytes,2,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChargeRequest) Reset() { @@ -1251,11 +1229,10 @@ func (x *ChargeRequest) GetCreditCard() *CreditCardInfo { } type ChargeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` unknownFields protoimpl.UnknownFields - - TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChargeResponse) Reset() { @@ -1296,12 +1273,11 @@ func (x *ChargeResponse) GetTransactionId() string { } type OrderItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Item *CartItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` + Cost *Money `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` unknownFields protoimpl.UnknownFields - - Item *CartItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"` - Cost *Money `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` + sizeCache protoimpl.SizeCache } func (x *OrderItem) Reset() { @@ -1349,15 +1325,14 @@ func (x *OrderItem) GetCost() *Money { } type OrderResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - ShippingTrackingId string `protobuf:"bytes,2,opt,name=shipping_tracking_id,json=shippingTrackingId,proto3" json:"shipping_tracking_id,omitempty"` - ShippingCost *Money `protobuf:"bytes,3,opt,name=shipping_cost,json=shippingCost,proto3" json:"shipping_cost,omitempty"` - ShippingAddress *Address `protobuf:"bytes,4,opt,name=shipping_address,json=shippingAddress,proto3" json:"shipping_address,omitempty"` - Items []*OrderItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + ShippingTrackingId string `protobuf:"bytes,2,opt,name=shipping_tracking_id,json=shippingTrackingId,proto3" json:"shipping_tracking_id,omitempty"` + ShippingCost *Money `protobuf:"bytes,3,opt,name=shipping_cost,json=shippingCost,proto3" json:"shipping_cost,omitempty"` + ShippingAddress *Address `protobuf:"bytes,4,opt,name=shipping_address,json=shippingAddress,proto3" json:"shipping_address,omitempty"` + Items []*OrderItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *OrderResult) Reset() { @@ -1426,12 +1401,11 @@ func (x *OrderResult) GetItems() []*OrderItem { } type SendOrderConfirmationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Order *OrderResult `protobuf:"bytes,2,opt,name=order,proto3" json:"order,omitempty"` unknownFields protoimpl.UnknownFields - - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - Order *OrderResult `protobuf:"bytes,2,opt,name=order,proto3" json:"order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SendOrderConfirmationRequest) Reset() { @@ -1479,15 +1453,14 @@ func (x *SendOrderConfirmationRequest) GetOrder() *OrderResult { } type PlaceOrderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + UserCurrency string `protobuf:"bytes,2,opt,name=user_currency,json=userCurrency,proto3" json:"user_currency,omitempty"` + Address *Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` + CreditCard *CreditCardInfo `protobuf:"bytes,6,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - UserCurrency string `protobuf:"bytes,2,opt,name=user_currency,json=userCurrency,proto3" json:"user_currency,omitempty"` - Address *Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` - Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` - CreditCard *CreditCardInfo `protobuf:"bytes,6,opt,name=credit_card,json=creditCard,proto3" json:"credit_card,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PlaceOrderRequest) Reset() { @@ -1556,11 +1529,10 @@ func (x *PlaceOrderRequest) GetCreditCard() *CreditCardInfo { } type PlaceOrderResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Order *OrderResult `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"` unknownFields protoimpl.UnknownFields - - Order *OrderResult `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PlaceOrderResponse) Reset() { @@ -1601,12 +1573,11 @@ func (x *PlaceOrderResponse) GetOrder() *OrderResult { } type AdRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // List of important key words from the current page describing the context. - ContextKeys []string `protobuf:"bytes,1,rep,name=context_keys,json=contextKeys,proto3" json:"context_keys,omitempty"` + ContextKeys []string `protobuf:"bytes,1,rep,name=context_keys,json=contextKeys,proto3" json:"context_keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdRequest) Reset() { @@ -1647,11 +1618,10 @@ func (x *AdRequest) GetContextKeys() []string { } type AdResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Ads []*Ad `protobuf:"bytes,1,rep,name=ads,proto3" json:"ads,omitempty"` unknownFields protoimpl.UnknownFields - - Ads []*Ad `protobuf:"bytes,1,rep,name=ads,proto3" json:"ads,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AdResponse) Reset() { @@ -1692,14 +1662,13 @@ func (x *AdResponse) GetAds() []*Ad { } type Ad struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // url to redirect to when an ad is clicked. RedirectUrl string `protobuf:"bytes,1,opt,name=redirect_url,json=redirectUrl,proto3" json:"redirect_url,omitempty"` // short advertisement text to display. - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Ad) Reset() { @@ -1747,13 +1716,12 @@ func (x *Ad) GetText() string { } type Flag struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Flag) Reset() { @@ -1808,11 +1776,10 @@ func (x *Flag) GetEnabled() bool { } type GetFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFlagRequest) Reset() { @@ -1853,11 +1820,10 @@ func (x *GetFlagRequest) GetName() string { } type GetFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` unknownFields protoimpl.UnknownFields - - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFlagResponse) Reset() { @@ -1898,13 +1864,12 @@ func (x *GetFlagResponse) GetFlag() *Flag { } type CreateFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateFlagRequest) Reset() { @@ -1959,11 +1924,10 @@ func (x *CreateFlagRequest) GetEnabled() bool { } type CreateFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` unknownFields protoimpl.UnknownFields - - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateFlagResponse) Reset() { @@ -2004,12 +1968,11 @@ func (x *CreateFlagResponse) GetFlag() *Flag { } type UpdateFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateFlagRequest) Reset() { @@ -2057,9 +2020,9 @@ func (x *UpdateFlagRequest) GetEnabled() bool { } type UpdateFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateFlagResponse) Reset() { @@ -2093,9 +2056,9 @@ func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { } type ListFlagsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListFlagsRequest) Reset() { @@ -2129,11 +2092,10 @@ func (*ListFlagsRequest) Descriptor() ([]byte, []int) { } type ListFlagsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` unknownFields protoimpl.UnknownFields - - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListFlagsResponse) Reset() { @@ -2174,11 +2136,10 @@ func (x *ListFlagsResponse) GetFlag() []*Flag { } type DeleteFlagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteFlagRequest) Reset() { @@ -2219,9 +2180,9 @@ func (x *DeleteFlagRequest) GetName() string { } type DeleteFlagResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteFlagResponse) Reset() { diff --git a/src/productcatalogservice/go.mod b/src/productcatalogservice/go.mod index 85e360d9f2..8a365a5ef8 100644 --- a/src/productcatalogservice/go.mod +++ b/src/productcatalogservice/go.mod @@ -19,7 +19,7 @@ require ( go.opentelemetry.io/otel/trace v1.33.0 google.golang.org/grpc v1.69.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.35.2 + google.golang.org/protobuf v1.36.0 ) require ( diff --git a/src/productcatalogservice/go.sum b/src/productcatalogservice/go.sum index f53c6146fc..6a9bd2031b 100644 --- a/src/productcatalogservice/go.sum +++ b/src/productcatalogservice/go.sum @@ -193,8 +193,8 @@ google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI= google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= -google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= -google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= +google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From 897bedaea4151d28d5927692aa41b233815ac504 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 14:21:58 +0100 Subject: [PATCH 05/24] build(deps): bump gradle/actions from 4.2.1 to 4.2.2 (#1849) Bumps [gradle/actions](https://github.com/gradle/actions) from 4.2.1 to 4.2.2. - [Release notes](https://github.com/gradle/actions/releases) - [Commits](https://github.com/gradle/actions/compare/v4.2.1...v4.2.2) --- updated-dependencies: - dependency-name: gradle/actions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index b0e6d12564..3f608ba7d8 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -15,4 +15,4 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: gradle/actions/wrapper-validation@v4.2.1 + - uses: gradle/actions/wrapper-validation@v4.2.2 From 5dbe83661c7aae9a6e431b8c91718ee3e07dc27c Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Wed, 18 Dec 2024 22:31:34 -0500 Subject: [PATCH 06/24] [quote] rename quoteservice to quote (#1838) * rename quoteservice to quote * rename quoteservice to quote --------- Co-authored-by: Juliano Costa --- .env | 6 +++--- .github/workflows/component-build-images.yml | 4 ++-- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 2 +- docker-compose.minimal.yml | 18 +++++++++--------- docker-compose.yml | 18 +++++++++--------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- .../dashboards/demo/demo-dashboard.json | 2 +- src/{quoteservice => quote}/.dockerignore | 8 ++++---- src/{quoteservice => quote}/.gitignore | 0 src/{quoteservice => quote}/Dockerfile | 6 +++--- src/{quoteservice => quote}/README.md | 10 +++++----- .../app/dependencies.php | 0 src/{quoteservice => quote}/app/routes.php | 0 src/{quoteservice => quote}/app/settings.php | 0 src/{quoteservice => quote}/composer.json | 2 +- src/{quoteservice => quote}/public/index.php | 2 +- .../src/Application/Settings/Settings.php | 0 .../Application/Settings/SettingsInterface.php | 0 src/shippingservice/README.md | 2 +- .../src/shipping_service/quote.rs | 4 ++-- 23 files changed, 48 insertions(+), 46 deletions(-) rename src/{quoteservice => quote}/.dockerignore (90%) rename src/{quoteservice => quote}/.gitignore (100%) rename src/{quoteservice => quote}/Dockerfile (86%) rename src/{quoteservice => quote}/README.md (76%) rename src/{quoteservice => quote}/app/dependencies.php (100%) rename src/{quoteservice => quote}/app/routes.php (100%) rename src/{quoteservice => quote}/app/settings.php (100%) rename src/{quoteservice => quote}/composer.json (95%) rename src/{quoteservice => quote}/public/index.php (98%) rename src/{quoteservice => quote}/src/Application/Settings/Settings.php (100%) rename src/{quoteservice => quote}/src/Application/Settings/SettingsInterface.php (100%) diff --git a/.env b/.env index 98a71cc3f5..4ae44bea79 100644 --- a/.env +++ b/.env @@ -112,9 +112,9 @@ PRODUCT_CATALOG_SERVICE_ADDR=productcatalogservice:${PRODUCT_CATALOG_SERVICE_POR PRODUCT_CATALOG_DOCKERFILE=./src/productcatalogservice/Dockerfile # Quote Service -QUOTE_SERVICE_PORT=8090 -QUOTE_SERVICE_ADDR=http://quoteservice:${QUOTE_SERVICE_PORT} -QUOTE_SERVICE_DOCKERFILE=./src/quoteservice/Dockerfile +QUOTE_PORT=8090 +QUOTE_ADDR=http://quote:${QUOTE_PORT} +QUOTE_DOCKERFILE=./src/quote/Dockerfile # Recommendation Service RECOMMENDATION_SERVICE_PORT=9001 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 7514267b83..8a6cc6fb2f 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -111,8 +111,8 @@ jobs: tag_suffix: productcatalogservice context: ./ setup-qemu: true - - file: ./src/quoteservice/Dockerfile - tag_suffix: quoteservice + - file: ./src/quote/Dockerfile + tag_suffix: quote context: ./ setup-qemu: true - file: ./src/recommendationservice/Dockerfile diff --git a/CHANGELOG.md b/CHANGELOG.md index 986502c12f..b3cf067591 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,8 @@ the release. ([#1830](https://github.com/open-telemetry/opentelemetry-demo/pull/1830)) * [grafana] Add Exemplars Dashboard ([#1836](https://github.com/open-telemetry/opentelemetry-demo/pull/1836)) +* [quote] rename quoteservice to quote + ([#1838](https://github.com/open-telemetry/opentelemetry-demo/pull/1838)) * [otel-collector] rename otelcol to otel-collector ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 7a9042fee9..981910d0e7 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -77,7 +77,7 @@ services: condition: service_started productcatalogservice: condition: service_started - quoteservice: + quote: condition: service_started recommendationservice: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 8d8c699dbb..d6419fd43b 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -227,7 +227,7 @@ services: condition: service_started productcatalogservice: condition: service_started - quoteservice: + quote: condition: service_started recommendationservice: condition: service_started @@ -407,27 +407,27 @@ services: logging: *logging # Quote service - quoteservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-quoteservice + quote: + image: ${IMAGE_NAME}:${DEMO_VERSION}-quote container_name: quote-service build: context: ./ - dockerfile: ${QUOTE_SERVICE_DOCKERFILE} + dockerfile: ${QUOTE_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-quoteservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-quote deploy: resources: limits: memory: 40M restart: unless-stopped ports: - - "${QUOTE_SERVICE_PORT}" + - "${QUOTE_PORT}" environment: - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_PHP_AUTOLOAD_ENABLED=true - - QUOTE_SERVICE_PORT + - QUOTE_PORT - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=quoteservice + - OTEL_SERVICE_NAME=quote - OTEL_PHP_INTERNAL_METRICS_ENABLED=true depends_on: otel-collector: @@ -485,7 +485,7 @@ services: - "${SHIPPING_SERVICE_PORT}" environment: - SHIPPING_SERVICE_PORT - - QUOTE_SERVICE_ADDR + - QUOTE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=shippingservice diff --git a/docker-compose.yml b/docker-compose.yml index 52d7b9b588..7d28f695ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -299,7 +299,7 @@ services: condition: service_started productcatalogservice: condition: service_started - quoteservice: + quote: condition: service_started recommendationservice: condition: service_started @@ -489,27 +489,27 @@ services: logging: *logging # Quote service - quoteservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-quoteservice + quote: + image: ${IMAGE_NAME}:${DEMO_VERSION}-quote container_name: quote-service build: context: ./ - dockerfile: ${QUOTE_SERVICE_DOCKERFILE} + dockerfile: ${QUOTE_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-quoteservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-quote deploy: resources: limits: memory: 40M restart: unless-stopped ports: - - "${QUOTE_SERVICE_PORT}" + - "${QUOTE_PORT}" environment: - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_PHP_AUTOLOAD_ENABLED=true - - QUOTE_SERVICE_PORT + - QUOTE_PORT - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=quoteservice + - OTEL_SERVICE_NAME=quote - OTEL_PHP_INTERNAL_METRICS_ENABLED=true depends_on: otel-collector: @@ -570,7 +570,7 @@ services: - "${SHIPPING_SERVICE_PORT}" environment: - SHIPPING_SERVICE_PORT - - QUOTE_SERVICE_ADDR + - QUOTE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=shippingservice diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index b90cab8413..ea72d2bc34 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -30,6 +30,6 @@ gen_proto_go checkoutservice #gen_proto_ts frontend #gen_proto_js paymentservice gen_proto_go productcatalogservice -#gen_proto_php quoteservice +#gen_proto_php quote gen_proto_python recommendationservice #gen_proto_rust shippingservice diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index a6e71ebb60..5390357915 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -74,6 +74,6 @@ gen_proto_go checkoutservice gen_proto_ts frontend gen_proto_js paymentservice gen_proto_go productcatalogservice -# gen_proto_php quoteservice +# gen_proto_php quote gen_proto_python recommendationservice gen_proto_rust shippingservice diff --git a/renovate.json5 b/renovate.json5 index e354f5c83f..3999739c76 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -83,8 +83,8 @@ "groupName": "prometheus", }, { - "matchFileNames": ["src/quoteservice/**"], - "groupName": "quoteservice", + "matchFileNames": ["src/quote/**"], + "groupName": "quote", }, { "matchFileNames": ["src/recommendationservice/**"], diff --git a/src/grafana/provisioning/dashboards/demo/demo-dashboard.json b/src/grafana/provisioning/dashboards/demo/demo-dashboard.json index bd0b37fba2..e32fc40cbb 100644 --- a/src/grafana/provisioning/dashboards/demo/demo-dashboard.json +++ b/src/grafana/provisioning/dashboards/demo/demo-dashboard.json @@ -1022,7 +1022,7 @@ "uid": "webstore-metrics" }, "editorMode": "code", - "expr": "rate(otel_trace_span_processor_spans{job=\"opentelemetry-demo/quoteservice\"}[2m])*120", + "expr": "rate(otel_trace_span_processor_spans{job=\"opentelemetry-demo/quote\"}[2m])*120", "interval": "2m", "legendFormat": "{{state}}", "range": true, diff --git a/src/quoteservice/.dockerignore b/src/quote/.dockerignore similarity index 90% rename from src/quoteservice/.dockerignore rename to src/quote/.dockerignore index 6a2aedc09f..98a3aae96b 100644 --- a/src/quoteservice/.dockerignore +++ b/src/quote/.dockerignore @@ -1,4 +1,4 @@ -.dockerignore -.idea -Dockerfile -vendor +.dockerignore +.idea +Dockerfile +vendor diff --git a/src/quoteservice/.gitignore b/src/quote/.gitignore similarity index 100% rename from src/quoteservice/.gitignore rename to src/quote/.gitignore diff --git a/src/quoteservice/Dockerfile b/src/quote/Dockerfile similarity index 86% rename from src/quoteservice/Dockerfile rename to src/quote/Dockerfile index f26f192b84..5495451ff7 100644 --- a/src/quoteservice/Dockerfile +++ b/src/quote/Dockerfile @@ -15,12 +15,12 @@ RUN chmod +x /usr/local/bin/install-php-extensions \ WORKDIR /var/www CMD ["php", "public/index.php"] USER www-data -EXPOSE ${QUOTE_SERVICE_PORT} +EXPOSE ${QUOTE_PORT} FROM composer:2.7 AS vendor WORKDIR /tmp/ -COPY ./src/quoteservice/composer.json . +COPY ./src/quote/composer.json . RUN composer install \ --ignore-platform-reqs \ @@ -32,4 +32,4 @@ RUN composer install \ FROM base AS final COPY --from=vendor /tmp/vendor/ ./vendor/ -COPY ./src/quoteservice/ /var/www +COPY ./src/quote/ /var/www diff --git a/src/quoteservice/README.md b/src/quote/README.md similarity index 76% rename from src/quoteservice/README.md rename to src/quote/README.md index e138442bd7..e1deaffee5 100644 --- a/src/quoteservice/README.md +++ b/src/quote/README.md @@ -11,7 +11,7 @@ To build the quote service, run the following from root directory of opentelemetry-demo ```sh -docker compose build quoteservice +docker compose build quote ``` ## Run the service @@ -19,7 +19,7 @@ docker compose build quoteservice Execute the below command to run the service. ```sh -docker compose up quoteservice +docker compose up quote ``` In order to get traffic into the service you have to deploy @@ -32,9 +32,9 @@ Please follow the root README to do so. To build and run the quote service locally: ```sh -docker build src/quoteservice --target base -t quoteservice -cd src/quoteservice -docker run --rm -it -v $(pwd):/var/www -e QUOTE_SERVICE_PORT=8999 -p "8999:8999" quoteservice +docker build src/quote --target base -t quote +cd src/quote +docker run --rm -it -v $(pwd):/var/www -e QUOTE_PORT=8999 -p "8999:8999" quote ``` Then, send some curl requests: diff --git a/src/quoteservice/app/dependencies.php b/src/quote/app/dependencies.php similarity index 100% rename from src/quoteservice/app/dependencies.php rename to src/quote/app/dependencies.php diff --git a/src/quoteservice/app/routes.php b/src/quote/app/routes.php similarity index 100% rename from src/quoteservice/app/routes.php rename to src/quote/app/routes.php diff --git a/src/quoteservice/app/settings.php b/src/quote/app/settings.php similarity index 100% rename from src/quoteservice/app/settings.php rename to src/quote/app/settings.php diff --git a/src/quoteservice/composer.json b/src/quote/composer.json similarity index 95% rename from src/quoteservice/composer.json rename to src/quote/composer.json index ad22802f27..689515431a 100644 --- a/src/quoteservice/composer.json +++ b/src/quote/composer.json @@ -1,5 +1,5 @@ { - "name": "openteletry-demo/quoteservice", + "name": "openteletry-demo/quote", "description": "Quote Service part of OpenTelemetry Demo", "license": "Apache-2.0", "require": { diff --git a/src/quoteservice/public/index.php b/src/quote/public/index.php similarity index 98% rename from src/quoteservice/public/index.php rename to src/quote/public/index.php index b13085342e..fd02e5b0c1 100644 --- a/src/quoteservice/public/index.php +++ b/src/quote/public/index.php @@ -87,7 +87,7 @@ return $response; }); -$address = '0.0.0.0:' . getenv('QUOTE_SERVICE_PORT'); +$address = '0.0.0.0:' . getenv('QUOTE_PORT'); $socket = new SocketServer($address); $server->listen($socket); diff --git a/src/quoteservice/src/Application/Settings/Settings.php b/src/quote/src/Application/Settings/Settings.php similarity index 100% rename from src/quoteservice/src/Application/Settings/Settings.php rename to src/quote/src/Application/Settings/Settings.php diff --git a/src/quoteservice/src/Application/Settings/SettingsInterface.php b/src/quote/src/Application/Settings/SettingsInterface.php similarity index 100% rename from src/quoteservice/src/Application/Settings/SettingsInterface.php rename to src/quote/src/Application/Settings/SettingsInterface.php diff --git a/src/shippingservice/README.md b/src/shippingservice/README.md index ccc6e983b6..fa49736038 100644 --- a/src/shippingservice/README.md +++ b/src/shippingservice/README.md @@ -1,6 +1,6 @@ # Shipping Service -The Shipping service queries `quoteservice` for price quote, provides tracking IDs, +The Shipping service queries `quote` for price quote, provides tracking IDs, and the impression of order fulfillment & shipping processes. ## Local diff --git a/src/shippingservice/src/shipping_service/quote.rs b/src/shippingservice/src/shipping_service/quote.rs index 2ffdb8378e..49ac21fac0 100644 --- a/src/shippingservice/src/shipping_service/quote.rs +++ b/src/shippingservice/src/shipping_service/quote.rs @@ -40,8 +40,8 @@ pub async fn create_quote_from_count(count: u32) -> Result async fn request_quote(count: u32) -> Result> { let quote_service_addr: String = format!( "{}{}", - env::var("QUOTE_SERVICE_ADDR") - .unwrap_or_else(|_| "http://quoteservice:8090".to_string()) + env::var("QUOTE_ADDR") + .unwrap_or_else(|_| "http://quote:8090".to_string()) .parse::() .expect("Invalid quote service address"), "/getquote" From d6efe7f00b7829ffd9d5b5a7a8a945ffac19d3ae Mon Sep 17 00:00:00 2001 From: Sozhan Natarajan Date: Thu, 19 Dec 2024 10:44:19 +0530 Subject: [PATCH 07/24] [ad] rename adService to ad (#1832) * [ad] rename adservice to ad * rename adservice to ad * chore: add line break - review findings * chore: add line break --------- Co-authored-by: Pierre Tessier Co-authored-by: Juliano Costa --- .env | 6 +- .github/component_owners.yml | 2 +- .github/workflows/component-build-images.yml | 4 +- CHANGELOG.md | 2 + CONTRIBUTING.md | 2 +- docker-compose-tests.yml | 4 +- docker-compose.minimal.yml | 20 +- docker-compose.yml | 20 +- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 +- src/{adservice => ad}/.java-version | 0 src/{adservice => ad}/Dockerfile | 12 +- src/{adservice => ad}/README.md | 8 +- src/{adservice => ad}/build.gradle | 8 +- .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 src/{adservice => ad}/gradlew | 0 src/{adservice => ad}/gradlew.bat | 185 +++++++++--------- src/{adservice => ad}/settings.gradle | 0 .../src/main/java/oteldemo/AdService.java | 22 +-- .../java/oteldemo/problempattern/CPULoad.java | 0 .../GarbageCollectionTrigger.java | 0 .../oteldemo/problempattern/MemoryUtils.java | 0 .../src/main/resources/log4j2.xml | 0 src/flagd/demo.flagd.json | 6 +- src/frontend/gateways/rpc/Ad.gateway.ts | 4 +- src/frontend/next.config.js | 4 +- test/tracetesting/adservice/get.yaml | 2 +- test/tracetesting/run.bash | 6 +- 30 files changed, 165 insertions(+), 160 deletions(-) rename src/{adservice => ad}/.java-version (100%) rename src/{adservice => ad}/Dockerfile (80%) rename src/{adservice => ad}/README.md (78%) rename src/{adservice => ad}/build.gradle (97%) rename src/{adservice => ad}/gradle/wrapper/gradle-wrapper.jar (100%) rename src/{adservice => ad}/gradle/wrapper/gradle-wrapper.properties (100%) rename src/{adservice => ad}/gradlew (100%) mode change 100755 => 100644 rename src/{adservice => ad}/gradlew.bat (96%) rename src/{adservice => ad}/settings.gradle (100%) rename src/{adservice => ad}/src/main/java/oteldemo/AdService.java (92%) rename src/{adservice => ad}/src/main/java/oteldemo/problempattern/CPULoad.java (100%) rename src/{adservice => ad}/src/main/java/oteldemo/problempattern/GarbageCollectionTrigger.java (100%) rename src/{adservice => ad}/src/main/java/oteldemo/problempattern/MemoryUtils.java (100%) rename src/{adservice => ad}/src/main/resources/log4j2.xml (100%) diff --git a/.env b/.env index 4ae44bea79..465d920a1c 100644 --- a/.env +++ b/.env @@ -49,9 +49,9 @@ OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=cumulative ACCOUNTING_DOCKERFILE=./src/accounting/Dockerfile # Ad Service -AD_SERVICE_PORT=9555 -AD_SERVICE_ADDR=adservice:${AD_SERVICE_PORT} -AD_SERVICE_DOCKERFILE=./src/adservice/Dockerfile +AD_PORT=9555 +AD_ADDR=ad:${AD_PORT} +AD_DOCKERFILE=./src/ad/Dockerfile # Cart Service CART_SERVICE_PORT=7070 diff --git a/.github/component_owners.yml b/.github/component_owners.yml index 615e801fa8..b96dd2f31a 100644 --- a/.github/component_owners.yml +++ b/.github/component_owners.yml @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 # this file is used by .github/workflows/assign-reviewers.yml components: - src/adservice: + src/ad: - jack-berg - mateuszrzeszutek - trask diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 8a6cc6fb2f..ce985308e1 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -55,8 +55,8 @@ jobs: tag_suffix: accounting context: ./ setup-qemu: true - - file: ./src/adservice/Dockerfile - tag_suffix: adservice + - file: ./src/ad/Dockerfile + tag_suffix: ad context: ./ setup-qemu: true - file: ./src/cartservice/src/Dockerfile diff --git a/CHANGELOG.md b/CHANGELOG.md index b3cf067591..608b7ac136 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,8 @@ the release. ([#1838](https://github.com/open-telemetry/opentelemetry-demo/pull/1838)) * [otel-collector] rename otelcol to otel-collector ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) +* [ad] rename adservice to ad + ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1832)) ## 1.12.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 96b8433949..31db3038e9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -73,7 +73,7 @@ cd opentelemetry-demo/ - Navigate to the Java Ad Service folder to install and update Gradle: ```shell -cd .\src\adservice\ +cd .\src\ad\ .\gradlew installDist .\gradlew wrapper --gradle-version 7.4.2 ``` diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 981910d0e7..1a4d7577c4 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -37,7 +37,7 @@ services: args: TRACETEST_IMAGE_VERSION: ${TRACETEST_IMAGE_VERSION} environment: - - AD_SERVICE_ADDR + - AD_ADDR - CART_SERVICE_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR @@ -59,7 +59,7 @@ services: # adding demo services as dependencies accounting: condition: service_started - adservice: + ad: condition: service_started cartservice: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index d6419fd43b..b9b73a7707 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -19,14 +19,14 @@ services: # ****************** # AdService - adservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-adservice - container_name: ad-service + ad: + image: ${IMAGE_NAME}:${DEMO_VERSION}-ad + container_name: ad build: context: ./ - dockerfile: ${AD_SERVICE_DOCKERFILE} + dockerfile: ${AD_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-adservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-ad args: OTEL_JAVA_AGENT_VERSION: ${OTEL_JAVA_AGENT_VERSION} deploy: @@ -35,15 +35,15 @@ services: memory: 300M restart: unless-stopped ports: - - "${AD_SERVICE_PORT}" + - "${AD_PORT}" environment: - - AD_SERVICE_PORT + - AD_PORT - FLAGD_HOST - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - OTEL_LOGS_EXPORTER=otlp - - OTEL_SERVICE_NAME=adservice + - OTEL_SERVICE_NAME=ad depends_on: otel-collector: condition: service_started @@ -199,7 +199,7 @@ services: environment: - PORT=${FRONTEND_PORT} - FRONTEND_ADDR - - AD_SERVICE_ADDR + - AD_ADDR - CART_SERVICE_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR @@ -217,7 +217,7 @@ services: - FLAGD_HOST - FLAGD_PORT depends_on: - adservice: + ad: condition: service_started cartservice: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index 7d28f695ff..cde7390471 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -45,14 +45,14 @@ services: logging: *logging # AdService - adservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-adservice - container_name: ad-service + ad: + image: ${IMAGE_NAME}:${DEMO_VERSION}-ad + container_name: ad build: context: ./ - dockerfile: ${AD_SERVICE_DOCKERFILE} + dockerfile: ${AD_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-adservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-ad args: OTEL_JAVA_AGENT_VERSION: ${OTEL_JAVA_AGENT_VERSION} deploy: @@ -61,16 +61,16 @@ services: memory: 300M restart: unless-stopped ports: - - "${AD_SERVICE_PORT}" + - "${AD_PORT}" environment: - - AD_SERVICE_PORT + - AD_PORT - FLAGD_HOST - FLAGD_PORT - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - OTEL_LOGS_EXPORTER=otlp - - OTEL_SERVICE_NAME=adservice + - OTEL_SERVICE_NAME=ad depends_on: otel-collector: condition: service_started @@ -271,7 +271,7 @@ services: environment: - PORT=${FRONTEND_PORT} - FRONTEND_ADDR - - AD_SERVICE_ADDR + - AD_ADDR - CART_SERVICE_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR @@ -289,7 +289,7 @@ services: - FLAGD_HOST - FLAGD_PORT depends_on: - adservice: + ad: condition: service_started cartservice: condition: service_started diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index ea72d2bc34..d75adb8aac 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -22,7 +22,7 @@ gen_proto_python() { } #gen_proto_dotnet accounting -#gen_proto_java adservice +#gen_proto_java ad #gen_proto_dotnet cartservice gen_proto_go checkoutservice #gen_proto_cpp currencyservice diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index 5390357915..bb4dc4e069 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -66,7 +66,7 @@ gen_proto_ts() { } gen_proto_dotnet accounting -# gen_proto_java adservice +# gen_proto_java ad gen_proto_dotnet cartservice gen_proto_go checkoutservice # gen_proto_cpp currencyservice diff --git a/renovate.json5 b/renovate.json5 index 3999739c76..2348ad4eef 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -19,8 +19,8 @@ "groupName": "accounting", }, { - "matchFileNames": ["src/adservice/**"], - "groupName": "adservice", + "matchFileNames": ["src/ad/**"], + "groupName": "ad", }, { "matchFileNames": ["src/cartservice/**"], diff --git a/src/adservice/.java-version b/src/ad/.java-version similarity index 100% rename from src/adservice/.java-version rename to src/ad/.java-version diff --git a/src/adservice/Dockerfile b/src/ad/Dockerfile similarity index 80% rename from src/adservice/Dockerfile rename to src/ad/Dockerfile index 36c6b207fb..1e8cd71d7a 100644 --- a/src/adservice/Dockerfile +++ b/src/ad/Dockerfile @@ -6,14 +6,16 @@ FROM --platform=${BUILDPLATFORM} eclipse-temurin:21-jdk AS builder WORKDIR /usr/src/app/ -COPY ./src/adservice/gradlew* ./src/adservice/settings.gradle* ./src/adservice/build.gradle ./ -COPY ./src/adservice/gradle ./gradle +COPY ./src/ad/gradlew* ./src/ad/settings.gradle* ./src/ad/build.gradle ./ +COPY ./src/ad/gradle ./gradle +RUN chmod +x ./gradlew RUN ./gradlew RUN ./gradlew downloadRepos -COPY ./src/adservice/ ./ +COPY ./src/ad/ ./ COPY ./pb/ ./proto +RUN chmod +x ./gradlew RUN ./gradlew installDist -PprotoSourceDir=./proto # ----------------------------------------------------------------------------- @@ -27,5 +29,5 @@ COPY --from=builder /usr/src/app/ ./ ADD --chmod=644 https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v$OTEL_JAVA_AGENT_VERSION/opentelemetry-javaagent.jar /usr/src/app/opentelemetry-javaagent.jar ENV JAVA_TOOL_OPTIONS=-javaagent:/usr/src/app/opentelemetry-javaagent.jar -EXPOSE ${AD_SERVICE_PORT} -ENTRYPOINT [ "./build/install/opentelemetry-demo-ad-service/bin/AdService" ] +EXPOSE ${AD_PORT} +ENTRYPOINT [ "./build/install/opentelemetry-demo-ad-service/bin/Ad" ] diff --git a/src/adservice/README.md b/src/ad/README.md similarity index 78% rename from src/adservice/README.md rename to src/ad/README.md index 6e94149f6d..e3865d16b9 100644 --- a/src/adservice/README.md +++ b/src/ad/README.md @@ -14,14 +14,14 @@ To build Ad Service, run: ``` It will create an executable script -`src/adservice/build/install/oteldemo/bin/AdService`. +`src/ad/build/install/oteldemo/bin/Ad`. To run the Ad Service: ```sh -export AD_SERVICE_PORT=8080 +export AD_PORT=8080 export FEATURE_FLAG_GRPC_SERVICE_ADDR=featureflagservice:50053 -./build/install/opentelemetry-demo-ad-service/bin/AdService +./build/install/opentelemetry-demo-ad-service/bin/Ad ``` ### Upgrading Gradle @@ -37,5 +37,5 @@ If you need to upgrade the version of gradle then run From the root of `opentelemetry-demo`, run: ```sh -docker build --file ./src/adservice/Dockerfile ./ +docker build --file ./src/ad/Dockerfile ./ ``` diff --git a/src/adservice/build.gradle b/src/ad/build.gradle similarity index 97% rename from src/adservice/build.gradle rename to src/ad/build.gradle index 3fe9cb7681..0af438a3d4 100644 --- a/src/adservice/build.gradle +++ b/src/ad/build.gradle @@ -13,7 +13,7 @@ repositories { } description = 'Ad Service' -group = "adservice" +group = "ad" version = "0.1.0-SNAPSHOT" def opentelemetryVersion = "1.40.0" @@ -129,14 +129,14 @@ task downloadRepos(type: Copy) { into offlineCompile } -task adService(type: CreateStartScripts) { +task ad(type: CreateStartScripts) { mainClass.set('oteldemo.AdService') - applicationName = 'AdService' + applicationName = 'Ad' outputDir = new File(project.buildDir, 'tmp') classpath = startScripts.classpath } applicationDistribution.into('bin') { - from(adService) + from(ad) fileMode = 0755 } diff --git a/src/adservice/gradle/wrapper/gradle-wrapper.jar b/src/ad/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from src/adservice/gradle/wrapper/gradle-wrapper.jar rename to src/ad/gradle/wrapper/gradle-wrapper.jar diff --git a/src/adservice/gradle/wrapper/gradle-wrapper.properties b/src/ad/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from src/adservice/gradle/wrapper/gradle-wrapper.properties rename to src/ad/gradle/wrapper/gradle-wrapper.properties diff --git a/src/adservice/gradlew b/src/ad/gradlew old mode 100755 new mode 100644 similarity index 100% rename from src/adservice/gradlew rename to src/ad/gradlew diff --git a/src/adservice/gradlew.bat b/src/ad/gradlew.bat similarity index 96% rename from src/adservice/gradlew.bat rename to src/ad/gradlew.bat index 6689b85bee..d45ec1e591 100644 --- a/src/adservice/gradlew.bat +++ b/src/ad/gradlew.bat @@ -1,92 +1,93 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega + diff --git a/src/adservice/settings.gradle b/src/ad/settings.gradle similarity index 100% rename from src/adservice/settings.gradle rename to src/ad/settings.gradle diff --git a/src/adservice/src/main/java/oteldemo/AdService.java b/src/ad/src/main/java/oteldemo/AdService.java similarity index 92% rename from src/adservice/src/main/java/oteldemo/AdService.java rename to src/ad/src/main/java/oteldemo/AdService.java index c55b663bf1..d7f2688e66 100644 --- a/src/adservice/src/main/java/oteldemo/AdService.java +++ b/src/ad/src/main/java/oteldemo/AdService.java @@ -59,8 +59,8 @@ public final class AdService { private HealthStatusManager healthMgr; private static final AdService service = new AdService(); - private static final Tracer tracer = GlobalOpenTelemetry.getTracer("adservice"); - private static final Meter meter = GlobalOpenTelemetry.getMeter("adservice"); + private static final Tracer tracer = GlobalOpenTelemetry.getTracer("ad"); + private static final Meter meter = GlobalOpenTelemetry.getMeter("ad"); private static final LongCounter adRequestsCounter = meter @@ -76,11 +76,11 @@ public final class AdService { private void start() throws IOException { int port = Integer.parseInt( - Optional.ofNullable(System.getenv("AD_SERVICE_PORT")) + Optional.ofNullable(System.getenv("AD_PORT")) .orElseThrow( () -> new IllegalStateException( - "environment vars: AD_SERVICE_PORT must not be null"))); + "environment vars: AD_PORT must not be null"))); healthMgr = new HealthStatusManager(); // Create a flagd instance with OpenTelemetry @@ -132,9 +132,9 @@ private enum AdResponseType { private static class AdServiceImpl extends oteldemo.AdServiceGrpc.AdServiceImplBase { - private static final String ADSERVICE_FAILURE = "adServiceFailure"; - private static final String ADSERVICE_MANUAL_GC_FEATURE_FLAG = "adServiceManualGc"; - private static final String ADSERVICE_HIGH_CPU_FEATURE_FLAG = "adServiceHighCpu"; + private static final String AD_FAILURE = "adFailure"; + private static final String AD_MANUAL_GC_FEATURE_FLAG = "adManualGc"; + private static final String AD_HIGH_CPU_FEATURE_FLAG = "adHighCpu"; private static final Client ffClient = OpenFeatureAPI.getInstance().getClient(); private AdServiceImpl() {} @@ -169,7 +169,7 @@ public void getAds(AdRequest req, StreamObserver responseObserver) { } CPULoad cpuload = CPULoad.getInstance(); - cpuload.execute(ffClient.getBooleanValue(ADSERVICE_HIGH_CPU_FEATURE_FLAG, false, evaluationContext)); + cpuload.execute(ffClient.getBooleanValue(AD_HIGH_CPU_FEATURE_FLAG, false, evaluationContext)); span.setAttribute("app.ads.contextKeys", req.getContextKeysList().toString()); span.setAttribute("app.ads.contextKeys.count", req.getContextKeysCount()); @@ -202,12 +202,12 @@ public void getAds(AdRequest req, StreamObserver responseObserver) { adRequestTypeKey, adRequestType.name(), adResponseTypeKey, adResponseType.name())); // Throw 1/10 of the time to simulate a failure when the feature flag is enabled - if (ffClient.getBooleanValue(ADSERVICE_FAILURE, false, evaluationContext) && random.nextInt(10) == 0) { + if (ffClient.getBooleanValue(AD_FAILURE, false, evaluationContext) && random.nextInt(10) == 0) { throw new StatusRuntimeException(Status.UNAVAILABLE); } - if (ffClient.getBooleanValue(ADSERVICE_MANUAL_GC_FEATURE_FLAG, false, evaluationContext)) { - logger.warn("Feature Flag " + ADSERVICE_MANUAL_GC_FEATURE_FLAG + " enabled, performing a manual gc now"); + if (ffClient.getBooleanValue(AD_MANUAL_GC_FEATURE_FLAG, false, evaluationContext)) { + logger.warn("Feature Flag " + AD_MANUAL_GC_FEATURE_FLAG + " enabled, performing a manual gc now"); GarbageCollectionTrigger gct = new GarbageCollectionTrigger(); gct.doExecute(); } diff --git a/src/adservice/src/main/java/oteldemo/problempattern/CPULoad.java b/src/ad/src/main/java/oteldemo/problempattern/CPULoad.java similarity index 100% rename from src/adservice/src/main/java/oteldemo/problempattern/CPULoad.java rename to src/ad/src/main/java/oteldemo/problempattern/CPULoad.java diff --git a/src/adservice/src/main/java/oteldemo/problempattern/GarbageCollectionTrigger.java b/src/ad/src/main/java/oteldemo/problempattern/GarbageCollectionTrigger.java similarity index 100% rename from src/adservice/src/main/java/oteldemo/problempattern/GarbageCollectionTrigger.java rename to src/ad/src/main/java/oteldemo/problempattern/GarbageCollectionTrigger.java diff --git a/src/adservice/src/main/java/oteldemo/problempattern/MemoryUtils.java b/src/ad/src/main/java/oteldemo/problempattern/MemoryUtils.java similarity index 100% rename from src/adservice/src/main/java/oteldemo/problempattern/MemoryUtils.java rename to src/ad/src/main/java/oteldemo/problempattern/MemoryUtils.java diff --git a/src/adservice/src/main/resources/log4j2.xml b/src/ad/src/main/resources/log4j2.xml similarity index 100% rename from src/adservice/src/main/resources/log4j2.xml rename to src/ad/src/main/resources/log4j2.xml diff --git a/src/flagd/demo.flagd.json b/src/flagd/demo.flagd.json index 6af1dd51a7..26b6b4bd0d 100644 --- a/src/flagd/demo.flagd.json +++ b/src/flagd/demo.flagd.json @@ -19,7 +19,7 @@ }, "defaultVariant": "off" }, - "adServiceManualGc": { + "adManualGc": { "description": "Triggers full manual garbage collections in the ad service", "state": "ENABLED", "variants": { @@ -28,7 +28,7 @@ }, "defaultVariant": "off" }, - "adServiceHighCpu": { + "adHighCpu": { "description": "Triggers high cpu load in the ad service", "state": "ENABLED", "variants": { @@ -37,7 +37,7 @@ }, "defaultVariant": "off" }, - "adServiceFailure": { + "adFailure": { "description": "Fail ad service", "state": "ENABLED", "variants": { diff --git a/src/frontend/gateways/rpc/Ad.gateway.ts b/src/frontend/gateways/rpc/Ad.gateway.ts index 517a291fc1..1fd72442c6 100644 --- a/src/frontend/gateways/rpc/Ad.gateway.ts +++ b/src/frontend/gateways/rpc/Ad.gateway.ts @@ -4,9 +4,9 @@ import { ChannelCredentials } from '@grpc/grpc-js'; import { AdResponse, AdServiceClient } from '../../protos/demo'; -const { AD_SERVICE_ADDR = '' } = process.env; +const { AD_ADDR = '' } = process.env; -const client = new AdServiceClient(AD_SERVICE_ADDR, ChannelCredentials.createInsecure()); +const client = new AdServiceClient(AD_ADDR, ChannelCredentials.createInsecure()); const AdGateway = () => ({ listAds(contextKeys: string[]) { diff --git a/src/frontend/next.config.js b/src/frontend/next.config.js index 047a9497a5..e7ee99bd0c 100755 --- a/src/frontend/next.config.js +++ b/src/frontend/next.config.js @@ -13,7 +13,7 @@ const myEnv = dotEnv.config({ dotenvExpand.expand(myEnv); const { - AD_SERVICE_ADDR = '', + AD_ADDR = '', CART_SERVICE_ADDR = '', CHECKOUT_SERVICE_ADDR = '', CURRENCY_SERVICE_ADDR = '', @@ -45,7 +45,7 @@ const nextConfig = { return config; }, env: { - AD_SERVICE_ADDR, + AD_ADDR, CART_SERVICE_ADDR, CHECKOUT_SERVICE_ADDR, CURRENCY_SERVICE_ADDR, diff --git a/test/tracetesting/adservice/get.yaml b/test/tracetesting/adservice/get.yaml index a5b710f457..65b0f07f30 100644 --- a/test/tracetesting/adservice/get.yaml +++ b/test/tracetesting/adservice/get.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:AD_SERVICE_ADDR} + address: ${var:AD_ADDR} method: oteldemo.AdService.GetAds request: |- { diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index 966a04572b..dbcd65421f 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("adservice" "cartservice" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shippingservice") +ALL_SERVICES=("ad" "cartservice" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shippingservice") ## Script variables # Will contain the list of services to test @@ -34,8 +34,8 @@ spec: id: tracetesting-vars name: tracetesting-vars values: - - key: AD_SERVICE_ADDR - value: $AD_SERVICE_ADDR + - key: AD_ADDR + value: $AD_ADDR - key: CART_SERVICE_ADDR value: $CART_SERVICE_ADDR - key: CHECKOUT_SERVICE_ADDR From a0897a62788655d8031c45f23814562d0e689b96 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Thu, 19 Dec 2024 05:07:12 -0500 Subject: [PATCH 08/24] [flagd-ui]: rename flagdui to flagd-ui (#1840) * rename flagdui to flagd-ui * rename flagdui to flagd-ui * Update CHANGELOG.md * Add line break * Rename ad test folder --------- Co-authored-by: Juliano Costa Co-authored-by: Juliano Costa --- .env | 2 +- .github/workflows/component-build-images.yml | 2 +- CHANGELOG.md | 6 ++++-- docker-compose.yml | 10 +++++----- src/flagd/demo.flagd.json | 10 +++++----- src/frontendproxy/envoy.tmpl.yaml | 6 +++--- test/tracetesting/{adservice => ad}/all.yaml | 0 test/tracetesting/{adservice => ad}/get.yaml | 0 8 files changed, 19 insertions(+), 17 deletions(-) rename test/tracetesting/{adservice => ad}/all.yaml (100%) rename test/tracetesting/{adservice => ad}/get.yaml (100%) diff --git a/.env b/.env index 465d920a1c..501ea59ac1 100644 --- a/.env +++ b/.env @@ -134,7 +134,7 @@ FLAGD_HOST=flagd FLAGD_PORT=8013 # Flagd UI -FLAGD_UI_HOST=flagdui +FLAGD_UI_HOST=flagd-ui FLAGD_UI_PORT=4000 FLAGD_UI_DOCKERFILE=./src/flagd-ui/Dockerfile diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index ce985308e1..811e9bd524 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -124,7 +124,7 @@ jobs: context: ./ setup-qemu: true - file: ./src/flagd-ui/Dockerfile - tag_suffix: flagdui + tag_suffix: flagd-ui context: ./ setup-qemu: true - file: ./test/tracetesting/Dockerfile diff --git a/CHANGELOG.md b/CHANGELOG.md index 608b7ac136..dbea49621c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,14 +32,16 @@ the release. ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1827)) * [cartservice] - Add Exemplars to Cart Service ([#1830](https://github.com/open-telemetry/opentelemetry-demo/pull/1830)) +* [ad] rename adservice to ad + ([#1832](https://github.com/open-telemetry/opentelemetry-demo/pull/1832)) * [grafana] Add Exemplars Dashboard ([#1836](https://github.com/open-telemetry/opentelemetry-demo/pull/1836)) * [quote] rename quoteservice to quote ([#1838](https://github.com/open-telemetry/opentelemetry-demo/pull/1838)) +* [flagd-ui] rename flagdui to flagd-ui + ([#1840](https://github.com/open-telemetry/opentelemetry-demo/pull/1840)) * [otel-collector] rename otelcol to otel-collector ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) -* [ad] rename adservice to ad - ([#1827](https://github.com/open-telemetry/opentelemetry-demo/pull/1832)) ## 1.12.0 diff --git a/docker-compose.yml b/docker-compose.yml index cde7390471..7d70f18b29 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -358,7 +358,7 @@ services: condition: service_started grafana: condition: service_started - flagdui: + flagd-ui: condition: service_started # Imageprovider @@ -609,9 +609,9 @@ services: *logging # Flagd UI for configuring the feature flag service - flagdui: - image: ${IMAGE_NAME}:${DEMO_VERSION}-flagdui - container_name: flagdui + flagd-ui: + image: ${IMAGE_NAME}:${DEMO_VERSION}-flagd-ui + container_name: flagd-ui build: context: ./ dockerfile: ${FLAGD_UI_DOCKERFILE} @@ -624,7 +624,7 @@ services: - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=flagdui + - OTEL_SERVICE_NAME=flagd-ui ports: - "${FLAGD_UI_PORT}" depends_on: diff --git a/src/flagd/demo.flagd.json b/src/flagd/demo.flagd.json index 26b6b4bd0d..3c55a93ef0 100644 --- a/src/flagd/demo.flagd.json +++ b/src/flagd/demo.flagd.json @@ -44,7 +44,7 @@ "on": true, "off": false }, - "defaultVariant": "off" + "defaultVariant": "on" }, "kafkaQueueProblems": { "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", @@ -68,13 +68,13 @@ "description": "Fail payment service charge requests n%", "state": "ENABLED", "variants": { - "100%": 1.00, + "100%": 1, "90%": 0.95, "75%": 0.75, - "50%": 0.50, + "50%": 0.5, "25%": 0.25, - "10%": 0.10, - "off": 0.00 + "10%": 0.1, + "off": 0 }, "defaultVariant": "off" }, diff --git a/src/frontendproxy/envoy.tmpl.yaml b/src/frontendproxy/envoy.tmpl.yaml index 559ad53f3b..9666396818 100644 --- a/src/frontendproxy/envoy.tmpl.yaml +++ b/src/frontendproxy/envoy.tmpl.yaml @@ -50,7 +50,7 @@ static_resources: - match: { prefix: "/flagservice/" } route: { cluster: flagservice, prefix_rewrite: "/", timeout: 0s } - match: { prefix: "/feature" } - route: { cluster: flagdui } + route: { cluster: flagd-ui } - match: { prefix: "/" } route: { cluster: frontend } http_filters: @@ -224,11 +224,11 @@ static_resources: socket_address: address: ${FLAGD_HOST} port_value: ${FLAGD_PORT} - - name: flagdui + - name: flagd-ui type: STRICT_DNS lb_policy: ROUND_ROBIN load_assignment: - cluster_name: flagdui + cluster_name: flagd-ui endpoints: - lb_endpoints: - endpoint: diff --git a/test/tracetesting/adservice/all.yaml b/test/tracetesting/ad/all.yaml similarity index 100% rename from test/tracetesting/adservice/all.yaml rename to test/tracetesting/ad/all.yaml diff --git a/test/tracetesting/adservice/get.yaml b/test/tracetesting/ad/get.yaml similarity index 100% rename from test/tracetesting/adservice/get.yaml rename to test/tracetesting/ad/get.yaml From 4f8ddef2ef31d7d0f16d01e8b722b0f3f62c96f7 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Thu, 19 Dec 2024 05:59:49 -0500 Subject: [PATCH 09/24] [cart]: rename cartservice to cart (#1839) * rename cartservice to cart * rename cartservice to cart * Update CHANGELOG.md * Rename cart test folder * typo --------- Co-authored-by: Juliano Costa Co-authored-by: Juliano Costa --- .env | 6 ++--- .github/workflows/component-build-images.yml | 4 ++-- .gitignore | 2 +- .licenserc.json | 4 ++-- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 4 ++-- docker-compose.minimal.yml | 24 +++++++++---------- docker-compose.yml | 24 +++++++++---------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- src/{cartservice => cart}/NuGet.config | 0 src/{cartservice => cart}/README.md | 2 +- .../cartservice.sln => cart/cart.sln} | 4 ++-- src/{cartservice => cart}/src/.dockerignore | 0 src/{cartservice => cart}/src/Dockerfile | 12 +++++----- src/{cartservice => cart}/src/Program.cs | 4 ++-- .../src/appsettings.json | 0 .../src/cart.csproj} | 0 .../src/cartstore/ICartStore.cs | 2 +- .../src/cartstore/ValkeyCartStore.cs | 2 +- .../src/services/CartService.cs | 6 ++--- .../tests/CartServiceTests.cs | 2 +- .../tests/cart.tests.csproj} | 2 +- src/checkoutservice/main.go | 2 +- src/flagd/demo.flagd.json | 2 +- src/frontend/gateways/rpc/Cart.gateway.ts | 4 ++-- src/frontend/next.config.js | 4 ++-- .../add-item-to-cart.yaml | 2 +- .../{cartservice => cart}/all.yaml | 0 .../check-if-cart-is-empty.yaml | 2 +- .../check-if-cart-is-populated.yaml | 2 +- .../{cartservice => cart}/empty-cart.yaml | 2 +- test/tracetesting/run.bash | 6 ++--- 34 files changed, 71 insertions(+), 69 deletions(-) rename src/{cartservice => cart}/NuGet.config (100%) rename src/{cartservice => cart}/README.md (86%) rename src/{cartservice/cartservice.sln => cart/cart.sln} (89%) rename src/{cartservice => cart}/src/.dockerignore (100%) rename src/{cartservice => cart}/src/Dockerfile (79%) rename src/{cartservice => cart}/src/Program.cs (98%) rename src/{cartservice => cart}/src/appsettings.json (100%) rename src/{cartservice/src/cartservice.csproj => cart/src/cart.csproj} (100%) rename src/{cartservice => cart}/src/cartstore/ICartStore.cs (91%) rename src/{cartservice => cart}/src/cartstore/ValkeyCartStore.cs (99%) rename src/{cartservice => cart}/src/services/CartService.cs (97%) rename src/{cartservice => cart}/tests/CartServiceTests.cs (99%) rename src/{cartservice/tests/cartservice.tests.csproj => cart/tests/cart.tests.csproj} (92%) rename test/tracetesting/{cartservice => cart}/add-item-to-cart.yaml (96%) rename test/tracetesting/{cartservice => cart}/all.yaml (100%) rename test/tracetesting/{cartservice => cart}/check-if-cart-is-empty.yaml (95%) rename test/tracetesting/{cartservice => cart}/check-if-cart-is-populated.yaml (95%) rename test/tracetesting/{cartservice => cart}/empty-cart.yaml (95%) diff --git a/.env b/.env index 501ea59ac1..02d6da5e4b 100644 --- a/.env +++ b/.env @@ -54,9 +54,9 @@ AD_ADDR=ad:${AD_PORT} AD_DOCKERFILE=./src/ad/Dockerfile # Cart Service -CART_SERVICE_PORT=7070 -CART_SERVICE_ADDR=cartservice:${CART_SERVICE_PORT} -CART_SERVICE_DOCKERFILE=./src/cartservice/src/Dockerfile +CART_PORT=7070 +CART_ADDR=cart:${CART_PORT} +CART_DOCKERFILE=./src/cart/src/Dockerfile # Checkout Service CHECKOUT_SERVICE_PORT=5050 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 811e9bd524..f1733c1ee8 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -59,8 +59,8 @@ jobs: tag_suffix: ad context: ./ setup-qemu: true - - file: ./src/cartservice/src/Dockerfile - tag_suffix: cartservice + - file: ./src/cart/src/Dockerfile + tag_suffix: cart context: ./ setup-qemu: false - file: ./src/checkoutservice/Dockerfile diff --git a/.gitignore b/.gitignore index 11243be1e7..d63384d14e 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,7 @@ test/tracetesting/tracetesting-vars.yaml # Ignore copied/generated protobuf files /src/accounting/src/protos/ -/src/cartservice/src/protos/ +/src/cart/src/protos/ /src/featureflagservice/proto/ /src/featureflagservice/src/ffs_demo_pb.erl /src/featureflagservice/src/ffs_service_*.erl diff --git a/.licenserc.json b/.licenserc.json index 410195e9e1..fe6d6fa34f 100644 --- a/.licenserc.json +++ b/.licenserc.json @@ -39,8 +39,8 @@ "ignore": [ "node_modules/", "/src/accounting/src/protos/", - "src/cartservice/src/obj/", - "src/cartservice/tests/obj/", + "src/cart/src/obj/", + "src/cart/tests/obj/", "src/checkoutservice/genproto/", "src/featureflagservice/assets/vendor/", "src/featureflagservice/priv/", diff --git a/CHANGELOG.md b/CHANGELOG.md index dbea49621c..fbaefcb1d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,8 @@ the release. ([#1840](https://github.com/open-telemetry/opentelemetry-demo/pull/1840)) * [otel-collector] rename otelcol to otel-collector ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) +* [cart] rename cartservice to cart + ([#1839](https://github.com/open-telemetry/opentelemetry-demo/pull/1839)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 1a4d7577c4..6d388d46c2 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -38,7 +38,7 @@ services: TRACETEST_IMAGE_VERSION: ${TRACETEST_IMAGE_VERSION} environment: - AD_ADDR - - CART_SERVICE_ADDR + - CART_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR - EMAIL_SERVICE_ADDR @@ -61,7 +61,7 @@ services: condition: service_started ad: condition: service_started - cartservice: + cart: condition: service_started checkoutservice: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index b9b73a7707..71b66a05e4 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -50,29 +50,29 @@ services: logging: *logging # Cart service - cartservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-cartservice + cart: + image: ${IMAGE_NAME}:${DEMO_VERSION}-cart container_name: cart-service build: context: ./ - dockerfile: ${CART_SERVICE_DOCKERFILE} + dockerfile: ${CART_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-cartservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-cart deploy: resources: limits: memory: 160M restart: unless-stopped ports: - - "${CART_SERVICE_PORT}" + - "${CART_PORT}" environment: - - CART_SERVICE_PORT + - CART_PORT - FLAGD_HOST - VALKEY_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=cartservice - - ASPNETCORE_URLS=http://*:${CART_SERVICE_PORT} + - OTEL_SERVICE_NAME=cart + - ASPNETCORE_URLS=http://*:${CART_PORT} depends_on: valkey-cart: condition: service_started @@ -98,7 +98,7 @@ services: - "${CHECKOUT_SERVICE_PORT}" environment: - CHECKOUT_SERVICE_PORT - - CART_SERVICE_ADDR + - CART_ADDR - CURRENCY_SERVICE_ADDR - EMAIL_SERVICE_ADDR - FLAGD_HOST @@ -110,7 +110,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=checkoutservice depends_on: - cartservice: + cart: condition: service_started currencyservice: condition: service_started @@ -200,7 +200,7 @@ services: - PORT=${FRONTEND_PORT} - FRONTEND_ADDR - AD_ADDR - - CART_SERVICE_ADDR + - CART_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR @@ -219,7 +219,7 @@ services: depends_on: ad: condition: service_started - cartservice: + cart: condition: service_started checkoutservice: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index 7d70f18b29..3bc8cde7ed 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,30 +79,30 @@ services: logging: *logging # Cart service - cartservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-cartservice + cart: + image: ${IMAGE_NAME}:${DEMO_VERSION}-cart container_name: cart-service build: context: ./ - dockerfile: ${CART_SERVICE_DOCKERFILE} + dockerfile: ${CART_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-cartservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-cart deploy: resources: limits: memory: 160M restart: unless-stopped ports: - - "${CART_SERVICE_PORT}" + - "${CART_PORT}" environment: - - CART_SERVICE_PORT + - CART_PORT - FLAGD_HOST - FLAGD_PORT - VALKEY_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=cartservice - - ASPNETCORE_URLS=http://*:${CART_SERVICE_PORT} + - OTEL_SERVICE_NAME=cart + - ASPNETCORE_URLS=http://*:${CART_PORT} depends_on: valkey-cart: condition: service_started @@ -132,7 +132,7 @@ services: - FLAGD_HOST - FLAGD_PORT - CHECKOUT_SERVICE_PORT - - CART_SERVICE_ADDR + - CART_ADDR - CURRENCY_SERVICE_ADDR - EMAIL_SERVICE_ADDR - PAYMENT_SERVICE_ADDR @@ -144,7 +144,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=checkoutservice depends_on: - cartservice: + cart: condition: service_started currencyservice: condition: service_started @@ -272,7 +272,7 @@ services: - PORT=${FRONTEND_PORT} - FRONTEND_ADDR - AD_ADDR - - CART_SERVICE_ADDR + - CART_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR @@ -291,7 +291,7 @@ services: depends_on: ad: condition: service_started - cartservice: + cart: condition: service_started checkoutservice: condition: service_started diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index d75adb8aac..c7b7842418 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -23,7 +23,7 @@ gen_proto_python() { #gen_proto_dotnet accounting #gen_proto_java ad -#gen_proto_dotnet cartservice +#gen_proto_dotnet cart gen_proto_go checkoutservice #gen_proto_cpp currencyservice #gen_proto_ruby emailservice diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index bb4dc4e069..cd456f40c5 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -67,7 +67,7 @@ gen_proto_ts() { gen_proto_dotnet accounting # gen_proto_java ad -gen_proto_dotnet cartservice +gen_proto_dotnet cart gen_proto_go checkoutservice # gen_proto_cpp currencyservice # gen_proto_ruby emailservice diff --git a/renovate.json5 b/renovate.json5 index 2348ad4eef..ba6eaeee8e 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -23,8 +23,8 @@ "groupName": "ad", }, { - "matchFileNames": ["src/cartservice/**"], - "groupName": "cartservice", + "matchFileNames": ["src/cart/**"], + "groupName": "cart", }, { "matchFileNames": ["src/checkoutservice/**"], diff --git a/src/cartservice/NuGet.config b/src/cart/NuGet.config similarity index 100% rename from src/cartservice/NuGet.config rename to src/cart/NuGet.config diff --git a/src/cartservice/README.md b/src/cart/README.md similarity index 86% rename from src/cartservice/README.md rename to src/cart/README.md index fbc6fbc1ee..f2b2db6484 100644 --- a/src/cartservice/README.md +++ b/src/cart/README.md @@ -11,5 +11,5 @@ Run `dotnet restore` and `dotnet build`. From the root directory of this repository, run: ```sh -docker compose build cartservice +docker compose build cart ``` diff --git a/src/cartservice/cartservice.sln b/src/cart/cart.sln similarity index 89% rename from src/cartservice/cartservice.sln rename to src/cart/cart.sln index 8d32082529..6fedf6359f 100644 --- a/src/cartservice/cartservice.sln +++ b/src/cart/cart.sln @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26124.0 MinimumVisualStudioVersion = 15.0.26124.0 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cartservice", "src\cartservice.csproj", "{2348C29F-E8D3-4955-916D-D609CBC97FCB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cart", "src\cart.csproj", "{2348C29F-E8D3-4955-916D-D609CBC97FCB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cartservice.tests", "tests\cartservice.tests.csproj", "{59825342-CE64-4AFA-8744-781692C0811B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cart.tests", "tests\cart.tests.csproj", "{59825342-CE64-4AFA-8744-781692C0811B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/cartservice/src/.dockerignore b/src/cart/src/.dockerignore similarity index 100% rename from src/cartservice/src/.dockerignore rename to src/cart/src/.dockerignore diff --git a/src/cartservice/src/Dockerfile b/src/cart/src/Dockerfile similarity index 79% rename from src/cartservice/src/Dockerfile rename to src/cart/src/Dockerfile index bf9ebcac19..9e4df98450 100644 --- a/src/cartservice/src/Dockerfile +++ b/src/cart/src/Dockerfile @@ -20,12 +20,12 @@ ARG TARGETARCH WORKDIR /usr/src/app/ -COPY ./src/cartservice/ ./ +COPY ./src/cart/ ./ COPY ./pb/ ./pb/ -RUN dotnet restore ./src/cartservice.csproj -r linux-musl-$TARGETARCH +RUN dotnet restore ./src/cart.csproj -r linux-musl-$TARGETARCH -RUN dotnet publish ./src/cartservice.csproj -r linux-musl-$TARGETARCH --no-restore -o /cartservice +RUN dotnet publish ./src/cart.csproj -r linux-musl-$TARGETARCH --no-restore -o /cart # ----------------------------------------------------------------------------- @@ -33,9 +33,9 @@ RUN dotnet publish ./src/cartservice.csproj -r linux-musl-$TARGETARCH --no-resto FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-alpine3.20 WORKDIR /usr/src/app/ -COPY --from=builder /cartservice/ ./ +COPY --from=builder /cart/ ./ ENV DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE=false -EXPOSE ${CART_SERVICE_PORT} -ENTRYPOINT [ "./cartservice" ] +EXPOSE ${CART_PORT} +ENTRYPOINT [ "./cart" ] diff --git a/src/cartservice/src/Program.cs b/src/cart/src/Program.cs similarity index 98% rename from src/cartservice/src/Program.cs rename to src/cart/src/Program.cs index 6c52229ce4..365c7db35c 100644 --- a/src/cartservice/src/Program.cs +++ b/src/cart/src/Program.cs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 using System; -using cartservice.cartstore; -using cartservice.services; +using cart.cartstore; +using cart.services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; diff --git a/src/cartservice/src/appsettings.json b/src/cart/src/appsettings.json similarity index 100% rename from src/cartservice/src/appsettings.json rename to src/cart/src/appsettings.json diff --git a/src/cartservice/src/cartservice.csproj b/src/cart/src/cart.csproj similarity index 100% rename from src/cartservice/src/cartservice.csproj rename to src/cart/src/cart.csproj diff --git a/src/cartservice/src/cartstore/ICartStore.cs b/src/cart/src/cartstore/ICartStore.cs similarity index 91% rename from src/cartservice/src/cartstore/ICartStore.cs rename to src/cart/src/cartstore/ICartStore.cs index fe85b175de..80e249e5d6 100644 --- a/src/cartservice/src/cartstore/ICartStore.cs +++ b/src/cart/src/cartstore/ICartStore.cs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 using System.Threading.Tasks; -namespace cartservice.cartstore; +namespace cart.cartstore; public interface ICartStore { diff --git a/src/cartservice/src/cartstore/ValkeyCartStore.cs b/src/cart/src/cartstore/ValkeyCartStore.cs similarity index 99% rename from src/cartservice/src/cartstore/ValkeyCartStore.cs rename to src/cart/src/cartstore/ValkeyCartStore.cs index 1a16dcc6c0..a486839ee8 100644 --- a/src/cartservice/src/cartstore/ValkeyCartStore.cs +++ b/src/cart/src/cartstore/ValkeyCartStore.cs @@ -10,7 +10,7 @@ using System.Diagnostics.Metrics; using System.Diagnostics; -namespace cartservice.cartstore; +namespace cart.cartstore; public class ValkeyCartStore : ICartStore { diff --git a/src/cartservice/src/services/CartService.cs b/src/cart/src/services/CartService.cs similarity index 97% rename from src/cartservice/src/services/CartService.cs rename to src/cart/src/services/CartService.cs index 093b3bda2d..5578f45fff 100644 --- a/src/cartservice/src/services/CartService.cs +++ b/src/cart/src/services/CartService.cs @@ -4,11 +4,11 @@ using System.Threading.Tasks; using System; using Grpc.Core; -using cartservice.cartstore; +using cart.cartstore; using OpenFeature; using Oteldemo; -namespace cartservice.services; +namespace cart.services; public class CartService : Oteldemo.CartService.CartServiceBase { @@ -80,7 +80,7 @@ public override async Task EmptyCart(EmptyCartRequest request, ServerCall try { - if (await _featureFlagHelper.GetBooleanValueAsync("cartServiceFailure", false)) + if (await _featureFlagHelper.GetBooleanValueAsync("cartFailure", false)) { await _badCartStore.EmptyCartAsync(request.UserId); } diff --git a/src/cartservice/tests/CartServiceTests.cs b/src/cart/tests/CartServiceTests.cs similarity index 99% rename from src/cartservice/tests/CartServiceTests.cs rename to src/cart/tests/CartServiceTests.cs index 372b10cc41..45173d1432 100644 --- a/src/cartservice/tests/CartServiceTests.cs +++ b/src/cart/tests/CartServiceTests.cs @@ -9,7 +9,7 @@ using Xunit; using static Oteldemo.CartService; -namespace cartservice.tests; +namespace cart.tests; public class CartServiceTests { diff --git a/src/cartservice/tests/cartservice.tests.csproj b/src/cart/tests/cart.tests.csproj similarity index 92% rename from src/cartservice/tests/cartservice.tests.csproj rename to src/cart/tests/cart.tests.csproj index fd079fc30f..c7ef905f72 100644 --- a/src/cartservice/tests/cartservice.tests.csproj +++ b/src/cart/tests/cart.tests.csproj @@ -16,6 +16,6 @@ - + diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index c67251aaab..3258976320 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -177,7 +177,7 @@ func main() { svc.productCatalogSvcClient = pb.NewProductCatalogServiceClient(c) defer c.Close() - mustMapEnv(&svc.cartSvcAddr, "CART_SERVICE_ADDR") + mustMapEnv(&svc.cartSvcAddr, "CART_ADDR") c = mustCreateClient(svc.cartSvcAddr) svc.cartSvcClient = pb.NewCartServiceClient(c) defer c.Close() diff --git a/src/flagd/demo.flagd.json b/src/flagd/demo.flagd.json index 3c55a93ef0..452e334418 100644 --- a/src/flagd/demo.flagd.json +++ b/src/flagd/demo.flagd.json @@ -55,7 +55,7 @@ }, "defaultVariant": "off" }, - "cartServiceFailure": { + "cartFailure": { "description": "Fail cart service", "state": "ENABLED", "variants": { diff --git a/src/frontend/gateways/rpc/Cart.gateway.ts b/src/frontend/gateways/rpc/Cart.gateway.ts index ba025e609e..25dfc87a41 100644 --- a/src/frontend/gateways/rpc/Cart.gateway.ts +++ b/src/frontend/gateways/rpc/Cart.gateway.ts @@ -4,9 +4,9 @@ import { ChannelCredentials } from '@grpc/grpc-js'; import { Cart, CartItem, CartServiceClient, Empty } from '../../protos/demo'; -const { CART_SERVICE_ADDR = '' } = process.env; +const { CART_ADDR = '' } = process.env; -const client = new CartServiceClient(CART_SERVICE_ADDR, ChannelCredentials.createInsecure()); +const client = new CartServiceClient(CART_ADDR, ChannelCredentials.createInsecure()); const CartGateway = () => ({ getCart(userId: string) { diff --git a/src/frontend/next.config.js b/src/frontend/next.config.js index e7ee99bd0c..e81a2ebc80 100755 --- a/src/frontend/next.config.js +++ b/src/frontend/next.config.js @@ -14,7 +14,7 @@ dotenvExpand.expand(myEnv); const { AD_ADDR = '', - CART_SERVICE_ADDR = '', + CART_ADDR = '', CHECKOUT_SERVICE_ADDR = '', CURRENCY_SERVICE_ADDR = '', PRODUCT_CATALOG_SERVICE_ADDR = '', @@ -46,7 +46,7 @@ const nextConfig = { }, env: { AD_ADDR, - CART_SERVICE_ADDR, + CART_ADDR, CHECKOUT_SERVICE_ADDR, CURRENCY_SERVICE_ADDR, PRODUCT_CATALOG_SERVICE_ADDR, diff --git a/test/tracetesting/cartservice/add-item-to-cart.yaml b/test/tracetesting/cart/add-item-to-cart.yaml similarity index 96% rename from test/tracetesting/cartservice/add-item-to-cart.yaml rename to test/tracetesting/cart/add-item-to-cart.yaml index 61af56c9f6..c42b1f21df 100644 --- a/test/tracetesting/cartservice/add-item-to-cart.yaml +++ b/test/tracetesting/cart/add-item-to-cart.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:CART_SERVICE_ADDR} + address: ${var:CART_ADDR} method: oteldemo.CartService.AddItem request: |- { diff --git a/test/tracetesting/cartservice/all.yaml b/test/tracetesting/cart/all.yaml similarity index 100% rename from test/tracetesting/cartservice/all.yaml rename to test/tracetesting/cart/all.yaml diff --git a/test/tracetesting/cartservice/check-if-cart-is-empty.yaml b/test/tracetesting/cart/check-if-cart-is-empty.yaml similarity index 95% rename from test/tracetesting/cartservice/check-if-cart-is-empty.yaml rename to test/tracetesting/cart/check-if-cart-is-empty.yaml index bb3977b084..de9f409b5d 100644 --- a/test/tracetesting/cartservice/check-if-cart-is-empty.yaml +++ b/test/tracetesting/cart/check-if-cart-is-empty.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:CART_SERVICE_ADDR} + address: ${var:CART_ADDR} method: oteldemo.CartService.GetCart request: |- { diff --git a/test/tracetesting/cartservice/check-if-cart-is-populated.yaml b/test/tracetesting/cart/check-if-cart-is-populated.yaml similarity index 95% rename from test/tracetesting/cartservice/check-if-cart-is-populated.yaml rename to test/tracetesting/cart/check-if-cart-is-populated.yaml index 3e1fad6790..db753c1e33 100644 --- a/test/tracetesting/cartservice/check-if-cart-is-populated.yaml +++ b/test/tracetesting/cart/check-if-cart-is-populated.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:CART_SERVICE_ADDR} + address: ${var:CART_ADDR} method: oteldemo.CartService.GetCart request: |- { diff --git a/test/tracetesting/cartservice/empty-cart.yaml b/test/tracetesting/cart/empty-cart.yaml similarity index 95% rename from test/tracetesting/cartservice/empty-cart.yaml rename to test/tracetesting/cart/empty-cart.yaml index ddf4d63208..bc97074858 100644 --- a/test/tracetesting/cartservice/empty-cart.yaml +++ b/test/tracetesting/cart/empty-cart.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:CART_SERVICE_ADDR} + address: ${var:CART_ADDR} method: oteldemo.CartService.EmptyCart request: |- { diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index dbcd65421f..ce2f914d1f 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("ad" "cartservice" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shippingservice") +ALL_SERVICES=("ad" "cart" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shippingservice") ## Script variables # Will contain the list of services to test @@ -36,8 +36,8 @@ spec: values: - key: AD_ADDR value: $AD_ADDR - - key: CART_SERVICE_ADDR - value: $CART_SERVICE_ADDR + - key: CART_ADDR + value: $CART_ADDR - key: CHECKOUT_SERVICE_ADDR value: $CHECKOUT_SERVICE_ADDR - key: CURRENCY_SERVICE_ADDR From 37b9ed2039383295cd071c7a9c1a0a5550f9136d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 08:24:30 -0500 Subject: [PATCH 10/24] build(deps): bump the go-production-dependencies group across 2 directories with 1 update (#1852) Bumps the go-production-dependencies group with 1 update in the /src/checkoutservice directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go). Bumps the go-production-dependencies group with 1 update in the /src/productcatalogservice directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go). Updates `google.golang.org/grpc` from 1.69.0 to 1.69.2 - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.69.0...v1.69.2) Updates `google.golang.org/grpc` from 1.69.0 to 1.69.2 - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.69.0...v1.69.2) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-production-dependencies - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-production-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/checkoutservice/go.mod | 2 +- src/checkoutservice/go.sum | 4 ++-- src/productcatalogservice/go.mod | 2 +- src/productcatalogservice/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/checkoutservice/go.mod b/src/checkoutservice/go.mod index f796e55451..479cf7812f 100644 --- a/src/checkoutservice/go.mod +++ b/src/checkoutservice/go.mod @@ -20,7 +20,7 @@ require ( go.opentelemetry.io/otel/sdk v1.33.0 go.opentelemetry.io/otel/sdk/metric v1.33.0 go.opentelemetry.io/otel/trace v1.33.0 - google.golang.org/grpc v1.69.0 + google.golang.org/grpc v1.69.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 google.golang.org/protobuf v1.36.0 ) diff --git a/src/checkoutservice/go.sum b/src/checkoutservice/go.sum index 8559307563..c599cae4d7 100644 --- a/src/checkoutservice/go.sum +++ b/src/checkoutservice/go.sum @@ -261,8 +261,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1: google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY= google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= -google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI= -google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= diff --git a/src/productcatalogservice/go.mod b/src/productcatalogservice/go.mod index 8a365a5ef8..341dfe61e5 100644 --- a/src/productcatalogservice/go.mod +++ b/src/productcatalogservice/go.mod @@ -17,7 +17,7 @@ require ( go.opentelemetry.io/otel/sdk v1.33.0 go.opentelemetry.io/otel/sdk/metric v1.33.0 go.opentelemetry.io/otel/trace v1.33.0 - google.golang.org/grpc v1.69.0 + google.golang.org/grpc v1.69.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 google.golang.org/protobuf v1.36.0 ) diff --git a/src/productcatalogservice/go.sum b/src/productcatalogservice/go.sum index 6a9bd2031b..47ac9518b2 100644 --- a/src/productcatalogservice/go.sum +++ b/src/productcatalogservice/go.sum @@ -189,8 +189,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1: google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY= google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= -google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI= -google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= From 623c0e4aa9294e36bb03aee1358ae4514c480b98 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 19 Dec 2024 16:25:02 +0100 Subject: [PATCH 11/24] [paymentservice] Bump dependencies (#1854) * [paymentservice] Bump dependencies * Apply suggestion --- src/paymentservice/Dockerfile | 4 +- src/paymentservice/index.js | 6 +- src/paymentservice/package-lock.json | 1910 +++++++++++++------------- src/paymentservice/package.json | 43 +- 4 files changed, 957 insertions(+), 1006 deletions(-) diff --git a/src/paymentservice/Dockerfile b/src/paymentservice/Dockerfile index c67672b651..fb78bc3b17 100644 --- a/src/paymentservice/Dockerfile +++ b/src/paymentservice/Dockerfile @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -FROM node:21-alpine AS build +FROM node:22-alpine AS build WORKDIR /usr/src/app/ @@ -12,7 +12,7 @@ RUN apk add --no-cache python3 make g++ && npm ci --omit=dev # ----------------------------------------------------------------------------- -FROM node:21-alpine +FROM node:22-alpine USER node WORKDIR /usr/src/app/ diff --git a/src/paymentservice/index.js b/src/paymentservice/index.js index af409987f7..c068c31082 100644 --- a/src/paymentservice/index.js +++ b/src/paymentservice/index.js @@ -14,7 +14,7 @@ async function chargeServiceHandler(call, callback) { try { const amount = call.request.amount span.setAttributes({ - 'app.payment.amount': parseFloat(`${amount.units}.${amount.nanos}`) + 'app.payment.amount': parseFloat(`${amount.units}.${amount.nanos}`).toFixed(2) }) logger.info({ request: call.request }, "Charge request received.") @@ -51,9 +51,7 @@ server.bindAsync(`0.0.0.0:${process.env['PAYMENT_SERVICE_PORT']}`, grpc.ServerCr } logger.info(`PaymentService gRPC server started on port ${port}`) - server.start() -} -) +}) process.once('SIGINT', closeGracefully) process.once('SIGTERM', closeGracefully) diff --git a/src/paymentservice/package-lock.json b/src/paymentservice/package-lock.json index fad9651dbb..881fb4216b 100644 --- a/src/paymentservice/package-lock.json +++ b/src/paymentservice/package-lock.json @@ -1,41 +1,42 @@ { "name": "paymentservice", - "version": "1.4.0", + "version": "1.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "paymentservice", - "version": "1.4.0", + "version": "1.12.0", "license": "ISC", "dependencies": { - "@grpc/grpc-js": "1.10.8", + "@grpc/grpc-js": "1.10.11", "@grpc/proto-loader": "0.7.13", - "@openfeature/flagd-provider": "0.13.0", - "@openfeature/server-sdk": "1.14.0", - "@opentelemetry/api": "1.8.0", - "@opentelemetry/auto-instrumentations-node": "0.46.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.51.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.51.1", - "@opentelemetry/instrumentation-runtime-node": "^0.10.0", - "@opentelemetry/resource-detector-alibaba-cloud": "0.28.9", - "@opentelemetry/resource-detector-aws": "1.5.0", - "@opentelemetry/resource-detector-container": "0.3.9", - "@opentelemetry/resource-detector-gcp": "0.29.9", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-metrics": "1.24.1", - "@opentelemetry/sdk-node": "0.51.1", - "grpc-js-health-check": "1.1.0", - "pino": "8.16.1", + "@openfeature/flagd-provider": "0.13.1", + "@openfeature/server-sdk": "1.16.2", + "@opentelemetry/api": "1.9.0", + "@opentelemetry/auto-instrumentations-node": "0.54.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.56.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.56.0", + "@opentelemetry/instrumentation-runtime-node": "0.11.0", + "@opentelemetry/resource-detector-alibaba-cloud": "0.29.6", + "@opentelemetry/resource-detector-aws": "1.9.0", + "@opentelemetry/resource-detector-container": "0.5.2", + "@opentelemetry/resource-detector-gcp": "0.31.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-metrics": "1.29.0", + "@opentelemetry/sdk-node": "0.56.0", + "grpc-js-health-check": "1.2.2", + "pino": "9.5.0", "simple-card-validator": "1.1.0", - "uuid": "9.0.1" + "uuid": "11.0.3" } }, "node_modules/@grpc/grpc-js": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.8.tgz", - "integrity": "sha512-vYVqYzHicDqyKB+NQhAc54I1QWCBLCrYG6unqOIcBTHx+7x8C9lcoLj3KVJXs2VB4lUbpWY+Kk9NipcbXYWmvg==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.11.tgz", + "integrity": "sha512-3RaoxOqkHHN2c05bwtBNVJmOf/UwMam0rZYtdl7dsRpsvDwcNpv6LkGgzltQ7xVf822LzBoKEPRvf4D7+xeIDw==", + "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" @@ -71,19 +72,20 @@ } }, "node_modules/@openfeature/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.2.0.tgz", - "integrity": "sha512-JyIiije5f+8Big1xz7UAmxqVmHBuFUI9Dh8DEFG2D1ocgjMm1tEzYXJDr3urCQGNnX9M/cYtNhEcGfyontIgJw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.5.0.tgz", + "integrity": "sha512-dRBJjnYhEa6XoF9BNf9sW4sHuXmigfBbbatA5djbRXRBDExrXsMydMpEWQqKYhd7XwdwFatuh2q+UkVbXriUKA==", + "license": "Apache-2.0", "peer": true }, "node_modules/@openfeature/flagd-core": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@openfeature/flagd-core/-/flagd-core-0.1.11.tgz", - "integrity": "sha512-tLIqTNTSb5UNQbfbm7nFUhPGe3TicjJUw42NgkWss76K+opwIuGS8eDzKWhshn3269W+3rLC6MA8iuZb6go8pQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@openfeature/flagd-core/-/flagd-core-0.2.3.tgz", + "integrity": "sha512-dhinXEfFmyTPVuI53Nq1pEC7SJP78LgpmJriMlVjcNaDRkA8VneyjuttijDnHw8PcrBit5I3DZNelXzrUkkiLw==", "dependencies": { "ajv": "^8.12.0", "imurmurhash": "0.1.4", - "json-logic-engine": "1.3.1", + "json-logic-engine": "1.3.4", "object-hash": "3.0.0", "semver": "7.5.3", "tslib": "^2.3.0" @@ -92,10 +94,23 @@ "@openfeature/core": ">=0.0.16" } }, + "node_modules/@openfeature/flagd-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@openfeature/flagd-core/node_modules/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -107,13 +122,13 @@ } }, "node_modules/@openfeature/flagd-provider": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@openfeature/flagd-provider/-/flagd-provider-0.13.0.tgz", - "integrity": "sha512-78w/oCDkZxoGbaPiGPu9YaWQLvJLR0wsftEf/QD5uS1b8BW1sLXoqVh/AfYwZSZ54NTJtfpGNh3/oE0zjJUXBg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@openfeature/flagd-provider/-/flagd-provider-0.13.1.tgz", + "integrity": "sha512-X+sNmgmHN08U1kE0I1lLNDdvvvUTmPpXxFuppB8ak+6+d5lHCLMIhhEGlE56C8VhyWBP0d+chl42O4IqdypqDA==", "dependencies": { - "@openfeature/flagd-core": "~0.1.10", + "@openfeature/flagd-core": "0.2.3", "@protobuf-ts/runtime-rpc": "2.9.4", - "lru-cache": "10.2.0", + "lru-cache": "10.2.2", "util": "0.12.5" }, "peerDependencies": { @@ -121,95 +136,92 @@ "@openfeature/server-sdk": "^1.13.0" } }, - "node_modules/@openfeature/flagd-provider/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/@openfeature/server-sdk": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.14.0.tgz", - "integrity": "sha512-PGPI6OZdyAy2FZVUiH1suw/WuWZJsIlK2xd1KbRl5rlMLawYk2bKGBGgZYX9rcozsGKOZM6/vaFjCSB6QCjCfw==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.16.2.tgz", + "integrity": "sha512-bGK3Lgf9JY06s1vJkBs1PgSH+taxrwBx/SJFTNWAmA5TfV3c5SgLCGlU2xYEda5Ba3885ly+foWeRJrXdZGQ+g==", + "license": "Apache-2.0", "engines": { "node": ">=18" }, "peerDependencies": { - "@openfeature/core": "1.2.0" + "@openfeature/core": "^1.5.0" } }, "node_modules/@opentelemetry/api": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.51.1.tgz", - "integrity": "sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz", + "integrity": "sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" }, "engines": { "node": ">=14" } }, "node_modules/@opentelemetry/auto-instrumentations-node": { - "version": "0.46.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.46.1.tgz", - "integrity": "sha512-s0CwmY9KYtPawOhV5YO2Gf62uVOQRNvT6Or8IZ0S4gr/kPVNhoMehTsQvqBwSWQfoFrkmW3KKOHiKJEp4dVGXg==", - "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/instrumentation-amqplib": "^0.37.0", - "@opentelemetry/instrumentation-aws-lambda": "^0.41.1", - "@opentelemetry/instrumentation-aws-sdk": "^0.41.0", - "@opentelemetry/instrumentation-bunyan": "^0.38.0", - "@opentelemetry/instrumentation-cassandra-driver": "^0.38.0", - "@opentelemetry/instrumentation-connect": "^0.36.1", - "@opentelemetry/instrumentation-cucumber": "^0.6.0", - "@opentelemetry/instrumentation-dataloader": "^0.9.0", - "@opentelemetry/instrumentation-dns": "^0.36.1", - "@opentelemetry/instrumentation-express": "^0.39.0", - "@opentelemetry/instrumentation-fastify": "^0.36.1", - "@opentelemetry/instrumentation-fs": "^0.12.0", - "@opentelemetry/instrumentation-generic-pool": "^0.36.0", - "@opentelemetry/instrumentation-graphql": "^0.40.0", - "@opentelemetry/instrumentation-grpc": "^0.51.0", - "@opentelemetry/instrumentation-hapi": "^0.38.0", - "@opentelemetry/instrumentation-http": "^0.51.0", - "@opentelemetry/instrumentation-ioredis": "^0.40.0", - "@opentelemetry/instrumentation-knex": "^0.36.1", - "@opentelemetry/instrumentation-koa": "^0.40.0", - "@opentelemetry/instrumentation-lru-memoizer": "^0.37.0", - "@opentelemetry/instrumentation-memcached": "^0.36.0", - "@opentelemetry/instrumentation-mongodb": "^0.43.0", - "@opentelemetry/instrumentation-mongoose": "^0.38.1", - "@opentelemetry/instrumentation-mysql": "^0.38.1", - "@opentelemetry/instrumentation-mysql2": "^0.38.1", - "@opentelemetry/instrumentation-nestjs-core": "^0.37.1", - "@opentelemetry/instrumentation-net": "^0.36.0", - "@opentelemetry/instrumentation-pg": "^0.41.0", - "@opentelemetry/instrumentation-pino": "^0.39.0", - "@opentelemetry/instrumentation-redis": "^0.39.1", - "@opentelemetry/instrumentation-redis-4": "^0.39.0", - "@opentelemetry/instrumentation-restify": "^0.38.0", - "@opentelemetry/instrumentation-router": "^0.37.0", - "@opentelemetry/instrumentation-socket.io": "^0.39.0", - "@opentelemetry/instrumentation-tedious": "^0.10.1", - "@opentelemetry/instrumentation-undici": "^0.2.0", - "@opentelemetry/instrumentation-winston": "^0.37.0", - "@opentelemetry/resource-detector-alibaba-cloud": "^0.28.9", - "@opentelemetry/resource-detector-aws": "^1.5.0", - "@opentelemetry/resource-detector-azure": "^0.2.6", - "@opentelemetry/resource-detector-container": "^0.3.9", - "@opentelemetry/resource-detector-gcp": "^0.29.9", + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.54.0.tgz", + "integrity": "sha512-MJYh3hUN7FupIXGy/cOiMoTIM3lTELXFiu9dFXD6YK9AE/Uez2YfgRnHyotD9h/qJeL7uDcI5DHAGkbb/2EdOQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/instrumentation-amqplib": "^0.45.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.49.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.48.0", + "@opentelemetry/instrumentation-bunyan": "^0.44.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.44.0", + "@opentelemetry/instrumentation-connect": "^0.42.0", + "@opentelemetry/instrumentation-cucumber": "^0.12.0", + "@opentelemetry/instrumentation-dataloader": "^0.15.0", + "@opentelemetry/instrumentation-dns": "^0.42.0", + "@opentelemetry/instrumentation-express": "^0.46.0", + "@opentelemetry/instrumentation-fastify": "^0.43.0", + "@opentelemetry/instrumentation-fs": "^0.18.0", + "@opentelemetry/instrumentation-generic-pool": "^0.42.0", + "@opentelemetry/instrumentation-graphql": "^0.46.0", + "@opentelemetry/instrumentation-grpc": "^0.56.0", + "@opentelemetry/instrumentation-hapi": "^0.44.0", + "@opentelemetry/instrumentation-http": "^0.56.0", + "@opentelemetry/instrumentation-ioredis": "^0.46.0", + "@opentelemetry/instrumentation-kafkajs": "^0.6.0", + "@opentelemetry/instrumentation-knex": "^0.43.0", + "@opentelemetry/instrumentation-koa": "^0.46.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.43.0", + "@opentelemetry/instrumentation-memcached": "^0.42.0", + "@opentelemetry/instrumentation-mongodb": "^0.50.0", + "@opentelemetry/instrumentation-mongoose": "^0.45.0", + "@opentelemetry/instrumentation-mysql": "^0.44.0", + "@opentelemetry/instrumentation-mysql2": "^0.44.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.43.0", + "@opentelemetry/instrumentation-net": "^0.42.0", + "@opentelemetry/instrumentation-pg": "^0.49.0", + "@opentelemetry/instrumentation-pino": "^0.45.0", + "@opentelemetry/instrumentation-redis": "^0.45.0", + "@opentelemetry/instrumentation-redis-4": "^0.45.0", + "@opentelemetry/instrumentation-restify": "^0.44.0", + "@opentelemetry/instrumentation-router": "^0.43.0", + "@opentelemetry/instrumentation-socket.io": "^0.45.0", + "@opentelemetry/instrumentation-tedious": "^0.17.0", + "@opentelemetry/instrumentation-undici": "^0.9.0", + "@opentelemetry/instrumentation-winston": "^0.43.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.6", + "@opentelemetry/resource-detector-aws": "^1.9.0", + "@opentelemetry/resource-detector-azure": "^0.4.0", + "@opentelemetry/resource-detector-container": "^0.5.2", + "@opentelemetry/resource-detector-gcp": "^0.31.0", "@opentelemetry/resources": "^1.24.0", - "@opentelemetry/sdk-node": "^0.51.0" + "@opentelemetry/sdk-node": "^0.56.0" }, "engines": { "node": ">=14" @@ -219,43 +231,156 @@ } }, "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.24.1.tgz", - "integrity": "sha512-R5r6DO4kgEOVBxFXhXjwospLQkv+sYxwCfjvoZBe7Zm6KKXAV9kDSJhi/D1BweowdZmO+sdbENLs374gER8hpQ==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.29.0.tgz", + "integrity": "sha512-TKT91jcFXgHyIDF1lgJF3BHGIakn6x0Xp7Tq3zoS3TMPzT9IlP0xEavWP8C1zGjU9UmZP2VR1tJhW9Az1A3w8Q==", + "license": "Apache-2.0", "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/core": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.24.1.tgz", - "integrity": "sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.29.0.tgz", + "integrity": "sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.56.0.tgz", + "integrity": "sha512-/ef8wcphVKZ0uI7A1oqQI/gEMiBUlkeBkM9AGx6AviQFIbgPVSdNK3+bHBkyq5qMkyWgkeQCSJ0uhc5vJpf0dw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/sdk-logs": "0.56.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-grpc/node_modules/@opentelemetry/sdk-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.56.0.tgz", + "integrity": "sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "1.24.1" + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-http": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.56.0.tgz", + "integrity": "sha512-gN/itg2B30pa+yAqiuIHBCf3E77sSBlyWVzb+U/MDLzEMOwfnexlMvOWULnIO1l2xR2MNLEuPCQAOrL92JHEJg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/sdk-logs": "0.56.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/sdk-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.56.0.tgz", + "integrity": "sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.56.0.tgz", + "integrity": "sha512-MaO+eGrdksd8MpEbDDLbWegHc3w6ualZV6CENxNOm3wqob0iOx78/YL2NVIKyP/0ktTUIs7xIppUYqfY3ogFLQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-logs": "0.56.0", + "@opentelemetry/sdk-trace-base": "1.29.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/sdk-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.56.0.tgz", + "integrity": "sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.51.1.tgz", - "integrity": "sha512-YhND/e3zvQMvChrF9nduDqT+rZN4X5BDZUidiupYtHe+yhLyUSACkJcTuygMLrJfrGccJiwCZoZxJmz8hw0Vog==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.56.0.tgz", + "integrity": "sha512-yqxN9UiIu020XYX/vny06VdQIQ7/f7f+z0xEL8QGbrO9fZB8lRMvea2pxbjqW9mzZ5m7kV6t3zsOALcEg5ky1w==", + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.51.1", - "@opentelemetry/otlp-exporter-base": "0.51.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.51.1", - "@opentelemetry/otlp-transformer": "0.51.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-metrics": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.56.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-metrics": "1.29.0" }, "engines": { "node": ">=14" @@ -265,15 +390,16 @@ } }, "node_modules/@opentelemetry/exporter-metrics-otlp-http": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.51.1.tgz", - "integrity": "sha512-oFXvif9iksHUxrzG3P8ohMLt7xSrl+oDMqxD/3XXndU761RFAKSbRDpfrQs25U5D+A2aMV3qk+4kfUWdJhZ77g==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.56.0.tgz", + "integrity": "sha512-GD5QuCT6js+mDpb5OBO6OSyCH+k2Gy3xPHJV9BnjV8W6kpSuY8y2Samzs5vl23UcGMq6sHLAbs+Eq/VYsLMiVw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/otlp-exporter-base": "0.51.1", - "@opentelemetry/otlp-transformer": "0.51.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-metrics": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-metrics": "1.29.0" }, "engines": { "node": ">=14" @@ -283,70 +409,73 @@ } }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.51.1.tgz", - "integrity": "sha512-P9+Hkszih95ITvldGZ+kXvj9HpD1QfS+PwooyHK72GYA+Bgm+yUSAsDkUkDms8+s9HW6poxURv3LcjaMuBBpVQ==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.56.0.tgz", + "integrity": "sha512-9hRHue78CV2XShAt30HadBK8XEtOBiQmnkYquR1RQyf2RYIdJvhiypEZ+Jh3NGW8Qi14icTII/1oPTQlhuyQdQ==", + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.51.1", - "@opentelemetry/otlp-transformer": "0.51.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.51.1.tgz", - "integrity": "sha512-n+LhLPsX07URh+HhV2SHVSvz1t4G/l/CE5BjpmhAPqeTceFac1VpyQkavWEJbvnK5bUEXijWt4LxAxFpt2fXyw==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.56.0.tgz", + "integrity": "sha512-vqVuJvcwameA0r0cNrRzrZqPLB0otS+95g0XkZdiKOXUo81wYdY6r4kyrwz4nSChqTBEFm0lqi/H2OWGboOa6g==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/otlp-exporter-base": "0.51.1", - "@opentelemetry/otlp-transformer": "0.51.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.51.1.tgz", - "integrity": "sha512-SE9f0/6V6EeXC9i+WA4WFjS1EYgaBCpAnI5+lxWvZ7iO7EU1IvHvZhP6Kojr0nLldo83gqg6G7OWFqsID3uF+w==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.56.0.tgz", + "integrity": "sha512-UYVtz8Kp1QZpZFg83ZrnwRIxF2wavNyi1XaIKuQNFjlYuGCh8JH4+GOuHUU4G8cIzOkWdjNR559vv0Q+MCz+1w==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/otlp-exporter-base": "0.51.1", - "@opentelemetry/otlp-proto-exporter-base": "0.51.1", - "@opentelemetry/otlp-transformer": "0.51.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/exporter-zipkin": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.24.1.tgz", - "integrity": "sha512-+Rl/VFmu2n6eaRMnVbyfZx1DqR/1KNyWebYuHyQBZaEAVIn/ZLgmofRpXN1X2nhJ4BNaptQUNxAstCYYz6dKoQ==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.29.0.tgz", + "integrity": "sha512-9wNUxbl/sju2AvA3UhL2kLF1nfhJ4dVJgvktc3hx80Bg/fWHvF6ik4R3woZ/5gYFqZ97dcuik0dWPQEzLPNBtg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1", - "@opentelemetry/semantic-conventions": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -356,13 +485,14 @@ } }, "node_modules/@opentelemetry/instrumentation": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.51.1.tgz", - "integrity": "sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz", + "integrity": "sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.51.1", - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.7.4", + "@opentelemetry/api-logs": "0.56.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" @@ -375,13 +505,14 @@ } }, "node_modules/@opentelemetry/instrumentation-amqplib": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.37.0.tgz", - "integrity": "sha512-XjOHeAOreh0XX4jlzTTUWWqu1dIGvMWM8yvd43JJdRMAmTZisezjKsxLjMEMIvF0PzQdoXwh9DiS9nYE4/QmpA==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.45.0.tgz", + "integrity": "sha512-SlKLsOS65NGMIBG1Lh/hLrMDU9WzTUF25apnV6ZmWZB1bBmUwan7qrwwrTu1cL5LzJWCXOdZPuTaxP7pC9qxnQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -391,15 +522,14 @@ } }, "node_modules/@opentelemetry/instrumentation-aws-lambda": { - "version": "0.41.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.41.1.tgz", - "integrity": "sha512-/BLG+0DQr2tCILFGJKJH2Fg6eyjhqOlVflYpNddUEXnzyQ/PAhTdgirkqbICFgeSW2XYcEY9zXpuRldrVNw9cA==", + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.49.0.tgz", + "integrity": "sha512-FIKQSzX/MSzfARqgm7lX9p/QUj7USyicioBYI5BFGuOOoLefxBlJINAcRs3EvCh1taEnJ7/LpbrhlcF7r4Yqvg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/propagator-aws-xray": "^1.3.1", - "@opentelemetry/resources": "^1.8.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/aws-lambda": "8.10.122" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/aws-lambda": "8.10.143" }, "engines": { "node": ">=14" @@ -409,14 +539,15 @@ } }, "node_modules/@opentelemetry/instrumentation-aws-sdk": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.41.0.tgz", - "integrity": "sha512-7+8WMY0LQeqv6KIObXK+Py44qNFLeCU0ZLLxSZtXEbZ2wJlQISP1St65jRto0NV7isnZoyuOxb2+ZpypPPNv7Q==", + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.48.0.tgz", + "integrity": "sha512-Bl4geb9DS5Zxr5mOsDcDTLjwrfipQ4KDl1ZT5gmoOvVuZPp308reGdtnO1QmqbvMwcgMxD2aBdWUoYgtx1WgWw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/propagation-utils": "^0.30.9", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/propagation-utils": "^0.30.14", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -426,12 +557,13 @@ } }, "node_modules/@opentelemetry/instrumentation-bunyan": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.38.0.tgz", - "integrity": "sha512-ThNcgTE22W7PKzTzz5qfGxb5Gf7rA3EORousYo2nJWHHcF6gqiMNv2+GXY3MdpjLBr8IgCfhtvbQdD6rlIPUpA==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.44.0.tgz", + "integrity": "sha512-9JHcfUPejOx5ULuxrH5K5qOZ9GJSTisuMSZZFVkDigZJ42pMn26Zgmb1HhuiZXd/ZcFgOeLZcwQNpBmF1whftg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "^0.51.0", - "@opentelemetry/instrumentation": "^0.51.0", + "@opentelemetry/api-logs": "^0.56.0", + "@opentelemetry/instrumentation": "^0.56.0", "@types/bunyan": "1.8.9" }, "engines": { @@ -442,12 +574,13 @@ } }, "node_modules/@opentelemetry/instrumentation-cassandra-driver": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.38.0.tgz", - "integrity": "sha512-ML4Vw0it2uIpETfX6skuSIGLHF9D3TUKOfdfrk9lnrzzWSzg2aS6pl3UeepkQX4wXHdzlxVRB0USrUqsmxMd5Q==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.44.0.tgz", + "integrity": "sha512-HbhNoqAelB1T4QtgKJbOy7wB26R15HToLyMmYwNFICyDtfY7nhRmGRSzPt6akpwXpyCq43/P+L6XYTmqSWTK/Q==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -457,13 +590,14 @@ } }, "node_modules/@opentelemetry/instrumentation-connect": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.36.1.tgz", - "integrity": "sha512-xI5Q/CMmzBmHshPnzzjD19ptFaYO/rQWzokpNio4QixZYWhJsa35QgRvN9FhPkwgtuJIbt/CWWAufJ3egJNHEA==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.42.0.tgz", + "integrity": "sha512-bOoYHBmbnq/jFaLHmXJ55VQ6jrH5fHDMAPjFM0d3JvR0dvIqW7anEoNC33QqYGFYUfVJ50S0d/eoyF61ALqQuA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.36" }, "engines": { @@ -474,12 +608,13 @@ } }, "node_modules/@opentelemetry/instrumentation-cucumber": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.6.0.tgz", - "integrity": "sha512-90eAF2JPSbPAsOuGfYyctYaoYXqy4Clbxt0j/uUgg6dto4oqwUw3AvTyHQEztLGxeXwEzC1EQigDtVPg5ZexYA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.12.0.tgz", + "integrity": "sha512-0sAhKYaxi5/SM+z8nbwmezNVlnJGkcZgMA7ClenVMIoH5xjow/b2gzJOWr3Ch7FPEXBcyoY/sIqfYWRwmRXWiw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -489,11 +624,12 @@ } }, "node_modules/@opentelemetry/instrumentation-dataloader": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.9.0.tgz", - "integrity": "sha512-fiyCOAw+tlbneok1x7P5UseoGW5nS60CWWx7NXzYW+WOexpSmDQQW7olttGa8fqE6/sVCoi1l+QdfVoETZi/NQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.15.0.tgz", + "integrity": "sha512-5fP35A2jUPk4SerVcduEkpbRAIoqa2PaP5rWumn01T1uSbavXNccAr3Xvx1N6xFtZxXpLJq4FYqGFnMgDWgVng==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -503,13 +639,12 @@ } }, "node_modules/@opentelemetry/instrumentation-dns": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.36.1.tgz", - "integrity": "sha512-NWRbQ7q0E3co/CNTWLZZvUzZoKhB1iTitY282IM8HDTXkA6VRssCfOcvaHw5ezOh23TJbAeYxmmpVj4hFvDPYQ==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.42.0.tgz", + "integrity": "sha512-HsKYWwMADJAcdY4UkNNbvcg9cm5Xhz5wxBPyT15z7wigatiEoCXPrbbbRDmCe+eKTc2tRxUPmg49u6MsIGcUmg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0", - "semver": "^7.5.4" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -519,13 +654,14 @@ } }, "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.39.0.tgz", - "integrity": "sha512-AG8U7z7D0JcBu/7dDcwb47UMEzj9/FMiJV2iQZqrsZnxR3FjB9J9oIH2iszJYci2eUdp2WbdvtpD9RV/zmME5A==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.46.0.tgz", + "integrity": "sha512-BCEClDj/HPq/1xYRAlOr6z+OUnbp2eFp18DSrgyQz4IT9pkdYk8eWHnMi9oZSqlC6J5mQzkFmaW5RrKb1GLQhg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -535,13 +671,14 @@ } }, "node_modules/@opentelemetry/instrumentation-fastify": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.36.1.tgz", - "integrity": "sha512-3Nfm43PI0I+3EX+1YbSy6xbDu276R1Dh1tqAk68yd4yirnIh52Kd5B+nJ8CgHA7o3UKakpBjj6vSzi5vNCzJIA==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.43.0.tgz", + "integrity": "sha512-Lmdsg7tYiV+K3/NKVAQfnnLNGmakUOFdB0PhoTh2aXuSyCmyNnnDvhn2MsArAPTZ68wnD5Llh5HtmiuTkf+DyQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -551,12 +688,13 @@ } }, "node_modules/@opentelemetry/instrumentation-fs": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.12.0.tgz", - "integrity": "sha512-Waf+2hekJRxIwq1PmivxOWLdMOtYbY22hKr34gEtfbv2CArSv8FBJH4BmQxB9o5ZcwkdKu589qs009dbuSfNmQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.18.0.tgz", + "integrity": "sha512-kC40y6CEMONm8/MWwoF5GHWIC7gOdF+g3sgsjfwJaUkgD6bdWV+FgG0XApqSbTQndICKzw3RonVk8i7s6mHqhA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -566,12 +704,12 @@ } }, "node_modules/@opentelemetry/instrumentation-generic-pool": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.36.0.tgz", - "integrity": "sha512-CExAEqJvK8jYxrhN8cl6EaGg57EGJi+qsSKouLC5lndXi68gZLOKbZIMZg4pF0kNfp/D4BFaGmA6Ap7d5WoPTw==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.42.0.tgz", + "integrity": "sha512-J4QxqiQ1imtB9ogzsOnHra0g3dmmLAx4JCeoK3o0rFes1OirljNHnO8Hsj4s1jAir8WmWvnEEQO1y8yk6j2tog==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -581,11 +719,12 @@ } }, "node_modules/@opentelemetry/instrumentation-graphql": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.40.0.tgz", - "integrity": "sha512-LVRdEHWACWOczv2imD+mhUrLMxsEjPPi32vIZJT57zygR5aUiA4em8X3aiGOCycgbMWkIu8xOSGSxdx3JmzN+w==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.46.0.tgz", + "integrity": "sha512-tplk0YWINSECcK89PGM7IVtOYenXyoOuhOQlN0X0YrcDUfMS4tZMKkVc0vyhNWYYrexnUHwNry2YNBNugSpjlQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -595,12 +734,13 @@ } }, "node_modules/@opentelemetry/instrumentation-grpc": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.51.1.tgz", - "integrity": "sha512-coRTugFL7De/VNH/1NqPlxnfik87jS+jBXsny+Y/lMhXIA3x8t71IyL9ihuewkD+lNtIxIz6Y7Sq6kPuOqz5dQ==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.56.0.tgz", + "integrity": "sha512-cmqCZqyKtyu4oLx3rQmPMeqAo69er7ULnbEBTFCW0++AAimIoAXJptrEvB5X9HYr0NP2TqF8As/vlV3IVmY5OQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "0.51.1", - "@opentelemetry/semantic-conventions": "1.24.1" + "@opentelemetry/instrumentation": "0.56.0", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -610,13 +750,14 @@ } }, "node_modules/@opentelemetry/instrumentation-hapi": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.38.0.tgz", - "integrity": "sha512-ZcOqEuwuutTDYIjhDIStix22ECblG/i9pHje23QGs4Q4YS4RMaZ5hKCoQJxW88Z4K7T53rQkdISmoXFKDV8xMg==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.44.0.tgz", + "integrity": "sha512-4HdNIMNXWK1O6nsaQOrACo83QWEVoyNODTdVDbUqtqXiv2peDfD0RAPhSQlSGWLPw3S4d9UoOmrV7s2HYj6T2A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -626,13 +767,15 @@ } }, "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.51.1.tgz", - "integrity": "sha512-6b3nZnFFEz/3xZ6w8bVxctPUWIPWiXuPQ725530JgxnN1cvYFd8CJ75PrHZNjynmzSSnqBkN3ef4R9N+RpMh8Q==", - "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/instrumentation": "0.51.1", - "@opentelemetry/semantic-conventions": "1.24.1", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.56.0.tgz", + "integrity": "sha512-/bWHBUAq8VoATnH9iLk5w8CE9+gj+RgYSUphe7hry472n6fYl7+4PvuScoQMdmSUTprKq/gyr2kOWL6zrC7FkQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.29.0", + "@opentelemetry/instrumentation": "0.56.0", + "@opentelemetry/semantic-conventions": "1.28.0", + "forwarded-parse": "2.1.2", "semver": "^7.5.2" }, "engines": { @@ -643,13 +786,30 @@ } }, "node_modules/@opentelemetry/instrumentation-ioredis": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.40.0.tgz", - "integrity": "sha512-Jv/fH7KhpWe4KBirsiqeUJIYrsdR2iu2l4nWhfOlRvaZ+zYIiLEzTQR6QhBbyRoAbU4OuYJzjWusOmmpGBnwng==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.46.0.tgz", + "integrity": "sha512-sOdsq8oGi29V58p1AkefHvuB3l2ymP1IbxRIX3y4lZesQWKL8fLhBmy8xYjINSQ5gHzWul2yoz7pe7boxhZcqQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/redis-common": "^0.36.2", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.6.0.tgz", + "integrity": "sha512-MGQrzqEUAl0tacKJUFpuNHJesyTi51oUzSVizn7FdvJplkRIdS11FukyZBZJEscofSEdk7Ycmg+kNMLi5QHUFg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -659,12 +819,13 @@ } }, "node_modules/@opentelemetry/instrumentation-knex": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.36.1.tgz", - "integrity": "sha512-6bEuiI+yMf3D0+ZWZE2AKmXhIhBvZ0brdO/0A8lUqeqeS+sS4fTcjA1F2CclsCNxYWEgcs8o3QyQqPceBeVRlg==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.43.0.tgz", + "integrity": "sha512-mOp0TRQNFFSBj5am0WF67fRO7UZMUmsF3/7HSDja9g3H4pnj+4YNvWWyZn4+q0rGrPtywminAXe0rxtgaGYIqg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -674,15 +835,14 @@ } }, "node_modules/@opentelemetry/instrumentation-koa": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.40.0.tgz", - "integrity": "sha512-dJc3H/bKMcgUYcQpLF+1IbmUKus0e5Fnn/+ru/3voIRHwMADT3rFSUcGLWSczkg68BCgz0vFWGDTvPtcWIFr7A==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.46.0.tgz", + "integrity": "sha512-RcWXMQdJQANnPUaXbHY5G0Fg6gmleZ/ZtZeSsekWPaZmQq12FGk0L1UwodIgs31OlYfviAZ4yTeytoSUkgo5vQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/koa": "2.14.0", - "@types/koa__router": "12.0.3" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -692,11 +852,12 @@ } }, "node_modules/@opentelemetry/instrumentation-lru-memoizer": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.37.0.tgz", - "integrity": "sha512-dHLrn55qVWsHJQYdForPWPUWDk2HZ2jjzkT+WoQSqpYT1j4HxfoiLfBTF+I3EbEYFAJnDRmRAUfA6nU5GPdCLQ==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.43.0.tgz", + "integrity": "sha512-fZc+1eJUV+tFxaB3zkbupiA8SL3vhDUq89HbDNg1asweYrEb9OlHIB+Ot14ZiHUc1qCmmWmZHbPTwa56mVVwzg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -706,12 +867,13 @@ } }, "node_modules/@opentelemetry/instrumentation-memcached": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.36.0.tgz", - "integrity": "sha512-5efkT8ZfN8il5z+yfKYFGm2YR3mhlhaJoGfNOAylKE/6tUH3WDTTWaP7nrURtWGc+fuvDktcEch18Se8qsGS7w==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.42.0.tgz", + "integrity": "sha512-6peg2nImB4JNpK+kW95b12B6tRSwRpc0KCm6Ol41uDYPli800J9vWi+DGoPsmTrgZpkEfCe9Z9Ob9Z6Fth2zwg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", "@types/memcached": "^2.2.6" }, "engines": { @@ -722,13 +884,13 @@ } }, "node_modules/@opentelemetry/instrumentation-mongodb": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.43.0.tgz", - "integrity": "sha512-bMKej7Y76QVUD3l55Q9YqizXybHUzF3pujsBFjqbZrRn2WYqtsDtTUlbCK7fvXNPwFInqZ2KhnTqd0gwo8MzaQ==", + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.50.0.tgz", + "integrity": "sha512-DtwJMjYFXFT5auAvv8aGrBj1h3ciA/dXQom11rxL7B1+Oy3FopSpanvwYxJ+z0qmBrQ1/iMuWELitYqU4LnlkQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/sdk-metrics": "^1.9.1", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -738,13 +900,14 @@ } }, "node_modules/@opentelemetry/instrumentation-mongoose": { - "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.38.1.tgz", - "integrity": "sha512-zaeiasdnRjXe6VhYCBMdkmAVh1S5MmXC/0spet+yqoaViGnYst/DOxPvhwg3yT4Yag5crZNWsVXnA538UjP6Ow==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.45.0.tgz", + "integrity": "sha512-zHgNh+A01C5baI2mb5dAGyMC7DWmUpOfwpV8axtC0Hd5Uzqv+oqKgKbVDIVhOaDkPxjgVJwYF9YQZl2pw2qxIA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -754,13 +917,14 @@ } }, "node_modules/@opentelemetry/instrumentation-mysql": { - "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.38.1.tgz", - "integrity": "sha512-+iBAawUaTfX/HAlvySwozx0C2B6LBfNPXX1W8Z2On1Uva33AGkw2UjL9XgIg1Pj4eLZ9R4EoJ/aFz+Xj4E/7Fw==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.44.0.tgz", + "integrity": "sha512-al7jbXvT/uT1KV8gdNDzaWd5/WXf+mrjrsF0/NtbnqLa0UUFGgQnoK3cyborgny7I+KxWhL8h7YPTf6Zq4nKsg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/mysql": "2.15.22" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" }, "engines": { "node": ">=14" @@ -770,12 +934,13 @@ } }, "node_modules/@opentelemetry/instrumentation-mysql2": { - "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.38.1.tgz", - "integrity": "sha512-qkpHMgWSDTYVB1vlZ9sspf7l2wdS5DDq/rbIepDwX5BA0N0068JTQqh0CgAh34tdFqSCnWXIhcyOXC2TtRb0sg==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.44.0.tgz", + "integrity": "sha512-e9QY4AGsjGFwmfHd6kBa4yPaQZjAq2FuxMb0BbKlXCAjG+jwqw+sr9xWdJGR60jMsTq52hx3mAlE3dUJ9BipxQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1" }, "engines": { @@ -786,12 +951,13 @@ } }, "node_modules/@opentelemetry/instrumentation-nestjs-core": { - "version": "0.37.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.37.1.tgz", - "integrity": "sha512-ebYQjHZEmGHWEALwwDGhSQVLBaurFnuLIkZD5igPXrt7ohfF4lc5/4al1LO+vKc0NHk8SJWStuRueT86ISA8Vg==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.43.0.tgz", + "integrity": "sha512-NEo4RU7HTjiaXk3curqXUvCb9alRiFWxQY//+hvDXwWLlADX2vB6QEmVCeEZrKO+6I/tBrI4vNdAnbCY9ldZVg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -801,12 +967,13 @@ } }, "node_modules/@opentelemetry/instrumentation-net": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.36.0.tgz", - "integrity": "sha512-rZlbSgwAJys8lpug+xIeAdO98ypYMAPVqrHqc4AHuUl5S4MULHEcjGLMZLoE/guEGO4xAQ5XUezpRFGM1SAnsg==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.42.0.tgz", + "integrity": "sha512-RCX1e4aHBxpTdm3xyQWDF6dbfclRY1xXAzZnEwuFj1IO+DAqnu8oO11NRBIfH6TNRBmeBKbpiaGbmzCV9ULwIA==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -816,15 +983,17 @@ } }, "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.41.0.tgz", - "integrity": "sha512-BSlhpivzBD77meQNZY9fS4aKgydA8AJBzv2dqvxXFy/Hq64b7HURgw/ztbmwFeYwdF5raZZUifiiNSMLpOJoSA==", - "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0", + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.49.0.tgz", + "integrity": "sha512-3alvNNjPXVdAPdY1G7nGRVINbDxRK02+KAugDiEpzw0jFQfU8IzFkSWA4jyU4/GbMxKvHD+XIOEfSjpieSodKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/pg": "8.6.1", - "@types/pg-pool": "2.0.4" + "@types/pg-pool": "2.0.6" }, "engines": { "node": ">=14" @@ -833,12 +1002,24 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/instrumentation-pino": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.39.0.tgz", - "integrity": "sha512-uA17F2iP77o3NculB63QD2zv3jkJ093Gfb0GxHLEqTIqpYs1ToJ53ybWwjJwqFByxk7GrliaxaxVtWC23PKzBg==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.45.0.tgz", + "integrity": "sha512-u7XwRdMDPzB6PHRo1EJNxTmjpHPnLpssYlr5t89aWFXP6fP3M2oRKjyX8EZHTSky/6GOMy860mzmded2VVFvfg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/api-logs": "^0.56.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -848,13 +1029,14 @@ } }, "node_modules/@opentelemetry/instrumentation-redis": { - "version": "0.39.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.39.1.tgz", - "integrity": "sha512-HUjTerD84jRJnSyDrRPqn6xQ7K91o9qLflRPZqzRvq0GRj5PMfc6TJ/z3q/ayWy/2Kzffhrp7HCIVp0u0TkgUg==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.45.0.tgz", + "integrity": "sha512-IKooJ9pUwPhL5nGEMi9QXvO6pMhwgJe6BzmZ0BMoZweKasC0Y0GekKjPw86Lhx+X1xoJCOFJhoWE9c5SnBJVcw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/redis-common": "^0.36.2", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -864,13 +1046,14 @@ } }, "node_modules/@opentelemetry/instrumentation-redis-4": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.39.0.tgz", - "integrity": "sha512-Zpfqfi83KeKgVQ0C2083GZPon3ZPYQ5E59v9FAbhubtOoUb9Rh7n111YD8FPW3sgx6JKp1odXmBmfQhWCaTOpQ==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.45.0.tgz", + "integrity": "sha512-Sjgym1xn3mdxPRH5CNZtoz+bFd3E3NlGIu7FoYr4YrQouCc9PbnmoBcmSkEdDy5LYgzNildPgsjx9l0EKNjKTQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/redis-common": "^0.36.2", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -880,13 +1063,14 @@ } }, "node_modules/@opentelemetry/instrumentation-restify": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.38.0.tgz", - "integrity": "sha512-VYK47Z9GBaZX5MQLL7kZDdzQDdyUtHRD4J/GSr6kdwmIpdpUQXLsV3EnboeB8P+BlpucF57FyJKE8yWTOEMfnA==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.44.0.tgz", + "integrity": "sha512-JUIs6NcSkH+AtUgaUknD+1M4GQA5vOPKqwJqdaJbaEQzHo+QTDn8GY1iiSKXktL68OwRddbyQv6tu2NyCGcKSw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -896,12 +1080,13 @@ } }, "node_modules/@opentelemetry/instrumentation-router": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.37.0.tgz", - "integrity": "sha512-+OPcm7C9I5oPqnpStE+1WkdPWjRx0k5XKratxQmIDFZrmhRcqvMte3vrrzE/OBPg9iqh2tKrSe0y7+0sRfTJyQ==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.43.0.tgz", + "integrity": "sha512-IkSBWfzlpwLZSJMj3rDG21bDYqbWvW3D/HEx5yCxjUUWVbcz9tRKXjxwG1LB6ZJfnXwwVIOgbz+7XW0HyAXr9Q==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -911,11 +1096,12 @@ } }, "node_modules/@opentelemetry/instrumentation-runtime-node": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-runtime-node/-/instrumentation-runtime-node-0.10.0.tgz", - "integrity": "sha512-hvwbi9iSqiclqSkRNFLW/3/v5drUPfD8V9zAmXZWZA68X0yygb2nPQlGce9Aba7p3l+Z4wGL8WcPtHDN2XzpoQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-runtime-node/-/instrumentation-runtime-node-0.11.0.tgz", + "integrity": "sha512-d7ZdzwnCpqaqvHkjowh8WA7/ZYr1jbGIo8QIpNPO+fqaxcm5NkzwP4kGpxI4PTnmeUTKcd6Bl/cPcKkR89u0ng==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.55.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=17.4.0" @@ -924,54 +1110,14 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-runtime-node/node_modules/@opentelemetry/api-logs": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.55.0.tgz", - "integrity": "sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg==", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/instrumentation-runtime-node/node_modules/@opentelemetry/instrumentation": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.55.0.tgz", - "integrity": "sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ==", - "dependencies": { - "@opentelemetry/api-logs": "0.55.0", - "@types/shimmer": "^1.2.0", - "import-in-the-middle": "^1.8.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-runtime-node/node_modules/import-in-the-middle": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz", - "integrity": "sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==", - "dependencies": { - "acorn": "^8.8.2", - "acorn-import-attributes": "^1.9.5", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" - } - }, "node_modules/@opentelemetry/instrumentation-socket.io": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.39.0.tgz", - "integrity": "sha512-4J2ehk5mJyDT6j2yJCOuPxAjit5QB1Fwzhx0LID5jjvhI9LxzZIGDNAPTTHyghSiaRDeNMzceXKkkEQJkg2MNw==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.45.0.tgz", + "integrity": "sha512-X/CUjHqX1mZHEqXjD4AgVA5VXW1JHIauj1LDEjUDky/3RCsUTysj031x0Sq+8yBwcPyHF6k9vZ8DNw+CfxscOQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -981,13 +1127,14 @@ } }, "node_modules/@opentelemetry/instrumentation-tedious": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.10.1.tgz", - "integrity": "sha512-maSXMxgS0szU52khQzAROV4nWr+3M8mZajMQOc3/7tYjo+Q3HlWAowOuagPvp4pwROK4x6oDaFYlY+ZSj1qjYA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.17.0.tgz", + "integrity": "sha512-yRBz2409an03uVd1Q2jWMt3SqwZqRFyKoWYYX3hBAtPDazJ4w5L+1VOij71TKwgZxZZNdDBXImTQjii+VeuzLg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.51.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/tedious": "^4.0.10" + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" }, "engines": { "node": ">=14" @@ -997,12 +1144,13 @@ } }, "node_modules/@opentelemetry/instrumentation-undici": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.2.0.tgz", - "integrity": "sha512-RH9WdVRtpnyp8kvya2RYqKsJouPxvHl7jKPsIfrbL8u2QCKloAGi0uEqDHoOS15ZRYPQTDXZ7d8jSpUgSQmvpA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.9.0.tgz", + "integrity": "sha512-lxc3cpUZ28CqbrWcUHxGW/ObDpMOYbuxF/ZOzeFZq54P9uJ2Cpa8gcrC9F716mtuiMaekwk8D6n34vg/JtkkxQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -1012,12 +1160,13 @@ } }, "node_modules/@opentelemetry/instrumentation-winston": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.37.0.tgz", - "integrity": "sha512-vOx55fxdNjo2XojJf8JN4jP7VVvQCh7UQzzQ2Q2FpGJpt8Z3EErKaY8xOBkOuJH0TtL/Q72rmIn9c+mRG46BxA==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.43.0.tgz", + "integrity": "sha512-TVvRwqjmf4+CcjsdkXc+VHiIG0Qzzim5dx8cN5wXRt4+UYIjyZpnhi/WmSjC0fJdkKb6DNjTIw7ktmB/eRj/jQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "^0.51.0", - "@opentelemetry/instrumentation": "^0.51.0" + "@opentelemetry/api-logs": "^0.56.0", + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -1027,75 +1176,82 @@ } }, "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.51.1.tgz", - "integrity": "sha512-UYlnOYyDdzo1Gw559EHCzru0RwhvuXCwoH8jGo9J4gO1TE58GjnEmIjomMsKBCym3qWNJfIQXw+9SZCV0DdQNg==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.56.0.tgz", + "integrity": "sha512-eURvv0fcmBE+KE1McUeRo+u0n18ZnUeSc7lDlW/dzlqFYasEbsztTK4v0Qf8C4vEY+aMTjPKUxBG0NX2Te3Pmw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-transformer": "0.56.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.51.1.tgz", - "integrity": "sha512-ZAS+4pq8o7dsugGTwV9s6JMKSxi+guIHdn0acOv0bqj26e9pWDFx5Ky+bI0aY46uR9Y0JyXqY+KAEYM/SO3DFA==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.56.0.tgz", + "integrity": "sha512-QqM4si8Ew8CW5xVk4mYbfusJzMXyk6tkYA5SI0w/5NBxmiZZaYPwQQ2cu58XUH2IMPAsi71yLJVJQaWBBCta0A==", + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/otlp-exporter-base": "0.51.1", - "protobufjs": "^7.2.3" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/otlp-exporter-base": "0.56.0", + "@opentelemetry/otlp-transformer": "0.56.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/otlp-proto-exporter-base": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.51.1.tgz", - "integrity": "sha512-gxxxwfk0inDMb5DLeuxQ3L8TtptxSiTNHE4nnAJH34IQXAVRhXSXW1rK8PmDKDngRPIZ6J7ncUCjjIn8b+AgqQ==", + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.56.0.tgz", + "integrity": "sha512-kVkH/W2W7EpgWWpyU5VnnjIdSD7Y7FljQYObAQSKdRcejiwMj2glypZtUdfq1LTJcv4ht0jyTrw1D3CCxssNtQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/otlp-exporter-base": "0.51.1", - "protobufjs": "^7.2.3" + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-logs": "0.56.0", + "@opentelemetry/sdk-metrics": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0", + "protobufjs": "^7.3.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.51.1.tgz", - "integrity": "sha512-OppYOXwV9LQqqtYUCywqoOqX/JT9LQ5/FMuPZ//eTkvuHdUC4ZMwz2c6uSoT2R90GWvvGnF1iEqTGyTT3xAt2Q==", + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.56.0.tgz", + "integrity": "sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.51.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-logs": "0.51.1", - "@opentelemetry/sdk-metrics": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1" + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "node_modules/@opentelemetry/propagation-utils": { - "version": "0.30.9", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.9.tgz", - "integrity": "sha512-DP2Y91zyw2uNgKLbej6c3IIjyF27sKnRK/UY/6msMIVGPIbZgtH9L0JOioN5L5kYjEkH4CDvt921SjutN7hY4A==", + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.14.tgz", + "integrity": "sha512-RsdKGFd0PYG5Aop9aq8khYbR8Oq+lYTQBX/9/pk7b+8+0WwdFqrvGDmRxpBAH9hgIvtUgETeshlYctwjo2l9SQ==", + "license": "Apache-2.0", "engines": { "node": ">=14" }, @@ -1103,63 +1259,54 @@ "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/propagator-aws-xray": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.24.1.tgz", - "integrity": "sha512-RzwoLe6QzsYGcpmxxDbbbgSpe3ncxSM4dtFHXh/rCYGjyq0nZGXKvk26mJtWZ4kQ3nuiIoqSZueIuGmt/mvOTA==", - "dependencies": { - "@opentelemetry/core": "1.24.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" - } - }, "node_modules/@opentelemetry/propagator-b3": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.24.1.tgz", - "integrity": "sha512-nda97ZwhpZKyUJTXqQuKzNhPMUgMLunbbGWn8kroBwegn+nh6OhtyGkrVQsQLNdVKJl0KeB5z0ZgeWszrYhwFw==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.29.0.tgz", + "integrity": "sha512-ktsNDlqhu+/IPGEJRMj81upg2JupUp+SwW3n1ZVZTnrDiYUiMUW41vhaziA7Q6UDhbZvZ58skDpQhe2ZgNIPvg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1" + "@opentelemetry/core": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.24.1.tgz", - "integrity": "sha512-7bRBJn3FG1l195A1m+xXRHvgzAOBsfmRi9uZ5Da18oTh7BLmNDiA8+kpk51FpTsU1PCikPVpRDNPhKVB6lyzZg==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.29.0.tgz", + "integrity": "sha512-EXIEYmFgybnFMijVgqx1mq/diWwSQcd0JWVksytAVQEnAiaDvP45WuncEVQkFIAC0gVxa2+Xr8wL5pF5jCVKbg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1" + "@opentelemetry/core": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/redis-common": { "version": "0.36.2", "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", "engines": { "node": ">=14" } }, "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.28.9.tgz", - "integrity": "sha512-cTV2YFFkKAZUZgs5SMknIX4MmFb/0KQhrJuiz2dtJKnI1n7OanCgnMkuXzJ5+CbifRB57I2g3HnwcSPOx3zsKw==", + "version": "0.29.6", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.6.tgz", + "integrity": "sha512-BrwutS9Koh08jFhwencsc1t60qEUueMxN+YcN78LE+3r6JMkYgrQzk7C8rJe0nww8KpjZ6A2n7PW+C0FAr8oxg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/resources": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -1169,13 +1316,14 @@ } }, "node_modules/@opentelemetry/resource-detector-aws": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.5.0.tgz", - "integrity": "sha512-JNk/kSzzNQaiMo/F0b/bm8S3Qtr/m89BckN9B4U/cPHSqKLdxX03vgRBOqkXJ5KlAD8kc6K1Etcr8QfvGw6+uA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.9.0.tgz", + "integrity": "sha512-oah9Gek5rrpohjMhQYESnXMDw79wrfhOp0NhjMSjKY9EvNJuDurk/HU3TJ8r2xd/xpGZlcHRZcsJ+qR+tLiQ4g==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.0.0", - "@opentelemetry/resources": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -1185,12 +1333,14 @@ } }, "node_modules/@opentelemetry/resource-detector-azure": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.7.tgz", - "integrity": "sha512-+R3VnPaK6rc+kKfdvhgQlYDGXy0+JMAjPNDjcRQSeXY8pVOzHGCIrY+gT6gUrpjsw8w1EgNBVofr+qeNOr+o4A==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.4.0.tgz", + "integrity": "sha512-Ix3DwsbUWyLbBCZ1yqT3hJxc5wFPaJ6dvsIgJA/nmjScwscRCWQqTWXywY4+Q+tytLPnuAKZWbBhxcNvNlcn5Q==", + "license": "Apache-2.0", "dependencies": { + "@opentelemetry/core": "^1.25.1", "@opentelemetry/resources": "^1.10.1", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -1200,12 +1350,14 @@ } }, "node_modules/@opentelemetry/resource-detector-container": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.3.9.tgz", - "integrity": "sha512-kfJ78av51EKk09fn5cwe5UNt+G7UBLvPTmfK/nZzvmNs7enw/TGB8X0j0JUHb9487ypRGph6MBoeP1+qZh+w1A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.5.2.tgz", + "integrity": "sha512-P06PiIC3kDa/UTLupClJvhLeub84x3eNkDth2yXaMP3UZe/BRGv+R6eeUbMN/MvZhARkpSFnoWpXBHpnq/JiYQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/resources": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" @@ -1215,13 +1367,14 @@ } }, "node_modules/@opentelemetry/resource-detector-gcp": { - "version": "0.29.9", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.9.tgz", - "integrity": "sha512-rTUm0U0cF8f75JzeMpMLbQ4m1uLph+Q31DQKk8ekdDe6SZ1EPD4rM1JgRnbxZtsC2sE8ju87s5nEio77xPz7dQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.31.0.tgz", + "integrity": "sha512-KNd2Ab3hc0PsBVtWMie11AbQ7i1KXNPYlgTsyGPCHBed6KARVfPekfjWbPEbTXwart4la98abxL0sJLsfgyJSA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.0.0", - "@opentelemetry/resources": "^1.0.0", - "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0", "gcp-metadata": "^6.0.0" }, "engines": { @@ -1232,117 +1385,126 @@ } }, "node_modules/@opentelemetry/resources": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.24.1.tgz", - "integrity": "sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.29.0.tgz", + "integrity": "sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/semantic-conventions": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.51.1.tgz", - "integrity": "sha512-ULQQtl82b673PpZc5/0EtH4V+BrwVOgKJZEB7tYZnGTG3I98tQVk89S9/JSixomDr++F4ih+LSJTCqIKBz+MQQ==", + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.29.0.tgz", + "integrity": "sha512-MkVtuzDjXZaUJSuJlHn6BSXjcQlMvHcsDV7LjY4P6AJeffMa4+kIGDjzsCf6DkAh6Vqlwag5EWEam3KZOX5Drw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.9.0", - "@opentelemetry/api-logs": ">=0.39.1" + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.24.1.tgz", - "integrity": "sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ==", + "node_modules/@opentelemetry/sdk-node": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.56.0.tgz", + "integrity": "sha512-FOY7tWboBBxqftLNHPJFmDXo9fRoPd2PlzfEvSd6058BJM9gY4pWCg8lbVlu03aBrQjcfCTAhXk/tz1Yqd/m6g==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1", - "lodash.merge": "^4.6.2" + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/exporter-logs-otlp-grpc": "0.56.0", + "@opentelemetry/exporter-logs-otlp-http": "0.56.0", + "@opentelemetry/exporter-logs-otlp-proto": "0.56.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.56.0", + "@opentelemetry/exporter-trace-otlp-http": "0.56.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.56.0", + "@opentelemetry/exporter-zipkin": "1.29.0", + "@opentelemetry/instrumentation": "0.56.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-logs": "0.56.0", + "@opentelemetry/sdk-metrics": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0", + "@opentelemetry/sdk-trace-node": "1.29.0", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-node": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.51.1.tgz", - "integrity": "sha512-GgmNF9C+6esr8PIJxCqHw84rEOkYm6XdFWZ2+Wyc3qaUt92ACoN7uSw5iKNvaUq62W0xii1wsGxwHzyENtPP8w==", + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/sdk-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.56.0.tgz", + "integrity": "sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.51.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.51.1", - "@opentelemetry/exporter-trace-otlp-http": "0.51.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.51.1", - "@opentelemetry/exporter-zipkin": "1.24.1", - "@opentelemetry/instrumentation": "0.51.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/sdk-logs": "0.51.1", - "@opentelemetry/sdk-metrics": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1", - "@opentelemetry/sdk-trace-node": "1.24.1", - "@opentelemetry/semantic-conventions": "1.24.1" + "@opentelemetry/api-logs": "0.56.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.24.1.tgz", - "integrity": "sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.29.0.tgz", + "integrity": "sha512-hEOpAYLKXF3wGJpXOtWsxEtqBgde0SCv+w+jvr3/UusR4ll3QrENEGnSl1WDCyRrpqOQ5NCNOvZch9UFVa7MnQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/semantic-conventions": "1.24.1" + "@opentelemetry/core": "1.29.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.24.1.tgz", - "integrity": "sha512-/FZX8uWaGIAwsDhqI8VvQ+qWtfMNlXjaFYGc+vmxgdRFppCSSIRwrPyIhJO1qx61okyYhoyxVEZAfoiNxrfJCg==", - "dependencies": { - "@opentelemetry/context-async-hooks": "1.24.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/propagator-b3": "1.24.1", - "@opentelemetry/propagator-jaeger": "1.24.1", - "@opentelemetry/sdk-trace-base": "1.24.1", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.29.0.tgz", + "integrity": "sha512-ZpGYt+VnMu6O0SRKzhuIivr7qJm3GpWnTCMuJspu4kt3QWIpIenwixo5Vvjuu3R4h2Onl/8dtqAiPIs92xd5ww==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.29.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/propagator-b3": "1.29.0", + "@opentelemetry/propagator-jaeger": "1.29.0", + "@opentelemetry/sdk-trace-base": "1.29.0", "semver": "^7.5.2" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.1.tgz", - "integrity": "sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -1351,6 +1513,7 @@ "version": "0.40.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.1.0" }, @@ -1428,32 +1591,17 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, - "node_modules/@types/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/aws-lambda": { - "version": "8.10.122", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", - "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==" - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } + "version": "8.10.143", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.143.tgz", + "integrity": "sha512-u5vzlcR14ge/4pMTTMDQr3MF0wEe38B2F9o84uC4F43vN5DGTy63npRrB6jQhyt+C0lGv4ZfiRcRkqJoZuPnmg==", + "license": "MIT" }, "node_modules/@types/bunyan": { "version": "1.8.9", "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1462,111 +1610,25 @@ "version": "3.4.36", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/content-disposition": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", - "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==" - }, - "node_modules/@types/cookies": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", - "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", - "dependencies": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", - "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-assert": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", - "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/keygrip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", - "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==" - }, - "node_modules/@types/koa": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", - "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", - "dependencies": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "node_modules/@types/koa__router": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/@types/koa__router/-/koa__router-12.0.3.tgz", - "integrity": "sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==", - "dependencies": { - "@types/koa": "*" - } - }, - "node_modules/@types/koa-compose": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", - "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", - "dependencies": { - "@types/koa": "*" - } - }, "node_modules/@types/memcached": { "version": "2.2.10", "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, "node_modules/@types/mysql": { - "version": "2.15.22", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", - "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1583,6 +1645,7 @@ "version": "8.6.1", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", "dependencies": { "@types/node": "*", "pg-protocol": "*", @@ -1590,70 +1653,34 @@ } }, "node_modules/@types/pg-pool": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", - "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "license": "MIT", "dependencies": { "@types/pg": "*" } }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, "node_modules/@types/shimmer": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT" }, "node_modules/@types/tedious": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1665,30 +1692,30 @@ "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", "peerDependencies": { "acorn": "^8" } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -1721,6 +1748,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -1739,56 +1767,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1808,9 +1795,10 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", @@ -1842,11 +1830,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1905,31 +1894,17 @@ "node": ">=6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-redact": { "version": "3.3.0", @@ -1939,6 +1914,12 @@ "node": ">=6" } }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -1947,6 +1928,12 @@ "is-callable": "^1.1.3" } }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "license": "MIT" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -1956,9 +1943,10 @@ } }, "node_modules/gaxios": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.6.0.tgz", - "integrity": "sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -1970,10 +1958,24 @@ "node": ">=14" } }, + "node_modules/gaxios/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/gcp-metadata": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "license": "Apache-2.0", "dependencies": { "gaxios": "^6.0.0", "json-bigint": "^1.0.0" @@ -2020,13 +2022,14 @@ } }, "node_modules/grpc-js-health-check": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grpc-js-health-check/-/grpc-js-health-check-1.1.0.tgz", - "integrity": "sha512-kmCXpt9jmkG5zlVvcC2tSN+3287X2Z8VF6HdhcsS644FonCN8mQe1xEHSYNJsyOeK4Knaz1R1RGy1MNte2Vnbg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/grpc-js-health-check/-/grpc-js-health-check-1.2.2.tgz", + "integrity": "sha512-Zp+oL1JXnX7KitxzApbnp8cJgiJ9jlK2bbZq++aBJyqUumyBadKU5BxmJ3BJgi3q0vrGa2/F5Yj6iJDcylPSyA==", + "license": "ISC", "dependencies": { - "@grpc/grpc-js": "^1.8.12", - "@grpc/proto-loader": "^0.7.5", - "lodash": "^4.17.20" + "@grpc/grpc-js": "^1.9.13", + "@grpc/proto-loader": "^0.7.10", + "lodash": "^4.17.21" } }, "node_modules/has-property-descriptors": { @@ -2077,9 +2080,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2088,40 +2092,23 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { "node": ">= 14" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/import-in-the-middle": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.4.tgz", - "integrity": "sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.12.0.tgz", + "integrity": "sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w==", + "license": "Apache-2.0", "dependencies": { "acorn": "^8.8.2", "acorn-import-attributes": "^1.9.5", @@ -2133,6 +2120,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2169,11 +2157,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", + "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2205,6 +2197,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -2230,14 +2223,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } }, "node_modules/json-logic-engine": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/json-logic-engine/-/json-logic-engine-1.3.1.tgz", - "integrity": "sha512-ek2rHlbzVjsWG/5HM8P/ljYrYS5nDFYtSHk2r/U4oaUGKRWyZo7bDyDiLmYSfEmZp2LJMgnjVo2b0tHc+cqVHQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/json-logic-engine/-/json-logic-engine-1.3.4.tgz", + "integrity": "sha512-p+WXFVTDWjZiM45+H2MSnAz984PPt2QampUGeMmgxWllsJjF8j8ucA3llmbL0xJkkV/7uj4MhhgJIYZ1MbkGiA==", + "license": "MIT", "engines": { "node": ">=12.22.7" } @@ -2245,7 +2240,8 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/lodash": { "version": "4.17.21", @@ -2257,41 +2253,37 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, "node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "license": "ISC", "engines": { - "node": ">=10" + "node": "14 || >=16.14" } }, "node_modules/module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", + "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2311,6 +2303,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -2326,25 +2319,29 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==", + "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -2357,39 +2354,41 @@ } }, "node_modules/pino": { - "version": "8.16.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.1.tgz", - "integrity": "sha512-3bKsVhBmgPjGV9pyn4fO/8RtoVDR8ssW1ev819FsRXlRNgW8gR/9Kx+gCK4UPWd4JjrRDLWpzd/pb1AyWm3MGA==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", + "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", "dependencies": { - "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.0.0", @@ -2403,6 +2402,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -2411,6 +2411,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2419,6 +2420,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2427,6 +2429,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -2434,24 +2437,18 @@ "node": ">=0.10.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-warning": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", - "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", + "license": "MIT" }, "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -2470,38 +2467,16 @@ "node": ">=12.0.0" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" }, - "node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -2518,29 +2493,32 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-in-the-middle": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz", - "integrity": "sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", + "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", + "debug": "^4.3.5", "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" + "resolve": "^1.22.8" }, "engines": { "node": ">=8.6.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz", + "integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2551,25 +2529,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", @@ -2579,9 +2538,10 @@ } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2608,7 +2568,8 @@ "node_modules/shimmer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause" }, "node_modules/simple-card-validator": { "version": "1.1.0", @@ -2616,9 +2577,10 @@ "integrity": "sha512-ag7OoeyWwzDrDyiffyrIWumxDJ7+VCbhOoHxzY6ck8b7qmGEA7A5NS9GxXbqmuE2wIgBAQ0S5vNiIclHtgliQg==" }, "node_modules/sonic-boom": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.7.0.tgz", - "integrity": "sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -2627,18 +2589,11 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2667,6 +2622,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2675,9 +2631,10 @@ } }, "node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } @@ -2685,26 +2642,20 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -2718,26 +2669,29 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -2781,6 +2735,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -2796,7 +2751,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", diff --git a/src/paymentservice/package.json b/src/paymentservice/package.json index 4071520ea9..2c0365b0c1 100644 --- a/src/paymentservice/package.json +++ b/src/paymentservice/package.json @@ -1,37 +1,34 @@ { "name": "paymentservice", - "version": "1.4.0", - "description": "Payment Microservice", + "description": "Payment Service", "repository": "https://github.com/opentelemetry/opentelemetry-demo", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "lint": "semistandard *.js", "start": "node --require ./opentelemetry.js index.js" }, "author": "Jonathan Lui", "license": "ISC", "dependencies": { - "@grpc/grpc-js": "1.10.8", + "@grpc/grpc-js": "1.10.11", "@grpc/proto-loader": "0.7.13", - "@openfeature/flagd-provider": "0.13.0", - "@openfeature/server-sdk": "1.14.0", - "@opentelemetry/auto-instrumentations-node": "0.46.1", - "@opentelemetry/core": "1.24.1", - "@opentelemetry/resources": "1.24.1", - "@opentelemetry/api": "1.8.0", - "@opentelemetry/sdk-metrics": "1.24.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.51.1", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.51.1", - "@opentelemetry/sdk-node": "0.51.1", - "@opentelemetry/instrumentation-runtime-node": "^0.10.0", - "@opentelemetry/resource-detector-alibaba-cloud": "0.28.9", - "@opentelemetry/resource-detector-aws": "1.5.0", - "@opentelemetry/resource-detector-container": "0.3.9", - "@opentelemetry/resource-detector-gcp": "0.29.9", - "grpc-js-health-check": "1.1.0", - "pino": "8.16.1", + "@openfeature/flagd-provider": "0.13.1", + "@openfeature/server-sdk": "1.16.2", + "@opentelemetry/api": "1.9.0", + "@opentelemetry/auto-instrumentations-node": "0.54.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.56.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.56.0", + "@opentelemetry/instrumentation-runtime-node": "0.11.0", + "@opentelemetry/resource-detector-alibaba-cloud": "0.29.6", + "@opentelemetry/resource-detector-aws": "1.9.0", + "@opentelemetry/resource-detector-container": "0.5.2", + "@opentelemetry/resource-detector-gcp": "0.31.0", + "@opentelemetry/resources": "1.29.0", + "@opentelemetry/sdk-metrics": "1.29.0", + "@opentelemetry/sdk-node": "0.56.0", + "grpc-js-health-check": "1.2.2", + "pino": "9.5.0", "simple-card-validator": "1.1.0", - "uuid": "9.0.1" + "uuid": "11.0.3" } } From fca8fd1374081a3df2699f08cf5784dab16919a3 Mon Sep 17 00:00:00 2001 From: Sozhan Natarajan Date: Fri, 20 Dec 2024 00:20:19 +0530 Subject: [PATCH 12/24] [shipping] rename shippingservice to shipping (#1842) --- .dockerignore | 2 +- .env | 6 ++--- .github/workflows/component-build-images.yml | 4 ++-- .gitignore | 4 ++-- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 4 ++-- docker-compose.minimal.yml | 24 +++++++++---------- docker-compose.yml | 24 +++++++++---------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- src/checkoutservice/main.go | 2 +- src/frontend/gateways/rpc/Shipping.gateway.ts | 4 ++-- src/frontend/next.config.js | 4 ++-- .../.dockerignore | 0 src/{shippingservice => shipping}/Cargo.lock | 2 +- src/{shippingservice => shipping}/Cargo.toml | 4 ++-- src/{shippingservice => shipping}/Dockerfile | 12 +++++----- src/{shippingservice => shipping}/README.md | 2 +- src/{shippingservice => shipping}/build.rs | 0 src/{shippingservice => shipping}/src/main.rs | 2 +- .../src/shipping_service.rs | 4 ++-- .../src/shipping_service/quote.rs | 0 .../src/shipping_service/tracking.rs | 0 .../src/telemetry.rs | 0 .../src/telemetry/logs_conf.rs | 0 .../src/telemetry/resources_conf.rs | 0 .../src/telemetry/traces_conf.rs | 0 test/tracetesting/run.bash | 6 ++--- .../{shippingservice => shipping}/all.yaml | 0 .../empty-quote.yaml | 2 +- .../{shippingservice => shipping}/order.yaml | 2 +- .../{shippingservice => shipping}/quote.yaml | 2 +- 33 files changed, 64 insertions(+), 62 deletions(-) rename src/{shippingservice => shipping}/.dockerignore (100%) rename src/{shippingservice => shipping}/Cargo.lock (99%) rename src/{shippingservice => shipping}/Cargo.toml (96%) rename src/{shippingservice => shipping}/Dockerfile (91%) rename src/{shippingservice => shipping}/README.md (91%) rename src/{shippingservice => shipping}/build.rs (100%) rename src/{shippingservice => shipping}/src/main.rs (91%) rename src/{shippingservice => shipping}/src/shipping_service.rs (98%) rename src/{shippingservice => shipping}/src/shipping_service/quote.rs (100%) rename src/{shippingservice => shipping}/src/shipping_service/tracking.rs (100%) rename src/{shippingservice => shipping}/src/telemetry.rs (100%) rename src/{shippingservice => shipping}/src/telemetry/logs_conf.rs (100%) rename src/{shippingservice => shipping}/src/telemetry/resources_conf.rs (100%) rename src/{shippingservice => shipping}/src/telemetry/traces_conf.rs (100%) rename test/tracetesting/{shippingservice => shipping}/all.yaml (100%) rename test/tracetesting/{shippingservice => shipping}/empty-quote.yaml (96%) rename test/tracetesting/{shippingservice => shipping}/order.yaml (96%) rename test/tracetesting/{shippingservice => shipping}/quote.yaml (96%) diff --git a/.dockerignore b/.dockerignore index 31fcb382d4..95710cb92a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -28,7 +28,7 @@ src/*/*/Dockerfile ################################### # shippingservice -./src/shippingservice/target +./src/shipping/target ################################### # Mix artifacts diff --git a/.env b/.env index 02d6da5e4b..f55b2216d8 100644 --- a/.env +++ b/.env @@ -122,9 +122,9 @@ RECOMMENDATION_SERVICE_ADDR=recommendationservice:${RECOMMENDATION_SERVICE_PORT} RECOMMENDATION_SERVICE_DOCKERFILE=./src/recommendationservice/Dockerfile # Shipping Service -SHIPPING_SERVICE_PORT=50050 -SHIPPING_SERVICE_ADDR=shippingservice:${SHIPPING_SERVICE_PORT} -SHIPPING_SERVICE_DOCKERFILE=./src/shippingservice/Dockerfile +SHIPPING_PORT=50050 +SHIPPING_ADDR=shipping:${SHIPPING_PORT} +SHIPPING_DOCKERFILE=./src/shipping/Dockerfile # ****************** # Dependent Services diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index f1733c1ee8..a36b8fbbac 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -119,8 +119,8 @@ jobs: tag_suffix: recommendationservice context: ./ setup-qemu: true - - file: ./src/shippingservice/Dockerfile - tag_suffix: shippingservice + - file: ./src/shipping/Dockerfile + tag_suffix: shipping context: ./ setup-qemu: true - file: ./src/flagd-ui/Dockerfile diff --git a/.gitignore b/.gitignore index d63384d14e..530fd480e9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,7 @@ composer.lock src/frontend/cypress/videos src/frontend/cypress/screenshots -src/shippingservice/target/ +src/shipping/target/ test/tracetesting/tracetesting-vars.yaml # Ignore copied/generated protobuf files @@ -53,5 +53,5 @@ test/tracetesting/tracetesting-vars.yaml /src/frontend/pb/ /src/frontend/protos/ /src/paymentservice/demo.proto -/src/shippingservice/proto/ +/src/shipping/proto/ /src/currencyservice/proto diff --git a/CHANGELOG.md b/CHANGELOG.md index fbaefcb1d1..3cbdb4bd13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,8 @@ the release. ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) * [cart] rename cartservice to cart ([#1839](https://github.com/open-telemetry/opentelemetry-demo/pull/1839)) +* [shipping] rename shippingservice to shipping + ([#1842](https://github.com/open-telemetry/opentelemetry-demo/pull/1842)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 6d388d46c2..ef1269a2c1 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -46,7 +46,7 @@ services: - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - - SHIPPING_SERVICE_ADDR + - SHIPPING_ADDR - KAFKA_SERVICE_ADDR extra_hosts: - "host.docker.internal:host-gateway" @@ -81,7 +81,7 @@ services: condition: service_started recommendationservice: condition: service_started - shippingservice: + shipping: condition: service_started flagd: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 71b66a05e4..01ef2d74f6 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -104,7 +104,7 @@ services: - FLAGD_HOST - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - - SHIPPING_SERVICE_ADDR + - SHIPPING_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES @@ -120,7 +120,7 @@ services: condition: service_started productcatalogservice: condition: service_started - shippingservice: + shipping: condition: service_started otel-collector: condition: service_started @@ -205,7 +205,7 @@ services: - CURRENCY_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - - SHIPPING_SERVICE_ADDR + - SHIPPING_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES} - ENV_PLATFORM @@ -231,7 +231,7 @@ services: condition: service_started recommendationservice: condition: service_started - shippingservice: + shipping: condition: service_started otel-collector: condition: service_started @@ -468,27 +468,27 @@ services: logging: *logging # Shipping service - shippingservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-shippingservice - container_name: shipping-service + shipping: + image: ${IMAGE_NAME}:${DEMO_VERSION}-shipping + container_name: shipping build: context: ./ - dockerfile: ${SHIPPING_SERVICE_DOCKERFILE} + dockerfile: ${SHIPPING_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-shippingservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-shipping deploy: resources: limits: memory: 20M restart: unless-stopped ports: - - "${SHIPPING_SERVICE_PORT}" + - "${SHIPPING_PORT}" environment: - - SHIPPING_SERVICE_PORT + - SHIPPING_PORT - QUOTE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=shippingservice + - OTEL_SERVICE_NAME=shipping depends_on: otel-collector: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index 3bc8cde7ed..1c6614936c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -137,7 +137,7 @@ services: - EMAIL_SERVICE_ADDR - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - - SHIPPING_SERVICE_ADDR + - SHIPPING_ADDR - KAFKA_SERVICE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE @@ -154,7 +154,7 @@ services: condition: service_started productcatalogservice: condition: service_started - shippingservice: + shipping: condition: service_started otel-collector: condition: service_started @@ -277,7 +277,7 @@ services: - CURRENCY_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - - SHIPPING_SERVICE_ADDR + - SHIPPING_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES} - ENV_PLATFORM @@ -303,7 +303,7 @@ services: condition: service_started recommendationservice: condition: service_started - shippingservice: + shipping: condition: service_started otel-collector: condition: service_started @@ -553,27 +553,27 @@ services: logging: *logging # Shipping service - shippingservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-shippingservice - container_name: shipping-service + shipping: + image: ${IMAGE_NAME}:${DEMO_VERSION}-shipping + container_name: shipping build: context: ./ - dockerfile: ${SHIPPING_SERVICE_DOCKERFILE} + dockerfile: ${SHIPPING_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-shippingservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-shipping deploy: resources: limits: memory: 20M restart: unless-stopped ports: - - "${SHIPPING_SERVICE_PORT}" + - "${SHIPPING_PORT}" environment: - - SHIPPING_SERVICE_PORT + - SHIPPING_PORT - QUOTE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=shippingservice + - OTEL_SERVICE_NAME=shipping depends_on: otel-collector: condition: service_started diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index c7b7842418..a1600f71e4 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -32,4 +32,4 @@ gen_proto_go checkoutservice gen_proto_go productcatalogservice #gen_proto_php quote gen_proto_python recommendationservice -#gen_proto_rust shippingservice +#gen_proto_rust shipping diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index cd456f40c5..e393ec5dd2 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -76,4 +76,4 @@ gen_proto_js paymentservice gen_proto_go productcatalogservice # gen_proto_php quote gen_proto_python recommendationservice -gen_proto_rust shippingservice +gen_proto_rust shipping diff --git a/renovate.json5 b/renovate.json5 index ba6eaeee8e..e261118a44 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -91,8 +91,8 @@ "groupName": "recommendationservice", }, { - "matchFileNames": ["src/shippingservice/**"], - "groupName": "shippingservice", + "matchFileNames": ["src/shipping/**"], + "groupName": "shipping", }, { // intentionally using Java 11 in some examples diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index 3258976320..b3f84cacac 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -167,7 +167,7 @@ func main() { svc := new(checkoutService) - mustMapEnv(&svc.shippingSvcAddr, "SHIPPING_SERVICE_ADDR") + mustMapEnv(&svc.shippingSvcAddr, "SHIPPING_ADDR") c := mustCreateClient(svc.shippingSvcAddr) svc.shippingSvcClient = pb.NewShippingServiceClient(c) defer c.Close() diff --git a/src/frontend/gateways/rpc/Shipping.gateway.ts b/src/frontend/gateways/rpc/Shipping.gateway.ts index 3ebaedd64c..17fde68570 100644 --- a/src/frontend/gateways/rpc/Shipping.gateway.ts +++ b/src/frontend/gateways/rpc/Shipping.gateway.ts @@ -4,9 +4,9 @@ import { ChannelCredentials } from '@grpc/grpc-js'; import { Address, CartItem, GetQuoteResponse, ShippingServiceClient } from '../../protos/demo'; -const { SHIPPING_SERVICE_ADDR = '' } = process.env; +const { SHIPPING_ADDR = '' } = process.env; -const client = new ShippingServiceClient(SHIPPING_SERVICE_ADDR, ChannelCredentials.createInsecure()); +const client = new ShippingServiceClient(SHIPPING_ADDR, ChannelCredentials.createInsecure()); const ShippingGateway = () => ({ getShippingCost(itemList: CartItem[], address: Address) { diff --git a/src/frontend/next.config.js b/src/frontend/next.config.js index e81a2ebc80..4c680c1fe3 100755 --- a/src/frontend/next.config.js +++ b/src/frontend/next.config.js @@ -19,7 +19,7 @@ const { CURRENCY_SERVICE_ADDR = '', PRODUCT_CATALOG_SERVICE_ADDR = '', RECOMMENDATION_SERVICE_ADDR = '', - SHIPPING_SERVICE_ADDR = '', + SHIPPING_ADDR = '', ENV_PLATFORM = '', OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = '', OTEL_SERVICE_NAME = 'frontend', @@ -51,7 +51,7 @@ const nextConfig = { CURRENCY_SERVICE_ADDR, PRODUCT_CATALOG_SERVICE_ADDR, RECOMMENDATION_SERVICE_ADDR, - SHIPPING_SERVICE_ADDR, + SHIPPING_ADDR, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, NEXT_PUBLIC_PLATFORM: ENV_PLATFORM, NEXT_PUBLIC_OTEL_SERVICE_NAME: OTEL_SERVICE_NAME, diff --git a/src/shippingservice/.dockerignore b/src/shipping/.dockerignore similarity index 100% rename from src/shippingservice/.dockerignore rename to src/shipping/.dockerignore diff --git a/src/shippingservice/Cargo.lock b/src/shipping/Cargo.lock similarity index 99% rename from src/shippingservice/Cargo.lock rename to src/shipping/Cargo.lock index 3e7f850370..a73020c8e8 100644 --- a/src/shippingservice/Cargo.lock +++ b/src/shipping/Cargo.lock @@ -1131,7 +1131,7 @@ dependencies = [ ] [[package]] -name = "shippingservice" +name = "shipping" version = "1.8.0" dependencies = [ "log", diff --git a/src/shippingservice/Cargo.toml b/src/shipping/Cargo.toml similarity index 96% rename from src/shippingservice/Cargo.toml rename to src/shipping/Cargo.toml index d285fd6701..59152ee6b5 100644 --- a/src/shippingservice/Cargo.toml +++ b/src/shipping/Cargo.toml @@ -1,12 +1,12 @@ [package] -name = "shippingservice" +name = "shipping" version = "1.8.0" edition = "2021" [[bin]] -name = "shippingservice" +name = "shipping" path = "src/main.rs" [features] diff --git a/src/shippingservice/Dockerfile b/src/shipping/Dockerfile similarity index 91% rename from src/shippingservice/Dockerfile rename to src/shipping/Dockerfile index 8ff400ff3e..72927b241f 100644 --- a/src/shippingservice/Dockerfile +++ b/src/shipping/Dockerfile @@ -27,7 +27,7 @@ RUN if [ "${TARGETPLATFORM}" = "${BUILDPLATFORM}" ] ; then \ WORKDIR /app/ -COPY /src/shippingservice/ /app/ +COPY /src/shipping/ /app/ COPY /pb/ /app/proto/ # Compile or crosscompile @@ -38,13 +38,13 @@ RUN if [ "${TARGETPLATFORM}" = "${BUILDPLATFORM}" ] ; then \ CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \ CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ \ cargo build -r --features="dockerproto" --target aarch64-unknown-linux-gnu && \ - cp /app/target/aarch64-unknown-linux-gnu/release/shippingservice /app/target/release/shippingservice; \ + cp /app/target/aarch64-unknown-linux-gnu/release/shipping /app/target/release/shipping; \ elif [ "${TARGETPLATFORM}" = "linux/amd64" ] ; then \ env CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc \ CC_x86_64_unknown_linux_gnu=x86_64-linux-gnu-gcc \ CXX_x86_64_unknown_linux_gnu=x86_64-linux-gnu-g++ \ cargo build -r --features="dockerproto" --target x86_64-unknown-linux-gnu && \ - cp /app/target/x86_64-unknown-linux-gnu/release/shippingservice /app/target/release/shippingservice; \ + cp /app/target/x86_64-unknown-linux-gnu/release/shipping /app/target/release/shipping; \ else \ echo "${TARGETPLATFORM} is not supported"; \ exit 1; \ @@ -58,8 +58,8 @@ RUN wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health FROM debian:bookworm-slim AS release WORKDIR /app -COPY --from=builder /app/target/release/shippingservice /app/shippingservice +COPY --from=builder /app/target/release/shipping /app/shipping COPY --from=builder /bin/grpc_health_probe /bin/grpc_health_probe -EXPOSE ${SHIPPING_SERVICE_PORT} -ENTRYPOINT ["/app/shippingservice"] +EXPOSE ${SHIPPING_PORT} +ENTRYPOINT ["/app/shipping"] diff --git a/src/shippingservice/README.md b/src/shipping/README.md similarity index 91% rename from src/shippingservice/README.md rename to src/shipping/README.md index fa49736038..9845726348 100644 --- a/src/shippingservice/README.md +++ b/src/shipping/README.md @@ -13,7 +13,7 @@ rust [here](https://www.rust-lang.org/tools/install). From `../../`, run: ```sh -docker compose build shippingservice +docker compose build shipping ``` ## Test diff --git a/src/shippingservice/build.rs b/src/shipping/build.rs similarity index 100% rename from src/shippingservice/build.rs rename to src/shipping/build.rs diff --git a/src/shippingservice/src/main.rs b/src/shipping/src/main.rs similarity index 91% rename from src/shippingservice/src/main.rs rename to src/shipping/src/main.rs index 37a4121088..93cec643a9 100644 --- a/src/shippingservice/src/main.rs +++ b/src/shipping/src/main.rs @@ -28,7 +28,7 @@ async fn main() -> Result<(), Box> { init_reqwest_tracing(init_tracer()?)?; info!("OTel pipeline created"); - let port = env::var("SHIPPING_SERVICE_PORT").expect("$SHIPPING_SERVICE_PORT is not set"); + let port = env::var("SHIPPING_PORT").expect("$SHIPPING_PORT is not set"); let addr = format!("0.0.0.0:{}", port).parse()?; info!("listening on {}", addr); let shipper = ShippingServer::default(); diff --git a/src/shippingservice/src/shipping_service.rs b/src/shipping/src/shipping_service.rs similarity index 98% rename from src/shippingservice/src/shipping_service.rs rename to src/shipping/src/shipping_service.rs index dbb2ccc23d..aca8c1096f 100644 --- a/src/shippingservice/src/shipping_service.rs +++ b/src/shipping/src/shipping_service.rs @@ -70,7 +70,7 @@ impl ShippingService for ShippingServer { // We may want to ask another service for product pricing / info // (although now everything is assumed to be the same price) // check out the create_quote_from_count method to see how we use the span created here - let tracer = global::tracer("shippingservice"); + let tracer = global::tracer("shipping"); let mut span = tracer .span_builder("oteldemo.ShippingService/GetQuote") .with_kind(SpanKind::Server) @@ -125,7 +125,7 @@ impl ShippingService for ShippingServer { global::get_text_map_propagator(|prop| prop.extract(&MetadataMap(request.metadata()))); // in this case, generating a tracking ID is trivial // we'll create a span and associated events all in this function. - let tracer = global::tracer("shippingservice"); + let tracer = global::tracer("shipping"); let mut span = tracer .span_builder("oteldemo.ShippingService/ShipOrder") .with_kind(SpanKind::Server) diff --git a/src/shippingservice/src/shipping_service/quote.rs b/src/shipping/src/shipping_service/quote.rs similarity index 100% rename from src/shippingservice/src/shipping_service/quote.rs rename to src/shipping/src/shipping_service/quote.rs diff --git a/src/shippingservice/src/shipping_service/tracking.rs b/src/shipping/src/shipping_service/tracking.rs similarity index 100% rename from src/shippingservice/src/shipping_service/tracking.rs rename to src/shipping/src/shipping_service/tracking.rs diff --git a/src/shippingservice/src/telemetry.rs b/src/shipping/src/telemetry.rs similarity index 100% rename from src/shippingservice/src/telemetry.rs rename to src/shipping/src/telemetry.rs diff --git a/src/shippingservice/src/telemetry/logs_conf.rs b/src/shipping/src/telemetry/logs_conf.rs similarity index 100% rename from src/shippingservice/src/telemetry/logs_conf.rs rename to src/shipping/src/telemetry/logs_conf.rs diff --git a/src/shippingservice/src/telemetry/resources_conf.rs b/src/shipping/src/telemetry/resources_conf.rs similarity index 100% rename from src/shippingservice/src/telemetry/resources_conf.rs rename to src/shipping/src/telemetry/resources_conf.rs diff --git a/src/shippingservice/src/telemetry/traces_conf.rs b/src/shipping/src/telemetry/traces_conf.rs similarity index 100% rename from src/shippingservice/src/telemetry/traces_conf.rs rename to src/shipping/src/telemetry/traces_conf.rs diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index ce2f914d1f..3e043a86e5 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("ad" "cart" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shippingservice") +ALL_SERVICES=("ad" "cart" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shipping") ## Script variables # Will contain the list of services to test @@ -52,8 +52,8 @@ spec: value: $PRODUCT_CATALOG_SERVICE_ADDR - key: RECOMMENDATION_SERVICE_ADDR value: $RECOMMENDATION_SERVICE_ADDR - - key: SHIPPING_SERVICE_ADDR - value: $SHIPPING_SERVICE_ADDR + - key: SHIPPING_ADDR + value: $SHIPPING_ADDR - key: KAFKA_SERVICE_ADDR value: $KAFKA_SERVICE_ADDR EOF diff --git a/test/tracetesting/shippingservice/all.yaml b/test/tracetesting/shipping/all.yaml similarity index 100% rename from test/tracetesting/shippingservice/all.yaml rename to test/tracetesting/shipping/all.yaml diff --git a/test/tracetesting/shippingservice/empty-quote.yaml b/test/tracetesting/shipping/empty-quote.yaml similarity index 96% rename from test/tracetesting/shippingservice/empty-quote.yaml rename to test/tracetesting/shipping/empty-quote.yaml index 6c85ee1fcf..ae422d1bf0 100644 --- a/test/tracetesting/shippingservice/empty-quote.yaml +++ b/test/tracetesting/shipping/empty-quote.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:SHIPPING_SERVICE_ADDR} + address: ${var:SHIPPING_ADDR} method: oteldemo.ShippingService.GetQuote request: |- { diff --git a/test/tracetesting/shippingservice/order.yaml b/test/tracetesting/shipping/order.yaml similarity index 96% rename from test/tracetesting/shippingservice/order.yaml rename to test/tracetesting/shipping/order.yaml index 1544fb9d2e..8c18f1e594 100644 --- a/test/tracetesting/shippingservice/order.yaml +++ b/test/tracetesting/shipping/order.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:SHIPPING_SERVICE_ADDR} + address: ${var:SHIPPING_ADDR} method: oteldemo.ShippingService.ShipOrder request: |- { diff --git a/test/tracetesting/shippingservice/quote.yaml b/test/tracetesting/shipping/quote.yaml similarity index 96% rename from test/tracetesting/shippingservice/quote.yaml rename to test/tracetesting/shipping/quote.yaml index c4d8fad6ed..c263fa8cc6 100644 --- a/test/tracetesting/shippingservice/quote.yaml +++ b/test/tracetesting/shipping/quote.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:SHIPPING_SERVICE_ADDR} + address: ${var:SHIPPING_ADDR} method: oteldemo.ShippingService.GetQuote request: |- { From cb75eba86b2649ab59000dc37334d2d7f08c8c7c Mon Sep 17 00:00:00 2001 From: Jonathan Munz Date: Thu, 19 Dec 2024 15:50:27 -0500 Subject: [PATCH 13/24] Add a React Native example app to the demo (#1781) --- .gitignore | 3 + .licenserc.json | 6 + CHANGELOG.md | 2 + CONTRIBUTING.md | 5 + Makefile | 5 +- ide-gen-proto.sh | 1 + src/react-native-app/.dockerignore | 6 + src/react-native-app/.env | 3 + src/react-native-app/.eslintrc.js | 10 + src/react-native-app/.gitignore | 22 + src/react-native-app/.prettierignore | 1 + src/react-native-app/.ruby-version | 1 + src/react-native-app/Gemfile | 2 + src/react-native-app/Gemfile.lock | 114 + src/react-native-app/README.md | 150 + src/react-native-app/android.Dockerfile | 21 + src/react-native-app/android/.gitignore | 16 + src/react-native-app/android/app/build.gradle | 132 + .../android/app/debug.keystore | Bin 0 -> 2257 bytes .../android/app/proguard-rules.pro | 14 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 + .../app/src/main/ic_launcher-playstore.png | Bin 0 -> 50017 bytes .../reactnativeapp/MainActivity.kt | 61 + .../reactnativeapp/MainApplication.kt | 55 + .../res/drawable-hdpi/splashscreen_image.png | Bin 0 -> 50017 bytes .../res/drawable-mdpi/splashscreen_image.png | Bin 0 -> 44751 bytes .../res/drawable-xhdpi/splashscreen_image.png | Bin 0 -> 50017 bytes .../drawable-xxhdpi/splashscreen_image.png | Bin 0 -> 50017 bytes .../drawable-xxxhdpi/splashscreen_image.png | Bin 0 -> 50017 bytes .../res/drawable/ic_launcher_background.xml | 74 + .../res/drawable/rn_edit_text_material.xml | 37 + .../src/main/res/drawable/splashscreen.xml | 3 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2297 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3691 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4306 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1457 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2260 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2686 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3197 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5499 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6279 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5156 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 9956 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10213 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7459 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 15875 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15171 bytes .../app/src/main/res/values-night/colors.xml | 1 + .../app/src/main/res/values/colors.xml | 6 + .../res/values/ic_launcher_background.xml | 4 + .../app/src/main/res/values/strings.xml | 6 + .../app/src/main/res/values/styles.xml | 17 + src/react-native-app/android/build.gradle | 41 + .../android/gradle.properties | 56 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + src/react-native-app/android/gradlew | 249 + src/react-native-app/android/gradlew.bat | 92 + src/react-native-app/android/settings.gradle | 18 + src/react-native-app/app.json | 38 + src/react-native-app/app/(tabs)/_layout.tsx | 49 + src/react-native-app/app/(tabs)/cart.tsx | 145 + src/react-native-app/app/(tabs)/index.tsx | 39 + src/react-native-app/app/_layout.tsx | 59 + .../assets/fonts/SpaceMono-Regular.ttf | Bin 0 -> 93252 bytes .../assets/images/adaptive-icon.png | Bin 0 -> 20843 bytes .../assets/images/favicon.png | Bin 0 -> 2652 bytes src/react-native-app/assets/images/icon.png | Bin 0 -> 20843 bytes src/react-native-app/assets/images/splash.png | Bin 0 -> 50017 bytes src/react-native-app/babel.config.js | 8 + .../components/CheckoutForm/CheckoutForm.tsx | 198 + .../components/CheckoutForm/index.ts | 3 + .../components/EmptyCart/EmptyCart.tsx | 37 + .../components/EmptyCart/index.ts | 3 + src/react-native-app/components/Field.tsx | 30 + .../components/ProductCard/ProductCard.tsx | 102 + .../components/ProductCard/index.ts | 3 + .../components/ProductList/ProductList.tsx | 50 + .../components/ProductList/index.ts | 3 + .../components/ThemedScrollView.tsx | 23 + .../components/ThemedText.tsx | 62 + .../components/ThemedView.tsx | 24 + .../components/navigation/TabBarIcon.tsx | 14 + src/react-native-app/constants/Colors.ts | 28 + src/react-native-app/gateways/Api.gateway.ts | 150 + .../gateways/Session.gateway.ts | 43 + src/react-native-app/hooks/useColorScheme.ts | 3 + .../hooks/useColorScheme.web.ts | 10 + src/react-native-app/hooks/useThemeColor.ts | 24 + src/react-native-app/hooks/useTracer.ts | 123 + src/react-native-app/ios/.gitignore | 30 + src/react-native-app/ios/.xcode.env | 11 + src/react-native-app/ios/Podfile | 58 + src/react-native-app/ios/Podfile.lock | 1609 ++ .../ios/Podfile.properties.json | 4 + .../reactnativeapp.xcodeproj/project.pbxproj | 543 + .../xcschemes/reactnativeapp.xcscheme | 88 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../ios/reactnativeapp/AppDelegate.h | 9 + .../ios/reactnativeapp/AppDelegate.mm | 62 + .../App-Icon-1024x1024@1x.png | Bin 0 -> 191330 bytes .../AppIcon.appiconset/Contents.json | 14 + .../Images.xcassets/Contents.json | 6 + .../SplashScreen.imageset/Contents.json | 21 + .../SplashScreen.imageset/image.png | Bin 0 -> 50017 bytes .../Contents.json | 21 + .../SplashScreenBackground.imageset/image.png | Bin 0 -> 68 bytes .../ios/reactnativeapp/Info.plist | 77 + .../ios/reactnativeapp/PrivacyInfo.xcprivacy | 48 + .../reactnativeapp/SplashScreen.storyboard | 51 + .../ios/reactnativeapp/Supporting/Expo.plist | 12 + .../ios/reactnativeapp/main.m | 10 + .../ios/reactnativeapp/noop-file.swift | 0 .../reactnativeapp-Bridging-Header.h | 5 + .../reactnativeapp.entitlements | 6 + src/react-native-app/metro.config.js | 16 + src/react-native-app/package-lock.json | 19603 ++++++++++++++++ src/react-native-app/package.json | 76 + src/react-native-app/protos/demo.ts | 4027 ++++ .../providers/Cart.provider.tsx | 82 + src/react-native-app/tsconfig.json | 17 + src/react-native-app/types/Cart.ts | 25 + src/react-native-app/utils/Localhost.ts | 14 + src/react-native-app/utils/Request.ts | 42 + .../utils/SessionIdProcessor.ts | 32 + 129 files changed, 29198 insertions(+), 1 deletion(-) create mode 100644 src/react-native-app/.dockerignore create mode 100644 src/react-native-app/.env create mode 100644 src/react-native-app/.eslintrc.js create mode 100644 src/react-native-app/.gitignore create mode 100644 src/react-native-app/.prettierignore create mode 100644 src/react-native-app/.ruby-version create mode 100644 src/react-native-app/Gemfile create mode 100644 src/react-native-app/Gemfile.lock create mode 100644 src/react-native-app/README.md create mode 100644 src/react-native-app/android.Dockerfile create mode 100644 src/react-native-app/android/.gitignore create mode 100644 src/react-native-app/android/app/build.gradle create mode 100644 src/react-native-app/android/app/debug.keystore create mode 100644 src/react-native-app/android/app/proguard-rules.pro create mode 100644 src/react-native-app/android/app/src/debug/AndroidManifest.xml create mode 100644 src/react-native-app/android/app/src/main/AndroidManifest.xml create mode 100644 src/react-native-app/android/app/src/main/ic_launcher-playstore.png create mode 100644 src/react-native-app/android/app/src/main/java/io/opentelemetry/reactnativeapp/MainActivity.kt create mode 100644 src/react-native-app/android/app/src/main/java/io/opentelemetry/reactnativeapp/MainApplication.kt create mode 100644 src/react-native-app/android/app/src/main/res/drawable-hdpi/splashscreen_image.png create mode 100644 src/react-native-app/android/app/src/main/res/drawable-mdpi/splashscreen_image.png create mode 100644 src/react-native-app/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png create mode 100644 src/react-native-app/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png create mode 100644 src/react-native-app/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png create mode 100644 src/react-native-app/android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 src/react-native-app/android/app/src/main/res/drawable/rn_edit_text_material.xml create mode 100644 src/react-native-app/android/app/src/main/res/drawable/splashscreen.xml create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 src/react-native-app/android/app/src/main/res/values-night/colors.xml create mode 100644 src/react-native-app/android/app/src/main/res/values/colors.xml create mode 100644 src/react-native-app/android/app/src/main/res/values/ic_launcher_background.xml create mode 100644 src/react-native-app/android/app/src/main/res/values/strings.xml create mode 100644 src/react-native-app/android/app/src/main/res/values/styles.xml create mode 100644 src/react-native-app/android/build.gradle create mode 100644 src/react-native-app/android/gradle.properties create mode 100644 src/react-native-app/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 src/react-native-app/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 src/react-native-app/android/gradlew create mode 100644 src/react-native-app/android/gradlew.bat create mode 100644 src/react-native-app/android/settings.gradle create mode 100644 src/react-native-app/app.json create mode 100644 src/react-native-app/app/(tabs)/_layout.tsx create mode 100644 src/react-native-app/app/(tabs)/cart.tsx create mode 100644 src/react-native-app/app/(tabs)/index.tsx create mode 100644 src/react-native-app/app/_layout.tsx create mode 100755 src/react-native-app/assets/fonts/SpaceMono-Regular.ttf create mode 100644 src/react-native-app/assets/images/adaptive-icon.png create mode 100644 src/react-native-app/assets/images/favicon.png create mode 100644 src/react-native-app/assets/images/icon.png create mode 100644 src/react-native-app/assets/images/splash.png create mode 100644 src/react-native-app/babel.config.js create mode 100644 src/react-native-app/components/CheckoutForm/CheckoutForm.tsx create mode 100644 src/react-native-app/components/CheckoutForm/index.ts create mode 100644 src/react-native-app/components/EmptyCart/EmptyCart.tsx create mode 100644 src/react-native-app/components/EmptyCart/index.ts create mode 100644 src/react-native-app/components/Field.tsx create mode 100644 src/react-native-app/components/ProductCard/ProductCard.tsx create mode 100644 src/react-native-app/components/ProductCard/index.ts create mode 100644 src/react-native-app/components/ProductList/ProductList.tsx create mode 100644 src/react-native-app/components/ProductList/index.ts create mode 100644 src/react-native-app/components/ThemedScrollView.tsx create mode 100644 src/react-native-app/components/ThemedText.tsx create mode 100644 src/react-native-app/components/ThemedView.tsx create mode 100644 src/react-native-app/components/navigation/TabBarIcon.tsx create mode 100644 src/react-native-app/constants/Colors.ts create mode 100644 src/react-native-app/gateways/Api.gateway.ts create mode 100644 src/react-native-app/gateways/Session.gateway.ts create mode 100644 src/react-native-app/hooks/useColorScheme.ts create mode 100644 src/react-native-app/hooks/useColorScheme.web.ts create mode 100644 src/react-native-app/hooks/useThemeColor.ts create mode 100644 src/react-native-app/hooks/useTracer.ts create mode 100644 src/react-native-app/ios/.gitignore create mode 100644 src/react-native-app/ios/.xcode.env create mode 100644 src/react-native-app/ios/Podfile create mode 100644 src/react-native-app/ios/Podfile.lock create mode 100644 src/react-native-app/ios/Podfile.properties.json create mode 100644 src/react-native-app/ios/reactnativeapp.xcodeproj/project.pbxproj create mode 100644 src/react-native-app/ios/reactnativeapp.xcodeproj/xcshareddata/xcschemes/reactnativeapp.xcscheme create mode 100644 src/react-native-app/ios/reactnativeapp.xcworkspace/contents.xcworkspacedata create mode 100644 src/react-native-app/ios/reactnativeapp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 src/react-native-app/ios/reactnativeapp/AppDelegate.h create mode 100644 src/react-native-app/ios/reactnativeapp/AppDelegate.mm create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/Contents.json create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/SplashScreen.imageset/Contents.json create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/SplashScreen.imageset/image.png create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/SplashScreenBackground.imageset/Contents.json create mode 100644 src/react-native-app/ios/reactnativeapp/Images.xcassets/SplashScreenBackground.imageset/image.png create mode 100644 src/react-native-app/ios/reactnativeapp/Info.plist create mode 100644 src/react-native-app/ios/reactnativeapp/PrivacyInfo.xcprivacy create mode 100644 src/react-native-app/ios/reactnativeapp/SplashScreen.storyboard create mode 100644 src/react-native-app/ios/reactnativeapp/Supporting/Expo.plist create mode 100644 src/react-native-app/ios/reactnativeapp/main.m create mode 100644 src/react-native-app/ios/reactnativeapp/noop-file.swift create mode 100644 src/react-native-app/ios/reactnativeapp/reactnativeapp-Bridging-Header.h create mode 100644 src/react-native-app/ios/reactnativeapp/reactnativeapp.entitlements create mode 100644 src/react-native-app/metro.config.js create mode 100644 src/react-native-app/package-lock.json create mode 100644 src/react-native-app/package.json create mode 100644 src/react-native-app/protos/demo.ts create mode 100644 src/react-native-app/providers/Cart.provider.tsx create mode 100644 src/react-native-app/tsconfig.json create mode 100644 src/react-native-app/types/Cart.ts create mode 100644 src/react-native-app/utils/Localhost.ts create mode 100644 src/react-native-app/utils/Request.ts create mode 100644 src/react-native-app/utils/SessionIdProcessor.ts diff --git a/.gitignore b/.gitignore index 530fd480e9..ce60ae8696 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ test/tracetesting/tracetesting-vars.yaml /src/paymentservice/demo.proto /src/shipping/proto/ /src/currencyservice/proto + +# Android +*.apk diff --git a/.licenserc.json b/.licenserc.json index fe6d6fa34f..6c3d85a679 100644 --- a/.licenserc.json +++ b/.licenserc.json @@ -45,6 +45,12 @@ "src/featureflagservice/assets/vendor/", "src/featureflagservice/priv/", "src/productcatalogservice/genproto/", + "src/react-native-app/ios/Pods/", + "src/react-native-app/ios/build/", + "src/react-native-app/android/app/build/", + "src/react-native-app/android/.gradle/", + "src/react-native-app/.expo/", + "src/react-native-app/expo-env.d.ts", "src/recommendationservice/demo_pb2.py", "src/recommendationservice/demo_pb2_grpc.py", "internal/tools/" diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cbdb4bd13..fb2d647ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,8 @@ the release. ([#1839](https://github.com/open-telemetry/opentelemetry-demo/pull/1839)) * [shipping] rename shippingservice to shipping ([#1842](https://github.com/open-telemetry/opentelemetry-demo/pull/1842)) +* [react-native-app] Add React Native example app + ([#1781](https://github.com/open-telemetry/opentelemetry-demo/pull/1781)) ## 1.12.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 31db3038e9..9d619c2be2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -103,6 +103,11 @@ documentation as well as the code. When making changes to any service or feature remember to find the related docs and update those as well. Most (but not all) documentation can be found on the OTel website under [Demo docs][docs]. +### Running the React Native example + +If you are interested in running the React Native example app in this repo please +review [these instructions](src/react-native-app/README.md). + ## Create Your First Pull Request ### How to Send Pull Requests diff --git a/Makefile b/Makefile index 11f9e9258c..7f6e6640b7 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # All documents to be used in spell check. -ALL_DOCS := $(shell find . -type f -name '*.md' -not -path './.github/*' -not -path '*/node_modules/*' -not -path '*/_build/*' -not -path '*/deps/*' | sort) +ALL_DOCS := $(shell find . -type f -name '*.md' -not -path './.github/*' -not -path '*/node_modules/*' -not -path '*/_build/*' -not -path '*/deps/*' -not -path */Pods/* -not -path */.expo/* | sort) PWD := $(shell pwd) TOOLS_DIR := ./internal/tools @@ -218,3 +218,6 @@ else @echo "Please provide a service name using `service=[service name]` or `SERVICE=[service name]`" endif +.PHONY: build-react-native-android +build-react-native-android: + docker build -f src/react-native-app/android.Dockerfile --platform=linux/amd64 --output=. src/react-native-app diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index e393ec5dd2..52fa222f4b 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -72,6 +72,7 @@ gen_proto_go checkoutservice # gen_proto_cpp currencyservice # gen_proto_ruby emailservice gen_proto_ts frontend +gen_proto_ts react-native-app gen_proto_js paymentservice gen_proto_go productcatalogservice # gen_proto_php quote diff --git a/src/react-native-app/.dockerignore b/src/react-native-app/.dockerignore new file mode 100644 index 0000000000..a19ce7eb0e --- /dev/null +++ b/src/react-native-app/.dockerignore @@ -0,0 +1,6 @@ +node_modules/ +.expo/ +dist/ +android/build/ +ios/build/ +ios/Pods/ diff --git a/src/react-native-app/.env b/src/react-native-app/.env new file mode 100644 index 0000000000..8379d191a1 --- /dev/null +++ b/src/react-native-app/.env @@ -0,0 +1,3 @@ +# https://docs.expo.dev/guides/environment-variables/ + +EXPO_PUBLIC_FRONTEND_PROXY_PORT=8080 diff --git a/src/react-native-app/.eslintrc.js b/src/react-native-app/.eslintrc.js new file mode 100644 index 0000000000..854aefe125 --- /dev/null +++ b/src/react-native-app/.eslintrc.js @@ -0,0 +1,10 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// https://docs.expo.dev/guides/using-eslint/ +module.exports = { + extends: ["expo", "prettier"], + plugins: ["prettier"], + rules: { + "prettier/prettier": "error", + }, +}; diff --git a/src/react-native-app/.gitignore b/src/react-native-app/.gitignore new file mode 100644 index 0000000000..20efda6e41 --- /dev/null +++ b/src/react-native-app/.gitignore @@ -0,0 +1,22 @@ +node_modules/ +.expo/ +dist/ +npm-debug.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision +*.orig.* +web-build/ +pb/demo.proto + +# macOS +.DS_Store + +# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb +# The following patterns were generated by expo-cli + +expo-env.d.ts +# @end expo-cli + diff --git a/src/react-native-app/.prettierignore b/src/react-native-app/.prettierignore new file mode 100644 index 0000000000..01f3e99067 --- /dev/null +++ b/src/react-native-app/.prettierignore @@ -0,0 +1 @@ +expo-env.d.ts diff --git a/src/react-native-app/.ruby-version b/src/react-native-app/.ruby-version new file mode 100644 index 0000000000..49cdd668e1 --- /dev/null +++ b/src/react-native-app/.ruby-version @@ -0,0 +1 @@ +2.7.6 diff --git a/src/react-native-app/Gemfile b/src/react-native-app/Gemfile new file mode 100644 index 0000000000..57df847493 --- /dev/null +++ b/src/react-native-app/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'cocoapods', '1.16.2' diff --git a/src/react-native-app/Gemfile.lock b/src/react-native-app/Gemfile.lock new file mode 100644 index 0000000000..7dbad28461 --- /dev/null +++ b/src/react-native-app/Gemfile.lock @@ -0,0 +1,114 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + activesupport (7.1.5.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + mutex_m + securerandom (>= 0.3) + tzinfo (~> 2.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + base64 (0.2.0) + benchmark (0.4.0) + bigdecimal (3.1.8) + claide (1.1.0) + cocoapods (1.16.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.16.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.27.0, < 2.0) + cocoapods-core (1.16.2) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.3.4) + connection_pool (2.4.1) + drb (2.2.1) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + ffi (1.17.0) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.8.3) + i18n (1.14.6) + concurrent-ruby (~> 1.0) + json (2.9.1) + logger (1.6.3) + minitest (5.25.4) + molinillo (0.8.0) + mutex_m (0.3.0) + nanaimo (0.4.0) + nap (1.1.0) + netrc (0.11.0) + nkf (0.2.0) + public_suffix (4.0.7) + rexml (3.4.0) + ruby-macho (2.5.1) + securerandom (0.3.2) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.27.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + cocoapods (= 1.16.2) + +BUNDLED WITH + 2.1.4 diff --git a/src/react-native-app/README.md b/src/react-native-app/README.md new file mode 100644 index 0000000000..88b2bd3b87 --- /dev/null +++ b/src/react-native-app/README.md @@ -0,0 +1,150 @@ +# Example React Native app + +This was created using [`npx create-expo-app@latest`](https://reactnative.dev/docs/environment-setup#start-a-new-react-native-project-with-expo) + +Content was taken from the web app example in src/frontend and modified to work +in a React Native environment. + +## Get started + +Start the OpenTelemetry demo from the root of this repo: + +```bash +cd ../.. +make start # or start-minimal +``` + +## Building the app + +Unlike the other components under src/ which run within containers this +app must be built and then run on a mobile simulator on your machine or a physical +device. If this is your first time running a React Native app then in order to +execute the steps under "Build on your host machine" you will need to setup your +local environment for Android or iOS development or both following +[this guide](https://reactnative.dev/docs/set-up-your-environment). Alternatively +for Android you can instead follow the steps under "Build within a container" to +leverage a container to build the app's apk for you. + +### Build on your host machine + +Build and run the React Native app for a given platform by navigating to this folder +and running: + +```bash +cd src/react-native-app +npm install +``` + +To run on Android: + +```bash +npm run android +``` + +Note that for the above command a server is also spun up to serve the JS bundle +to the deployed app. + +To run on iOS you may find it cleanest to build through the XCode IDE. First spin +up the react native dev server with the following (feel free to ignore the output +commands referring to opening an iOS simulator, we'll do that directly through +XCode in a later step): + +```bash +npm run start +``` + +Then install the pods for the project: + +```bash +cd ios +pod install +``` + +Note that the above is the quickest way to get going but you may end up with +slightly different versions of the Pods than what has been committed to this repo, +in order to install the precise versions first setup [rbenv](https://github.com/rbenv/rbenv#installation) +followed by: + +```bash +rbenv install 2.7.6 # the version of ruby we've pinned for this app +bundle install +cd ios +bundle exec pod install +``` + +Then open XCode, open this as an existing project by opening `src/react-native-app/ios/react-native-app.xcworkspace` +then trigger the build by hitting the Play button or from the menu using Product->Run. + +Or alternatively build and run from the command-line: + +```bash +npm run ios +``` + +Note that for the above command a server is also spun up to serve the JS bundle +to the deployed apps. + +### Build within a container + +For Android builds you can produce an apk using Docker without requiring the dev +tools to be installed on your host. From the project root run: + +```bash +make build-react-native-android +``` + +Or directly from this folder using: + +```bash +docker build -f android.Dockerfile --platform=linux/amd64 --output=. . +``` + +This will produce `react-native-app.apk` in the directory where you ran the command. +If you have an Android emulator running on your machine then you can simply drag +and drop this file onto the emulator's window in order to install it following +[these steps](https://developer.android.com/studio/run/emulator-install-add-files). + +TODO: For a physical device you can install this by sending the apk file to your +device, giving the "Install unknown apps" permission to the app you will be opening +the file with, and then installing it. However this won't be able to hit the APIs +because they are hard-coded to be localhost, need those to be configurable before +this method would work. + +## Troubleshooting + +### iOS build issues + +If you see a build failure related to pods try forcing a clean install with and +then attempt another build after: + +```bash + cd src/react-native-app/ios + rm Podfile.lock + pod cache clean --all + pod repo update --verbose + pod deintegrate + pod install --repo-update --verbose +``` + +If there is an error compiling or running the app try closing any open simulators +and clearing all derived data: + +```bash +rm -rf ~/Library/Developer/Xcode/DerivedData +``` + +### Android build issues + +Try stopping and cleaning local services (in case there are unknown issues related +to the start of the app): + +```bash + cd src/react-native-app/android + ./gradlew --stop // stop daemons + rm -rf ~/.gradle/caches/ +``` + +### JS build issues + +Try removing the `src/react-native-app/node_modules/` folder and then re-run +`npm install` from inside `src/react-native-app`. diff --git a/src/react-native-app/android.Dockerfile b/src/react-native-app/android.Dockerfile new file mode 100644 index 0000000000..cd50ffe159 --- /dev/null +++ b/src/react-native-app/android.Dockerfile @@ -0,0 +1,21 @@ +# syntax=docker/dockerfile:1 + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# https://github.com/react-native-community/docker-android +# Choosing a tag where the Android build tools match what we have in android/build.gradle to avoid the +# container having to download them +FROM reactnativecommunity/react-native-android:v13.2.1 AS builder + +WORKDIR /reactnativesrc/ +COPY . . + +RUN npm install +WORKDIR android/ +RUN chmod +x gradlew +RUN ./gradlew assembleRelease + +FROM scratch +COPY --from=builder /reactnativesrc/android/app/build/outputs/apk/release/app-release.apk /reactnativeapp.apk +ENTRYPOINT ["/reactnativeapp.apk"] diff --git a/src/react-native-app/android/.gitignore b/src/react-native-app/android/.gitignore new file mode 100644 index 0000000000..8a6be07718 --- /dev/null +++ b/src/react-native-app/android/.gitignore @@ -0,0 +1,16 @@ +# OSX +# +.DS_Store + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ + +# Bundle artifacts +*.jsbundle diff --git a/src/react-native-app/android/app/build.gradle b/src/react-native-app/android/app/build.gradle new file mode 100644 index 0000000000..c0c3d72e99 --- /dev/null +++ b/src/react-native-app/android/app/build.gradle @@ -0,0 +1,132 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" + +def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +/** + * This is the configuration block to customize your React Native Android app. + */ +react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + // Use Expo CLI to bundle the app, this ensures the Metro config + // works correctly with Expo projects. + cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" +} + +/** + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. + */ +def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +android { + ndkVersion rootProject.ext.ndkVersion + + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace 'io.opentelemetry.reactnativeapp' + defaultConfig { + applicationId 'io.opentelemetry.reactnativeapp' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0.0" + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + packagingOptions { + jniLibs { + useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) + } + } +} + +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + + if (isGifEnabled) { + // For animated gif support + implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") + } + + if (isWebpEnabled) { + // For webp support + implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") + } + } + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } +} + +apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); +applyNativeModulesAppBuildGradle(project) diff --git a/src/react-native-app/android/app/debug.keystore b/src/react-native-app/android/app/debug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..364e105ed39fbfd62001429a68140672b06ec0de GIT binary patch literal 2257 zcmchYXEfYt8;7T1^dLH$VOTZ%2NOdOH5j5LYLtZ0q7x-V8_6gU5)#7dkq{HTmsfNq zB3ZqcAxeY^G10@?efK?Q&)M(qInVv!xjx+IKEL}p*K@LYvIzo#AZG>st5|P)KF1_Z;y){W{<7K{nl!CPuE z_^(!C(Ol0n8 zK13*rzAtW>(wULKPRYLd7G18F8#1P`V*9`(Poj26eOXYyBVZPno~Cvvhx7vPjAuZo zF?VD!zB~QG(!zbw#qsxT8%BSpqMZ4f70ZPn-3y$L8{EVbbN9$H`B&Z1quk9tgp5FM zuxp3pJ0b8u|3+#5bkJ4SRnCF2l7#DyLYXYY8*?OuAwK4E6J{0N=O3QNVzQ$L#FKkR zi-c@&!nDvezOV$i$Lr}iF$XEcwnybQ6WZrMKuw8gCL^U#D;q3t&HpTbqyD%vG=TeDlzCT~MXUPC|Leb-Uk+ z=vnMd(|>ld?Fh>V8poP;q;;nc@en$|rnP0ytzD&fFkCeUE^kG9Kx4wUh!!rpjwKDP zyw_e|a^x_w3E zP}}@$g>*LLJ4i0`Gx)qltL}@;mDv}D*xR^oeWcWdPkW@Uu)B^X&4W1$p6}ze!zudJ zyiLg@uggoMIArBr*27EZV7djDg@W1MaL+rcZ-lrANJQ%%>u8)ZMWU@R2qtnmG(acP z0d_^!t>}5W zpT`*2NR+0+SpTHb+6Js4b;%LJB;B_-ChhnU5py}iJtku*hm5F0!iql8Hrpcy1aYbT z1*dKC5ua6pMX@@iONI?Hpr%h;&YaXp9n!ND7-=a%BD7v&g zOO41M6EbE24mJ#S$Ui0-brR5ML%@|ndz^)YLMMV1atna{Fw<;TF@>d&F|!Z>8eg>>hkFrV)W+uv=`^F9^e zzzM2*oOjT9%gLoub%(R57p-`TXFe#oh1_{&N-YN z<}artH|m=d8TQuKSWE)Z%puU|g|^^NFwC#N=@dPhasyYjoy(fdEVfKR@cXKHZV-`06HsP`|Ftx;8(YD$fFXumLWbGnu$GMqRncXYY9mwz9$ap zQtfZB^_BeNYITh^hA7+(XNFox5WMeG_LtJ%*Q}$8VKDI_p8^pqX)}NMb`0e|wgF7D zuQACY_Ua<1ri{;Jwt@_1sW9zzdgnyh_O#8y+C;LcZq6=4e^cs6KvmK@$vVpKFGbQ= z$)Eux5C|Fx;Gtmv9^#Y-g@7Rt7*eLp5n!gJmn7&B_L$G?NCN`AP>cXQEz}%F%K;vUs{+l4Q{}eWW;ATe2 zqvXzxoIDy(u;F2q1JH7Sf;{jy_j})F+cKlIOmNfjBGHoG^CN zM|Ho&&X|L-36f}Q-obEACz`sI%2f&k>z5c$2TyTSj~vmO)BW~+N^kt`Jt@R|s!){H ze1_eCrlNaPkJQhL$WG&iRvF*YG=gXd1IyYQ9ew|iYn7r~g!wOnw;@n42>enAxBv*A zEmV*N#sxdicyNM=A4|yaOC5MByts}s_Hpfj|y<6G=o=!3S@eIFKDdpR7|FY>L&Wat&oW&cm&X~ z5Bt>Fcq(fgnvlvLSYg&o6>&fY`ODg4`V^lWWD=%oJ#Kbad2u~! zLECFS*??>|vDsNR&pH=Ze0Eo`sC_G`OjoEKVHY|wmwlX&(XBE<@sx3Hd^gtd-fNwUHsylg06p`U2y_={u}Bc + + + + + diff --git a/src/react-native-app/android/app/src/main/AndroidManifest.xml b/src/react-native-app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..cb215168e6 --- /dev/null +++ b/src/react-native-app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/react-native-app/android/app/src/main/ic_launcher-playstore.png b/src/react-native-app/android/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4aaad5cd24faadd190afdaf5b4e50d3ca79473 GIT binary patch literal 50017 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 + */ + override fun invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed() + } + return + } + + // Use the default back button implementation on Android S + // because it's doing more than [Activity.moveTaskToBack] in fact. + super.invokeDefaultOnBackPressed() + } +} diff --git a/src/react-native-app/android/app/src/main/java/io/opentelemetry/reactnativeapp/MainApplication.kt b/src/react-native-app/android/app/src/main/java/io/opentelemetry/reactnativeapp/MainApplication.kt new file mode 100644 index 0000000000..75f2a2c26f --- /dev/null +++ b/src/react-native-app/android/app/src/main/java/io/opentelemetry/reactnativeapp/MainApplication.kt @@ -0,0 +1,55 @@ +package io.opentelemetry.reactnativeapp + +import android.app.Application +import android.content.res.Configuration + +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.ReactHost +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.soloader.SoLoader + +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( + this, + object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return PackageList(this).packages + } + + override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + ) + + override val reactHost: ReactHost + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, false) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/src/react-native-app/android/app/src/main/res/drawable-hdpi/splashscreen_image.png b/src/react-native-app/android/app/src/main/res/drawable-hdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4aaad5cd24faadd190afdaf5b4e50d3ca79473 GIT binary patch literal 50017 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 MovLiDv}xG?0Reff@Bjb+ literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png b/src/react-native-app/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4aaad5cd24faadd190afdaf5b4e50d3ca79473 GIT binary patch literal 50017 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/react-native-app/android/app/src/main/res/drawable/rn_edit_text_material.xml b/src/react-native-app/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 0000000000..8f0aa55924 --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/src/react-native-app/android/app/src/main/res/drawable/splashscreen.xml b/src/react-native-app/android/app/src/main/res/drawable/splashscreen.xml new file mode 100644 index 0000000000..bab718fa99 --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/drawable/splashscreen.xml @@ -0,0 +1,3 @@ + + + diff --git a/src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..80b730f367 --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..80b730f367 --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91ef4d2dd9d1fab572763eac72367cae99424b4b GIT binary patch literal 2297 zcmVK156S=G?yMFJ&RfH*N}2pLIe<2+1WBm@FZOo-#y*S^;d-@fl$U+2D3UmKNsO+*wNkU#}cL8c5Lzv z@aK6*7P1%FjqHgt=snYWrx@nx#TZqSF2v(Br0UkKTR@DBjm15oSgPD^_cVE|h8xJn zCw63|4uip9Ad#S$P*637C?$gNnuI4$rK8{Pe^!#C{uJUJj4Qx#9JI8wESAS?sD)0R z;_-NPC8{7KAP553?e={XYb=89cDY>tq|Opi5XFRz1RbJSV-Ymf>2&5uovB|S0bqh` zHrx9YYpj9}P-h7)=rF|^lc0ftfrHdpA`5D2YWg?DniQnvOC%^Lz?k4gJmQglSD&Nh z%OEHS!RyuFKbr==(x-tt{v+VZW`od@jgkU7=PO8XK>-f<&$7Uq{}^~adPsq8-O=X+w7oLK{bp;i#O3)zvYc%D7( zE&M(Nhnls0X_*{?g26Em1Z7r?di?Bh^|@iNeh7W#;H!Qaxbk0u_rz@Q9{UM+KK{0t zB`AS!&4J*}HW03y2JZAi@Sr%#EWw_m?N6V{A*i*(35~YvFyI`8VHXG29Bv2%L}7w} z^+Zq&1(f4&%mj}#JLNrsVjdo^G5ILrQZewINASEXl(R_8oPsAp)4Rd!oD6~-gC5wD zRmlXoF>C(v_ZnzzA7sx-lGO0c`%uWY7+mFY@YQTUDc=nV!n#xS5?c(CM1S2@%&w=| zuoBweH&S=xm@9~~W8a~ASo}&c*z5z)?-+ruo*_1Ulbq`VbbM$r8PmfMRPc<0^W^CQ)ws#y!w>WSJ=G^j%i*$3d|AY$24EN^*`{d zbw}aXzdfc1bm5vpNPVpoo?BN0rIt>XF*G!KuMESszm7|lv-~$Da3J>rT<+?Cz`%L% z7ENdM$A5micymnWJs89sL8BfXR&6e2ML8w4P!TN6XbVD*(a)RzQ~_yklxsvvr0+Pz zmI&egafi-#eFVI1FO2aX&1*-AIf5u7)@&)$1RE_|vMexop%_!BG3I9$O8|Dk5PrvePFAkZbn&9!qwuIgq91m z$(5d`ojwh}>bgF*!BxLr6ig051WnbJnjUyz!}x6vJr`Jx5?xdq=xoiH(fs5R(N3;XQ?|prRx!2 zf=nPOC;~}A5l9M(KvGZyl7b>|M+7DOcQsJZVTv^-K~ASLVKazgB0MW@9pBV89#X?`nbi3VPPHa0e4j1N()p_q-g{QP_pbbm@p%50m>)-*gk3_Q;RbsW#o zuyVOvP+wnfn>%;z&nd=?j11$$OWx+pne$aVJcvA*ot?eCtgI~8YPA+wES7?*s;WXc zm6er>pVhw`J?HWJ|VWi;MO@xgdHk T>Z4?E00000NkvXXu0mjfgcx2W literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3953790a156941b6441756e828af4bc486ccd4 GIT binary patch literal 3691 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 literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/src/react-native-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c4d2064d58463d09d0c4ca611bb89089a1e7f8 GIT binary patch literal 4306 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 AWdHyG literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee6bda88e037327d7dfef366586881248405389 GIT binary patch literal 1457 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 I-tW%;02p9ROaK4? literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/src/react-native-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b95d1b40e8fb5afc5f131298e172b9e960a9b7bd GIT binary patch literal 2686 zcmV-^3W4>BP)bgFIb-e#P3+LEo~qg<5M4sxV-*0 zleTDxgOCqDb%bJpVJ`n}fsJUk??`myw=!`opE9nl#|)_pg4DwG)@U4VOSBVN;oEA} z<*MmZU_5{ngl_S>*XunPjY~{Inr^_#QY3kmzk0*tif}LjnY_@kNg`F6^u+ahVlP7OcD=)=pbUfhqk*~9u+!Zg8%e`}`*H47Ra|oJ#&1H*S1S%h4d(yl1a1FrY1}JH?I80cyD1OAe<;_smbe zD<{d3K9B5xBrhB&ULzd9IK`pAzyCi>O>oq54T%a5ul_ns>WsPD_hBA1f%+Xc$!~2SUr!}@8jo<=d{eBv_o|6}*9*vdC5OpBK+aR&C4cY5i22}xMdc_o znM|h7YB?(hghzI}9cLR%f*6VD(A{e%wm38+Wk=wUcAV$Z0bc1xI8}Z?PSa1=f!V?V*SS^X@2lt3Sx3$@&yXW) zAxGj&u$@M+r#N+Wb)A_Mu7x=KBQ}Wc?(To}&h|4wP4Q(DF^$v|-ae zYB{-)TpuL{(}r{2`5_nf@dwF&t5%Hd>vtOLX`#4vc6OFB=Wr`Eo6XZ)E*D+{M|GgG zwo8zHc0)F8-&Melq_aaO$nxLohE%%IIY`fK|4@tv)^B=~s#Bj6^&n~@_i=KVeoTIQ zhrv!XfE&`hr>Cc7_wL>Ih8(D@to$->6gSl%{X{KJn_K9q-=x!$-)7L0{1e1}u_lw& zykMf!1(!vEBMKKUb<)#6EyMVYtqthjL(GV4&;p;lr~- z4pdZB%;gQNPYu#f)FRW=Ku%k1G!jrN=gO`c>LW}l zh+Ec?J5X?J&;f4w-TU|NpBr)@F){I8r_&iz5qI3QiNe(r9S(ng*AlV0=^gQUN8G$3 zpd8@cxMjtP6<-KBz%rFz8cNh4{lrKm0owfXzYRo(L(<+NvdZ@8bb86*&>ySegwL>p zM}y*a?b?pB}P0>-0Zf|rkC;!WQW6M9((yppCNs26F5l>ajjB*e*Pc9 zIpQdBa^SBA%jo%}$Q>CQA$IS?-DYZR=^Zt-n9~q*9OB~+Wo2a{eemrxd=?`4 zdbViMqFEfGCOIjlS4u>}TzZ8z?8p;G3@uS?bnyup^mIaGl(1_j?JcI7hHls~=+pyT z&_22QG%r}NV78XC)(Lp@se*!n9rzZ5f(gVBg`k1p{%|zAme#&_I%0>$F+(BQc}`V zaN~n#^bcD~q!XVvnM}LTa}mCv4@LtM3E4J>_(h8{Gc)&qQ`FSa3lEB0x^yW*bYEFn zSqk1kSw5C8(+ZM&01Id~n^VCBoWM=bH>${bK&a-FmzSTCkq{x(8yjz^w1Lgi($ZY! z@F2JhoA<*B1$XGFjJd_d#Yg$HDx5%3p{wZ)j}_1f-LQeQ;ckePe+V4R*m3VfjYU&9t`-gepyCu}5+mB9&o33%+-v16~awY4=N z)F7k;UPxlY0-_l&(gnIwQc_-J-CuzX*n-VS7ULkY2P37vG=2K?g@+Cu+EGIuU|COAFE(xq>;NBUt~P8Y}v9W_&EMD z9|lu74Jqa~7=y8x!*lUv0Xpu6&Ye4V8vk%HQ9|MWGXZDt z%^pN%Gaj2UW5zcYFJAn3e0=;*0bJuAp2;y7i#g)03c7+?{||zQpi|V=)}rW8Cn`Gl s{|}#$z%}lnpCiAgU=HSnHQkx~58(UP;8810_W%F@07*qoM6N<$g8W`W2><{9 literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd068f88bbc9503b6c1592fcb31b123478d2ada GIT binary patch literal 3197 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 j)BsBFU?>7X zI-w(kP(um5h2G1nAK!oAw==u+YniF#K9Oo%GMk znQ(R1mV}$v-io-S99L|%u{YaW@cK1M@{mzJ8saoG}0aF5n#EvH9{a$kz8EcdPf183LuUA z5ZL9&4or|6ED(#&n-%#XLM?5q#th&|hEWVm!X7R6da&vmJcm76g@7*9FD%0ZB9S43 z@*~R^(EX}Y3)tIduD|`+vO`U~-wUldQTjx6w4KBw0W1TNv|Mt8IZr9htJ0elrsrw3 z_2;`Oaus0sM_BjyzjMETkFB}F)pn-rgfF3x2%T-n@Rn9lff**{9`U2@pypJliJD+$ z5As8;X4|lEZlo^DE6WehKA@)Zi)w~(!_WRJ&-`la6>I3#|MJvpQ{b+e&-j+-ec7m_ zAjx@t7THh7-~jVsyg2a;Ei6}Bh@01Yj=B~*WJ9jkykH8`7p1>&7tUa*Fl?h>In2HO z+sn-?X3KLDbY_=Mp=m{u(ZBwLMAhMTxAc1uE>T2*`n5r!>>EU3 z+gjvaUrwbsE6zbWdBidMt4XM4OwYsoIUlBEg{vsOFN=K$Ur}xl7lw=?!~VO2lpMOc z*2L;S)@Kp)-f@@ttP+3lz#J6g{;S`esJ z3akYI=t%h^J(lo3QNs%F8LGmPssd&|raVpiaC5PQVarGTr+N#;4-NVYTkX{j8O^<} z2%26h_`7u}isI&W-W79h@opN0c z8Aaf#k5uGS1@H|?sUMY03@OU!Ov+fo47z|?tK}BA>Z9{>HWmfr!52rLaU`tcZ;r^u zwq<3#Q5c(j%Y(bjairg-<9s3!Uy5_+KBLPnm@;m~#Nx;$ypJBC1n`28Vy!HpvE|ksbX}WW>eC&{Q_O`E`h2!*fgJ7+B$jUkK1N5Gx#Ar6 z94Anyjm}Y|D*hs+h4`ShDaXCrMMIIn-O?MJ>OlbGDnssr`w^a>6+g9kjix06Q%?7{I+mw<@XbkP?p?ktk9H>q&>P?!73 zcj+6K7v!BTK;u{iq^e2UliLR;yezk^*=B_6ERTaNzX6dVRY{>5F@<+Z-zIR9F(T9t zN^-+|G8}WP?*PzRZCueSycxD+l@3T1@ud3MHT>wLv(t$deR2ZyeMg=lbliO0XP?XI zg34%6&=2*`+sf+71!Zx>jfd`dd$nUKe5$}GRv&s#j~F%YElWI(Swq?5E>ZbHg6z-- zNgFhYk=U`TE<&|_X(mSlT})swAV?|r@~2H?2!TppCI+NBF;#f7eDm2@_xIraA++CM z<(G#ptDod6C98<*5Y|$tB-e!uA|+f#Uylkeu9gL3ABraNM6va_U^Pbj*j|W!P_k@2 zP}U???=hapiYHf{UN^729Gh>Pcp2<%8`kPbe}1dS@K;%_%W?O@2Bxu71h+7cOi7=y zeE({%ymsNu>FXYe!cvT}mV?UXn0JOeL+p>jMSmsbvgO^9)fJKTYL}9P2(mXY?MXZ( zyYg^L!d_6(GDavR{Dm0G{b+KRS`ox7y{?0FTomj|yF_d@fRG#Y)@9#|I^T_~Qw|D| z92aS#ah6p6_QC}yiVLd;llSl-<1D#Q|C^+4{LiJ%hu!ABPZik&QB>CYZH*1@ z1-~dr_DVFpMzK$nFI=GAJi3o?6et?SvR7Qy>3dp0X++|l7gz5H;Od@~Y`wRxy`y>0 z!u;0gU@hH=6fD|h$pJuaSWj^h@t zOUVn|3699aum8D>+s9Lbv*q>?DgTnCrYD}x{^X23-LcdxeXH+)1AkO*jEo?tfOagj z!<;!Uhk%rjJUwH5$2G_Qq97U?ZS`H9qcPd2H%L)O)|zDQB137PW4? zIST@b7bT@WJHG;dR)0D(Xh3w_6Mn%6E*0d!{BDA?wG(dAE#*&@h4`Xm>4N39zcj0Z znpo4*%fu4vXU+NFi+@j$Sie2qc*>LGS$GcP>7tVHt0j%s0C| zN16y?EqM_p;<)`fA_G5Su^7}2Cp4lrD{?l9H)y)Qb3&DBz_@ETQzf&QhD`ZTlcj8|Ur)y6N4vYuuY9Ip!FkbG8~7{fyk`cb z)xC~JH(~KduM!%SE?|Y0n-&fmkL8U}R%8E|Nx)fk7~^%TD+5xJc@LnmwH~_l%~i(O zCsR&6vZ^Ov11|u|p8_zmb0KynaD3Yk@6^-tW7#0Ku`4Av6|F{Ic$w*pM1ouYKGoB@ zHK71;Kg{xYXfB za@^fh^G#0uY5)2Sswlk)n45lOas>h;&MljVpG7HFqBF)WG~4(>@bZ%!0WLfX2sg5m+>z4)yGcX zc(GX*UtAFNIQ;pWPa>&9Y4(3n#{*p~ARA9Xk7tj;J8Lcndk5FW&8J4fpYC8J zah3|(HEiOX5hUBlv+!hPUE@Ow(z;J_)?dWzrG=waw#1F63`N8hu8b$aJY@7MVXtVt zt}OE5S}CIlQ72wU7(Z~NbRU;%5R8^733}=w^b5#In&`z)KY_}WHr66WJGO&(RZYt7 zguS?vU8Q|Mr)NZ8P(54C!RE9yv<+P?J;LO#9uvn(cX@mERO&2^bm$mH-)xXp=|Zjs zyPjIq7XKHsF#%!Bt6JFQtZNDiDWA+0n(_2-epUEMpZh~RWblqp;8t&q~7(@+dHO56iv?O+^)p z4sD^L%%lb9!41|VO{$6@stGO@^bt1Y-ze;uK5A(JPG6b#Rk_AcEVmvqmm{MralC)B z?z0aOV4>5psp z#_8X5-?#cPxl5cHtS;!+x~~G%hU5+Zk?zi%Yi;mR|92Hkw{mHMvu&hT*0;3x!jSAd zKv9(TlkP$G{ViI7+v7z4pL%946Z60N*vl8!e6M@<0H58}Qg~K~@Rtw%@>JhsiNl5d zjTud>zSuI~Z?$-wfq#Wla|c`YYQFg$CB4QNfQR(4^Q4M9?2sP}{uaRV)Q?J>3r(CS zV;lpwjr3?@Ol#No7>)mSQ-js7!LEHP*XAvW=Bh{M0j^Pk+fSAv@awdLxp7|`n)0dY z#oOW{3w-uP$cdxi+EBb#Y;d~24M?i?`bEc+9`5PUM2cx{Bk$eD3BMt(jNIoKq40a} zXo+7H%U0rJ+yaNqh1i~SW<>Qm!sEUL6ZwtSQO*aa6#ffq5e^<^4E}yJf~R?e16PI; zn3_7!*YrRlbiRM~&e{Q`v)Rf>10m3F51GXyB$wQe`SzKw^fq6K^_nl`ptQ0K!udrfm#@=y-x70T(reFfXhg8qEtL;3 zp8UU(Dr}@@RfMQx^s@H2fC_hi()(?Mlv&FH%EDm-QM62(k(jUX#@@_DR82+Ojj~b( zZ(|gsq%R}$+g}$^HHf#Jw~M+qlj-lPa-PH8G(xUaUrM~jg!%bx+xDC@imw=JrKem^ zU-j0QVK|RGDiUN#NBw3qd$6~IX;_~BBk>BV`)l|=Ge{xXGNm? zU9qzPY{v8yM>B8imRe8_Sn_z~4)N8eyyp&_0y(~^O?h_WlD-B!9&Hi&GbPr{fTq+P z{kegUIu7o}46mI!J|qWJqVc6#6m_m?D6jW}+Y;TM7U%o5l0@tq;yd^307lc<=2`ef^Rg)hW zNJhVrC|b$q1Md5reyVTt<~rv_NKHH$9o@T8N4=2q4~bTDchE{qg#FxO_IO_gDvw=0 z@ZD8)b@uFT6}GjJ&Azm|s9H-wNqw6|Dx->h2w)3rV2z6C)$<13(o}pCccz|JpUiRJ zEFE_zUSplS!kY*=naRkUK9j{givC(h^%E|k((Lp&0x9O~>0Bx5YN0Za>D z_W3e1eeRXoEan{wTB8>fJv$VC0kP%i4o^yRvm;dk%kXTLygwh3-P9o#4v?VBdx{KM zosk!wJ+j)`PNBo%Qgx4{Yxx=V3-iZMDkVB~Mt1FjVs0UXeo+dnt*cNG0vVFrQ9V{3 zBVkZQf7_1cE^zojVJMe+Z1bCd5BdY>DK+8E6pQkQtQq}`dy5%-;-)5Ef1Z$6(P?QH zeg9Eu9p#5ItH-k2b%lDZeDC#bR`ING^hUPvDXL!hKrEa8!M-iMWCW;8%(sJUB03ji z_!U)2AMza(BcMJuA}k0fNM6hjx^eDHu|{Ux205IbwO`3QTJ-Y?^fNQzGbZL?+q%LA z;l_dlF5!wlLeVC&-@Nq>`c_w1(;v?=;cxcb&0`~uj(ahChBU0M+w$%}@dTsMN6OF; z0W#i7dMzp)%f|6 z_ZGKT()Q!!%(aB%#{V9wTR>6hY(1_Zyr-44#~GcHq9E^ON)%k`ow;d$Z{sTKv<{F- pN$`hdsnYyUJ{14|Cfm%UD~g5fuf;0dC literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/src/react-native-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc7421c0362aa85cf7060c34a479eaac46668db GIT binary patch literal 6279 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 literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91ff16d1cdfb85a1998d01381484b2f2307733ca GIT binary patch literal 5156 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 P{i86_Gt+&m?GpE2z17i` literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/src/react-native-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..d0dfe92ad2ee12dfdaf58509cfe373cb77994ae4 GIT binary patch literal 9956 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 literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2d1b2978b64a90e584afd042dcd201f4c61295 GIT binary patch literal 15875 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 LL!nCU)7Sq4PvRk! literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/src/react-native-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..59e8b6bf8362f32e373ae688e98243d7480e12e4 GIT binary patch literal 15171 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%0AH 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 literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/app/src/main/res/values-night/colors.xml b/src/react-native-app/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000000..ea100eaef3 --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1 @@ + diff --git a/src/react-native-app/android/app/src/main/res/values/colors.xml b/src/react-native-app/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000000..c68b0528be --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + #ffffff + #ffffff + #023c69 + #ffffff + diff --git a/src/react-native-app/android/app/src/main/res/values/ic_launcher_background.xml b/src/react-native-app/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000000..f42ada656e --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + diff --git a/src/react-native-app/android/app/src/main/res/values/strings.xml b/src/react-native-app/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000000..c35abcbd3b --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + Astronomy Shop App + contain + false + automatic + diff --git a/src/react-native-app/android/app/src/main/res/values/styles.xml b/src/react-native-app/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..333e6289ec --- /dev/null +++ b/src/react-native-app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/src/react-native-app/android/build.gradle b/src/react-native-app/android/build.gradle new file mode 100644 index 0000000000..932bf7b34b --- /dev/null +++ b/src/react-native-app/android/build.gradle @@ -0,0 +1,41 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0' + minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23') + compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34') + targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23' + + ndkVersion = "26.1.10909125" + } + repositories { + google() + mavenCentral() + } + dependencies { + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + } +} + +apply plugin: "com.facebook.react.rootproject" + +allprojects { + repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) + } + + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } +} diff --git a/src/react-native-app/android/gradle.properties b/src/react-native-app/android/gradle.properties new file mode 100644 index 0000000000..41b173c48a --- /dev/null +++ b/src/react-native-app/android/gradle.properties @@ -0,0 +1,56 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false + +# Enable network inspector +EX_DEV_CLIENT_NETWORK_INSPECTOR=true + +# Use legacy packaging to compress native libraries in the resulting APK. +expo.useLegacyPackaging=false diff --git a/src/react-native-app/android/gradle/wrapper/gradle-wrapper.jar b/src/react-native-app/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/src/react-native-app/android/gradle/wrapper/gradle-wrapper.properties b/src/react-native-app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..2ea3535dc0 --- /dev/null +++ b/src/react-native-app/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/src/react-native-app/android/gradlew b/src/react-native-app/android/gradlew new file mode 100755 index 0000000000..1aa94a4269 --- /dev/null +++ b/src/react-native-app/android/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/src/react-native-app/android/gradlew.bat b/src/react-native-app/android/gradlew.bat new file mode 100644 index 0000000000..25da30dbde --- /dev/null +++ b/src/react-native-app/android/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/react-native-app/android/settings.gradle b/src/react-native-app/android/settings.gradle new file mode 100644 index 0000000000..0079352548 --- /dev/null +++ b/src/react-native-app/android/settings.gradle @@ -0,0 +1,18 @@ +rootProject.name = 'reactnativeapp' + +dependencyResolutionManagement { + versionCatalogs { + reactAndroidLibs { + from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml"))) + } + } +} + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); +useExpoModules() + +apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); +applyNativeModulesSettingsGradle(settings) + +include ':app' +includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) diff --git a/src/react-native-app/app.json b/src/react-native-app/app.json new file mode 100644 index 0000000000..50a97b4c2a --- /dev/null +++ b/src/react-native-app/app.json @@ -0,0 +1,38 @@ +{ + "expo": { + "name": "Astronomy Shop App", + "slug": "astronomyshopapp", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/images/icon.png", + "scheme": "myapp", + "userInterfaceStyle": "automatic", + "splash": { + "image": "./assets/images/splash.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true, + "bundleIdentifier": "io.opentelemetry.reactnativeapp" + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/images/adaptive-icon.png", + "backgroundColor": "#ffffff" + }, + "package": "io.opentelemetry.reactnativeapp" + }, + "web": { + "bundler": "metro", + "output": "static", + "favicon": "./assets/images/favicon.png" + }, + "plugins": [ + "expo-router" + ], + "experiments": { + "typedRoutes": true + } + } +} diff --git a/src/react-native-app/app/(tabs)/_layout.tsx b/src/react-native-app/app/(tabs)/_layout.tsx new file mode 100644 index 0000000000..177d3cd902 --- /dev/null +++ b/src/react-native-app/app/(tabs)/_layout.tsx @@ -0,0 +1,49 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { Tabs } from "expo-router"; +import React from "react"; +import { TabBarIcon } from "@/components/navigation/TabBarIcon"; +import { useCart } from "@/providers/Cart.provider"; + +export default function TabLayout() { + const { + cart: { items }, + } = useCart(); + + let itemsInCart = 0; + items.forEach((item) => { + itemsInCart += item.quantity; + }); + + return ( + + ( + + ), + }} + /> + ( + + ), + }} + /> + + ); +} diff --git a/src/react-native-app/app/(tabs)/cart.tsx b/src/react-native-app/app/(tabs)/cart.tsx new file mode 100644 index 0000000000..c91f84728e --- /dev/null +++ b/src/react-native-app/app/(tabs)/cart.tsx @@ -0,0 +1,145 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/components/Cart/CartDetail.tsx + */ +import { router } from "expo-router"; +import { ThemedView } from "@/components/ThemedView"; +import { ThemedText } from "@/components/ThemedText"; +import { Pressable, StyleSheet } from "react-native"; +import { useCart } from "@/providers/Cart.provider"; +import CheckoutForm from "@/components/CheckoutForm"; +import EmptyCart from "@/components/EmptyCart"; +import { ThemedScrollView } from "@/components/ThemedScrollView"; +import { useCallback, useMemo } from "react"; +import { IFormData } from "@/components/CheckoutForm/CheckoutForm"; +import Toast from "react-native-toast-message"; +import SessionGateway from "@/gateways/Session.gateway"; +import { useThemeColor } from "@/hooks/useThemeColor"; + +export default function Cart() { + const tint = useThemeColor({}, "tint"); + const styles = useMemo(() => getStyles(tint), [tint]); + const { + cart: { items }, + emptyCart, + placeOrder, + } = useCart(); + + const onEmptyCart = useCallback(() => { + emptyCart(); + Toast.show({ + type: "success", + position: "bottom", + text1: "Your cart was emptied", + }); + }, [emptyCart]); + + const onPlaceOrder = useCallback( + async ({ + email, + state, + streetAddress, + country, + city, + zipCode, + creditCardCvv, + creditCardExpirationMonth, + creditCardExpirationYear, + creditCardNumber, + }: IFormData) => { + const { userId } = await SessionGateway.getSession(); + await placeOrder({ + userId, + email, + address: { + streetAddress, + state, + country, + city, + zipCode, + }, + // TODO simplify react native demo for now by hard-coding the selected currency + userCurrency: "USD", + creditCard: { + creditCardCvv, + creditCardExpirationMonth, + creditCardExpirationYear, + creditCardNumber, + }, + }); + + Toast.show({ + type: "success", + position: "bottom", + text1: "Your order is Complete!", + text2: "We've sent you a confirmation email.", + }); + + router.replace("/"); + }, + [placeOrder], + ); + + if (!items.length) { + return ; + } + + return ( + + + + {items.map((item) => ( + + {item.product.name} + {item.quantity} + + ))} + + + + + Empty Cart + + + + + ); +} + +const getStyles = (tint: string) => + StyleSheet.create({ + container: { + flex: 1, + gap: 20, + justifyContent: "flex-start", + }, + emptyCartContainer: { + display: "flex", + alignItems: "flex-end", + }, + emptyCart: { + borderRadius: 4, + backgroundColor: "green", + alignItems: "center", + width: 100, + right: 20, + position: "relative", + }, + emptyCartText: { + color: "white", + }, + cartItem: { + marginLeft: 20, + marginRight: 20, + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + borderStyle: "solid", + borderBottomWidth: 1, + borderColor: tint, + }, + bold: { + fontWeight: "bold", + }, + }); diff --git a/src/react-native-app/app/(tabs)/index.tsx b/src/react-native-app/app/(tabs)/index.tsx new file mode 100644 index 0000000000..c01e1ea5d2 --- /dev/null +++ b/src/react-native-app/app/(tabs)/index.tsx @@ -0,0 +1,39 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { ThemedView } from "@/components/ThemedView"; +import ProductList from "@/components/ProductList"; +import { useQuery } from "@tanstack/react-query"; +import { ScrollView, StyleSheet } from "react-native"; +import { ThemedText } from "@/components/ThemedText"; +import ApiGateway from "@/gateways/Api.gateway"; + +export default function Index() { + const { data: productList = [] } = useQuery({ + // TODO simplify react native demo for now by hard-coding the selected currency + queryKey: ["products", "USD"], + queryFn: () => ApiGateway.listProducts("USD"), + }); + + return ( + + + {productList.length ? ( + + ) : ( + + No products found, make sure the backend services for the + OpenTelemetry demo are running + + )} + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center", + alignItems: "center", + }, +}); diff --git a/src/react-native-app/app/_layout.tsx b/src/react-native-app/app/_layout.tsx new file mode 100644 index 0000000000..d8ac89c3c9 --- /dev/null +++ b/src/react-native-app/app/_layout.tsx @@ -0,0 +1,59 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { SplashScreen, Stack } from "expo-router"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { + DarkTheme, + DefaultTheme, + ThemeProvider, +} from "@react-navigation/native"; +import { useColorScheme } from "react-native"; +import { RootSiblingParent } from "react-native-root-siblings"; +import Toast from "react-native-toast-message"; +import { useFonts } from "expo-font"; +import { useEffect, useMemo } from "react"; +import { useTracer } from "@/hooks/useTracer"; +import CartProvider from "@/providers/Cart.provider"; + +const queryClient = new QueryClient(); + +export default function RootLayout() { + const colorScheme = useColorScheme(); + const [fontsLoaded] = useFonts({ + SpaceMono: require("../assets/fonts/SpaceMono-Regular.ttf"), + }); + const { loaded: tracerLoaded } = useTracer(); + + const loaded = useMemo( + () => fontsLoaded && tracerLoaded, + [fontsLoaded, tracerLoaded], + ); + useEffect(() => { + if (loaded) { + SplashScreen.hideAsync(); + } + }, [loaded]); + + if (!loaded) { + return null; + } + + return ( + + + + + {/* + TODO Once https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2359 is available it can + be used here to provide telemetry for navigation between tabs + */} + + + + + + + + + ); +} diff --git a/src/react-native-app/assets/fonts/SpaceMono-Regular.ttf b/src/react-native-app/assets/fonts/SpaceMono-Regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..28d7ff717769d29e5d1f036bfa91eea660ce8a24 GIT binary patch literal 93252 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%0Ay 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 KMNUMnLSTX+CF^zo literal 0 HcmV?d00001 diff --git a/src/react-native-app/assets/images/icon.png b/src/react-native-app/assets/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe6b8f49f43fad31dcbbb3ea670e41fe869b9e9 GIT binary patch literal 20843 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 { + const { control, handleSubmit } = useForm({ + defaultValues: { + email: "someone@example.com", + streetAddress: "1600 Amphitheatre Parkway", + city: "Mountain View", + state: "CA", + country: "United States", + zipCode: "94043", + creditCardNumber: "4432-8015-6152-0454", + creditCardCvv: 672, + creditCardExpirationYear: 2030, + creditCardExpirationMonth: 1, + }, + }); + + return ( + + ( + + )} + name="email" + /> + ( + + )} + name="streetAddress" + /> + ( + + )} + name="zipCode" + /> + ( + + )} + name="country" + /> + ( + + )} + name="creditCardNumber" + /> + ( + + )} + name="creditCardExpirationMonth" + /> + ( + + )} + name="creditCardExpirationYear" + /> + ( + + )} + name="creditCardCvv" + /> + + + Place Order + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + marginLeft: 30, + }, + submitContainer: { + display: "flex", + justifyContent: "center", + alignItems: "center", + margin: 20, + }, + submit: { + borderRadius: 4, + backgroundColor: "blue", + alignItems: "center", + justifyContent: "center", + width: 150, + padding: 10, + position: "relative", + }, + submitText: { + color: "white", + fontSize: 20, + }, +}); + +export default CheckoutForm; diff --git a/src/react-native-app/components/CheckoutForm/index.ts b/src/react-native-app/components/CheckoutForm/index.ts new file mode 100644 index 0000000000..dc8dd0b1d6 --- /dev/null +++ b/src/react-native-app/components/CheckoutForm/index.ts @@ -0,0 +1,3 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +export { default } from "./CheckoutForm"; diff --git a/src/react-native-app/components/EmptyCart/EmptyCart.tsx b/src/react-native-app/components/EmptyCart/EmptyCart.tsx new file mode 100644 index 0000000000..962cf28143 --- /dev/null +++ b/src/react-native-app/components/EmptyCart/EmptyCart.tsx @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/components/Cart/EmptyCart.tsx + */ +import { ThemedView } from "@/components/ThemedView"; +import { ThemedText } from "@/components/ThemedText"; +import { StyleSheet } from "react-native"; + +const EmptyCart = () => { + return ( + + + Your shopping cart is empty! + + + Items you add to your shopping cart will appear here. + + + ); +}; + +export default EmptyCart; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center", + alignItems: "center", + }, + header: { + fontSize: 20, + }, + subHeader: { + fontSize: 14, + }, +}); diff --git a/src/react-native-app/components/EmptyCart/index.ts b/src/react-native-app/components/EmptyCart/index.ts new file mode 100644 index 0000000000..9f421d165f --- /dev/null +++ b/src/react-native-app/components/EmptyCart/index.ts @@ -0,0 +1,3 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +export { default } from "./EmptyCart"; diff --git a/src/react-native-app/components/Field.tsx b/src/react-native-app/components/Field.tsx new file mode 100644 index 0000000000..d0f8e9683d --- /dev/null +++ b/src/react-native-app/components/Field.tsx @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { StyleSheet, TextInput, type TextInputProps } from "react-native"; +import { ThemedView } from "@/components/ThemedView"; +import { ThemedText } from "@/components/ThemedText"; +import { useThemeColor } from "@/hooks/useThemeColor"; + +export type FieldProps = TextInputProps & { + label: string; +}; + +export function Field({ label, ...otherProps }: FieldProps) { + const color = useThemeColor({}, "text"); + + return ( + + {label}: + + + ); +} + +const styles = StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + gap: 10, + alignItems: "center", + }, +}); diff --git a/src/react-native-app/components/ProductCard/ProductCard.tsx b/src/react-native-app/components/ProductCard/ProductCard.tsx new file mode 100644 index 0000000000..2fa3dbfa0c --- /dev/null +++ b/src/react-native-app/components/ProductCard/ProductCard.tsx @@ -0,0 +1,102 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/components/ProductCard/ProductCard.tsx + */ +import { Product } from "@/protos/demo"; +import { ThemedView } from "@/components/ThemedView"; +import { useState, useEffect, useMemo } from "react"; +import getLocalhost from "@/utils/Localhost"; +import { Image, Pressable, StyleSheet } from "react-native"; +import { ThemedText } from "@/components/ThemedText"; +import { useThemeColor } from "@/hooks/useThemeColor"; + +interface IProps { + product: Product; + onClickAdd: () => void; +} + +async function getImageURL(picture: string) { + const localhost = await getLocalhost(); + return `http://${localhost}:${process.env.EXPO_PUBLIC_FRONTEND_PROXY_PORT}/images/products/${picture}`; +} + +const ProductCard = ({ + product: { + picture, + name, + priceUsd = { + currencyCode: "USD", + units: 0, + nanos: 0, + }, + }, + onClickAdd, +}: IProps) => { + const tint = useThemeColor({}, "tint"); + const styles = useMemo(() => getStyles(tint), [tint]); + const [imageSrc, setImageSrc] = useState(""); + + useEffect(() => { + getImageURL(picture) + .then(setImageSrc) + .catch((reason) => { + console.warn("Failed to get image URL: ", reason); + }); + }, [picture]); + + // TODO simplify react native demo for now by hard-coding the selected currency + const price = (priceUsd?.units + priceUsd?.nanos / 100000000).toFixed(2); + + return ( + + + {imageSrc && } + + + {name} + $ {price} + + Add to Cart + + + + ); +}; + +const getStyles = (tint: string) => + StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + padding: 20, + marginLeft: 10, + marginRight: 10, + borderStyle: "solid", + borderBottomWidth: 1, + borderColor: tint, + gap: 30, + }, + image: { + width: 100, + height: 100, + }, + productInfo: { + flexShrink: 1, + }, + name: {}, + price: { + fontWeight: "bold", + }, + add: { + borderRadius: 4, + backgroundColor: "green", + alignItems: "center", + width: 100, + }, + addText: { + color: "white", + }, + }); + +export default ProductCard; diff --git a/src/react-native-app/components/ProductCard/index.ts b/src/react-native-app/components/ProductCard/index.ts new file mode 100644 index 0000000000..e08867030d --- /dev/null +++ b/src/react-native-app/components/ProductCard/index.ts @@ -0,0 +1,3 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +export { default } from "./ProductCard"; diff --git a/src/react-native-app/components/ProductList/ProductList.tsx b/src/react-native-app/components/ProductList/ProductList.tsx new file mode 100644 index 0000000000..30bd6efb3f --- /dev/null +++ b/src/react-native-app/components/ProductList/ProductList.tsx @@ -0,0 +1,50 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from: + * src/frontend/pages/product/[productId]/index.tsx + * src/frontend/components/ProductList/ProductList.tsx + */ +import Toast from "react-native-toast-message"; +import { useCallback } from "react"; +import ProductCard from "@/components/ProductCard"; +import { Product } from "@/protos/demo"; +import { ThemedScrollView } from "@/components/ThemedScrollView"; +import { useCart } from "@/providers/Cart.provider"; + +interface IProps { + productList: Product[]; +} + +const ProductList = ({ productList }: IProps) => { + const { addItem } = useCart(); + const onAddItem = useCallback( + async (id: string) => { + addItem({ + productId: id, + quantity: 1, + }); + + Toast.show({ + type: "success", + position: "bottom", + text1: "This item has been added to your cart", + }); + }, + [addItem], + ); + + return ( + + {productList.map((product) => ( + onAddItem(product.id)} + /> + ))} + + ); +}; + +export default ProductList; diff --git a/src/react-native-app/components/ProductList/index.ts b/src/react-native-app/components/ProductList/index.ts new file mode 100644 index 0000000000..d3e14bb3bc --- /dev/null +++ b/src/react-native-app/components/ProductList/index.ts @@ -0,0 +1,3 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +export { default } from "./ProductList"; diff --git a/src/react-native-app/components/ThemedScrollView.tsx b/src/react-native-app/components/ThemedScrollView.tsx new file mode 100644 index 0000000000..34f5d211d9 --- /dev/null +++ b/src/react-native-app/components/ThemedScrollView.tsx @@ -0,0 +1,23 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { ScrollView, type ScrollViewProps } from "react-native"; +import { useThemeColor } from "@/hooks/useThemeColor"; + +export type ThemedViewProps = ScrollViewProps & { + lightColor?: string; + darkColor?: string; +}; + +export function ThemedScrollView({ + style, + lightColor, + darkColor, + ...otherProps +}: ThemedViewProps) { + const backgroundColor = useThemeColor( + { light: lightColor, dark: darkColor }, + "background", + ); + + return ; +} diff --git a/src/react-native-app/components/ThemedText.tsx b/src/react-native-app/components/ThemedText.tsx new file mode 100644 index 0000000000..cf6abf89a1 --- /dev/null +++ b/src/react-native-app/components/ThemedText.tsx @@ -0,0 +1,62 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { Text, type TextProps, StyleSheet } from "react-native"; + +import { useThemeColor } from "@/hooks/useThemeColor"; + +export type ThemedTextProps = TextProps & { + lightColor?: string; + darkColor?: string; + type?: "default" | "title" | "defaultSemiBold" | "subtitle" | "link"; +}; + +export function ThemedText({ + style, + lightColor, + darkColor, + type = "default", + ...rest +}: ThemedTextProps) { + const color = useThemeColor({ light: lightColor, dark: darkColor }, "text"); + + return ( + + ); +} + +const styles = StyleSheet.create({ + default: { + fontSize: 16, + lineHeight: 24, + }, + defaultSemiBold: { + fontSize: 16, + lineHeight: 24, + fontWeight: "600", + }, + title: { + fontSize: 32, + fontWeight: "bold", + lineHeight: 32, + }, + subtitle: { + fontSize: 20, + fontWeight: "bold", + }, + link: { + lineHeight: 30, + fontSize: 16, + color: "#0a7ea4", + }, +}); diff --git a/src/react-native-app/components/ThemedView.tsx b/src/react-native-app/components/ThemedView.tsx new file mode 100644 index 0000000000..94668b3266 --- /dev/null +++ b/src/react-native-app/components/ThemedView.tsx @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { View, type ViewProps } from "react-native"; + +import { useThemeColor } from "@/hooks/useThemeColor"; + +export type ThemedViewProps = ViewProps & { + lightColor?: string; + darkColor?: string; +}; + +export function ThemedView({ + style, + lightColor, + darkColor, + ...otherProps +}: ThemedViewProps) { + const backgroundColor = useThemeColor( + { light: lightColor, dark: darkColor }, + "background", + ); + + return ; +} diff --git a/src/react-native-app/components/navigation/TabBarIcon.tsx b/src/react-native-app/components/navigation/TabBarIcon.tsx new file mode 100644 index 0000000000..42f43b2425 --- /dev/null +++ b/src/react-native-app/components/navigation/TabBarIcon.tsx @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// You can explore the built-in icon families and icons on the web at https://icons.expo.fyi/ + +import Ionicons from "@expo/vector-icons/Ionicons"; +import { type IconProps } from "@expo/vector-icons/build/createIconSet"; +import { type ComponentProps } from "react"; + +export function TabBarIcon({ + style, + ...rest +}: IconProps["name"]>) { + return ; +} diff --git a/src/react-native-app/constants/Colors.ts b/src/react-native-app/constants/Colors.ts new file mode 100644 index 0000000000..8219cf80fb --- /dev/null +++ b/src/react-native-app/constants/Colors.ts @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Below are the colors that are used in the app. The colors are defined in the light and dark mode. + * There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc. + */ + +const tintColorLight = "#0a7ea4"; +const tintColorDark = "#fff"; + +export const Colors = { + light: { + text: "#11181C", + background: "#fff", + tint: tintColorLight, + icon: "#687076", + tabIconDefault: "#687076", + tabIconSelected: tintColorLight, + }, + dark: { + text: "#ECEDEE", + background: "#151718", + tint: tintColorDark, + icon: "#9BA1A6", + tabIconDefault: "#9BA1A6", + tabIconSelected: tintColorDark, + }, +}; diff --git a/src/react-native-app/gateways/Api.gateway.ts b/src/react-native-app/gateways/Api.gateway.ts new file mode 100644 index 0000000000..96f898baad --- /dev/null +++ b/src/react-native-app/gateways/Api.gateway.ts @@ -0,0 +1,150 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/gateways/Api.gateway.ts + * + * TODO The React Native example only implements a subset of the functionality defined here, missing in particular is: + * - showing ads + * - showing recommendations + * - calculating shipping costs + * - currency conversion + */ +import { + Ad, + Address, + Cart, + CartItem, + Money, + PlaceOrderRequest, + Product, +} from "@/protos/demo"; +import { IProductCart, IProductCartItem, IProductCheckout } from "@/types/Cart"; +import request from "@/utils/Request"; +import SessionGateway from "./Session.gateway"; +import { context, propagation } from "@opentelemetry/api"; + +const basePath = "/api"; + +const Apis = () => ({ + async getCart(currencyCode: string) { + const { userId } = await SessionGateway.getSession(); + return request({ + url: `${basePath}/cart`, + queryParams: { sessionId: userId, currencyCode }, + }); + }, + async addCartItem({ + currencyCode, + ...item + }: CartItem & { currencyCode: string }) { + const { userId } = await SessionGateway.getSession(); + return request({ + url: `${basePath}/cart`, + body: { item, userId }, + queryParams: { currencyCode }, + method: "POST", + }); + }, + async emptyCart() { + const { userId } = await SessionGateway.getSession(); + return request({ + url: `${basePath}/cart`, + method: "DELETE", + body: { userId }, + }); + }, + + getSupportedCurrencyList() { + return request({ + url: `${basePath}/currency`, + }); + }, + + getShippingCost( + itemList: IProductCartItem[], + currencyCode: string, + address: Address, + ) { + return request({ + url: `${basePath}/shipping`, + queryParams: { + itemList: JSON.stringify( + itemList.map(({ productId, quantity }) => ({ productId, quantity })), + ), + currencyCode, + address: JSON.stringify(address), + }, + }); + }, + + placeOrder({ + currencyCode, + ...order + }: PlaceOrderRequest & { currencyCode: string }) { + return request({ + url: `${basePath}/checkout`, + method: "POST", + queryParams: { currencyCode }, + body: order, + }); + }, + + listProducts(currencyCode: string) { + return request({ + url: `${basePath}/products`, + queryParams: { currencyCode }, + }); + }, + getProduct(productId: string, currencyCode: string) { + return request({ + url: `${basePath}/products/${productId}`, + queryParams: { currencyCode }, + }); + }, + async listRecommendations(productIds: string[], currencyCode: string) { + const { userId } = await SessionGateway.getSession(); + return request({ + url: `${basePath}/recommendations`, + queryParams: { + productIds, + sessionId: userId, + currencyCode, + }, + }); + }, + listAds(contextKeys: string[]) { + return request({ + url: `${basePath}/data`, + queryParams: { + contextKeys, + }, + }); + }, +}); + +/** + * Extends all the API calls to set baggage automatically. + */ +const ApiGateway = new Proxy(Apis(), { + get(target, prop, receiver) { + const originalFunction = Reflect.get(target, prop, receiver); + + if (typeof originalFunction !== "function") { + return originalFunction; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return async function (...args: any[]) { + const { userId } = await SessionGateway.getSession(); + const baggage = + propagation.getActiveBaggage() || propagation.createBaggage(); + const newBaggage = baggage.setEntry("session.id", { value: userId }); + const newContext = propagation.setBaggage(context.active(), newBaggage); + return context.with(newContext, () => { + return Reflect.apply(originalFunction, undefined, args); + }); + }; + }, +}); + +export default ApiGateway; diff --git a/src/react-native-app/gateways/Session.gateway.ts b/src/react-native-app/gateways/Session.gateway.ts new file mode 100644 index 0000000000..d6da9e1b46 --- /dev/null +++ b/src/react-native-app/gateways/Session.gateway.ts @@ -0,0 +1,43 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/gateways/Session.gateway.ts + */ +import "react-native-get-random-values"; // Must be imported before 'uuid', see https://stackoverflow.com/a/68097811 +import { v4 } from "uuid"; +import AsyncStorage from "@react-native-async-storage/async-storage"; + +interface ISession { + userId: string; + currencyCode: string; +} + +const sessionKey = "session"; +const defaultSession = { + userId: v4(), + currencyCode: "USD", +}; + +const SessionGateway = () => ({ + async getSession(): Promise { + const sessionString = await AsyncStorage.getItem(sessionKey); + + if (!sessionString) { + await AsyncStorage.setItem(sessionKey, JSON.stringify(defaultSession)); + } + + return JSON.parse( + sessionString || JSON.stringify(defaultSession), + ) as ISession; + }, + setSessionValue(key: K, value: ISession[K]) { + const session = this.getSession(); + + return AsyncStorage.setItem( + sessionKey, + JSON.stringify({ ...session, [key]: value }), + ); + }, +}); + +export default SessionGateway(); diff --git a/src/react-native-app/hooks/useColorScheme.ts b/src/react-native-app/hooks/useColorScheme.ts new file mode 100644 index 0000000000..2a0bb61978 --- /dev/null +++ b/src/react-native-app/hooks/useColorScheme.ts @@ -0,0 +1,3 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +export { useColorScheme } from "react-native"; diff --git a/src/react-native-app/hooks/useColorScheme.web.ts b/src/react-native-app/hooks/useColorScheme.web.ts new file mode 100644 index 0000000000..fe92ccd699 --- /dev/null +++ b/src/react-native-app/hooks/useColorScheme.web.ts @@ -0,0 +1,10 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// NOTE: The default React Native styling doesn't support server rendering. +// Server rendered styles should not change between the first render of the HTML +// and the first render on the client. Typically, web developers will use CSS media queries +// to render different styles on the client and server, these aren't directly supported in React Native +// but can be achieved using a styling library like Nativewind. +export function useColorScheme() { + return "light"; +} diff --git a/src/react-native-app/hooks/useThemeColor.ts b/src/react-native-app/hooks/useThemeColor.ts new file mode 100644 index 0000000000..c7b9684755 --- /dev/null +++ b/src/react-native-app/hooks/useThemeColor.ts @@ -0,0 +1,24 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Learn more about light and dark modes: + * https://docs.expo.dev/guides/color-schemes/ + */ + +import { useColorScheme } from "react-native"; + +import { Colors } from "@/constants/Colors"; + +export function useThemeColor( + props: { light?: string; dark?: string }, + colorName: keyof typeof Colors.light & keyof typeof Colors.dark, +) { + const theme = useColorScheme() ?? "light"; + const colorFromProps = props[theme]; + + if (colorFromProps) { + return colorFromProps; + } else { + return Colors[theme][colorName]; + } +} diff --git a/src/react-native-app/hooks/useTracer.ts b/src/react-native-app/hooks/useTracer.ts new file mode 100644 index 0000000000..bb162c3799 --- /dev/null +++ b/src/react-native-app/hooks/useTracer.ts @@ -0,0 +1,123 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { + CompositePropagator, + W3CBaggagePropagator, + W3CTraceContextPropagator, +} from "@opentelemetry/core"; +import { WebTracerProvider } from "@opentelemetry/sdk-trace-web"; +import { + BatchSpanProcessor, +} from "@opentelemetry/sdk-trace-base"; +import { XMLHttpRequestInstrumentation } from "@opentelemetry/instrumentation-xml-http-request"; +import { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch"; +import { registerInstrumentations } from "@opentelemetry/instrumentation"; +import { Resource } from "@opentelemetry/resources"; +import { + ATTR_DEVICE_ID, + ATTR_OS_NAME, + ATTR_OS_VERSION, + ATTR_SERVICE_NAME, + ATTR_SERVICE_VERSION, +} from "@opentelemetry/semantic-conventions/incubating"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import getLocalhost from "@/utils/Localhost"; +import { useEffect, useState } from "react"; +import { + getDeviceId, + getSystemVersion, + getVersion, +} from "react-native-device-info"; +import { Platform } from "react-native"; +import { SessionIdProcessor } from "@/utils/SessionIdProcessor"; + +const Tracer = async () => { + const localhost = await getLocalhost(); + + // TODO Should add a resource detector for React Native that provides this automatically + const resource = new Resource({ + [ATTR_SERVICE_NAME]: "react-native-app", + [ATTR_OS_NAME]: Platform.OS, + [ATTR_OS_VERSION]: getSystemVersion(), + [ATTR_SERVICE_VERSION]: getVersion(), + [ATTR_DEVICE_ID]: getDeviceId(), + }); + + // TODO Not obvious that the WebTracerProvider can be used for React Native, might be useful to have a thin + // ReactNativeTracerProvider on top of it (or BasicTracerProvider) that makes this clear. Could also add some + // protection against browser specific functionality being added to WebTracerProvider that breaks functionality + // for React Native. + // Alternatively could offer a TracerProvider that exposed a JS interface on top of the OTEL Android and Swift SDKS, + // giving developers the option of collecting telemetry at the native mobile layer + const provider = new WebTracerProvider({ + resource, + spanProcessors: [ + new BatchSpanProcessor( + new OTLPTraceExporter({ + url: `http://${localhost}:${process.env.EXPO_PUBLIC_FRONTEND_PROXY_PORT}/otlp-http/v1/traces`, + }), + { + scheduledDelayMillis: 500, + }, + ), + + // TODO introduce a React Native session processor package that could be used here, taking into account mobile + // specific considerations for the session such as putting the app into the background + new SessionIdProcessor(), + ], + }); + + provider.register({ + propagator: new CompositePropagator({ + propagators: [ + new W3CBaggagePropagator(), + new W3CTraceContextPropagator(), + ], + }), + }); + + registerInstrumentations({ + instrumentations: [ + // TODO Some tiptoeing required here, propagateTraceHeaderCorsUrls is required to make the instrumentation + // work in the context of a mobile app even though we are not making CORS requests. `clearTimingResources` must + // be turned off to avoid using the web-only Performance API + // Overall wrapping or forking this and providing a React Native specific auto instrumentation will ease + // integration and make it less error-prone + new FetchInstrumentation({ + propagateTraceHeaderCorsUrls: /.*/, + clearTimingResources: false, + }), + + // The React Native implementation of fetch is simply a polyfill on top of XMLHttpRequest: + // https://github.com/facebook/react-native/blob/7ccc5934d0f341f9bc8157f18913a7b340f5db2d/packages/react-native/Libraries/Network/fetch.js#L17 + // Because of this when making requests using `fetch` there will an additional span created for the underlying + // request made with XMLHttpRequest. Since in this demo calls to /api/ are made using fetch, turn off + // instrumentation for that path to avoid the extra spans. + new XMLHttpRequestInstrumentation({ + ignoreUrls: [/\/api\/.*/], + }), + ], + }); +}; + +export interface TracerResult { + loaded: boolean; +} + +// TODO providing a wrapper similar to this that uses hooks over the full JS OTEL API would be nice to have for both +// React Native and React development +export const useTracer = (): TracerResult => { + const [loaded, setLoaded] = useState(false); + + useEffect(() => { + if (!loaded) { + Tracer() + .catch(() => console.warn("failed to setup tracer")) + .finally(() => setLoaded(true)); + } + }, [loaded]); + + return { + loaded, + }; +}; diff --git a/src/react-native-app/ios/.gitignore b/src/react-native-app/ios/.gitignore new file mode 100644 index 0000000000..8beb344303 --- /dev/null +++ b/src/react-native-app/ios/.gitignore @@ -0,0 +1,30 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace +.xcode.env.local + +# Bundle artifacts +*.jsbundle + +# CocoaPods +/Pods/ diff --git a/src/react-native-app/ios/.xcode.env b/src/react-native-app/ios/.xcode.env new file mode 100644 index 0000000000..3d5782c715 --- /dev/null +++ b/src/react-native-app/ios/.xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/src/react-native-app/ios/Podfile b/src/react-native-app/ios/Podfile new file mode 100644 index 0000000000..14cd1f8b8c --- /dev/null +++ b/src/react-native-app/ios/Podfile @@ -0,0 +1,58 @@ +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") + +require 'json' +podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} + +ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] + +platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4' +install! 'cocoapods', + :deterministic_uuids => false + +prepare_react_native_project! + +target 'reactnativeapp' do + use_expo_modules! + config = use_native_modules! + + use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] + use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] + + use_react_native!( + :path => config[:reactNativePath], + :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/..", + :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', + ) + + post_install do |installer| + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + ) + + # This is necessary for Xcode 14, because it signs resource bundles by default + # when building for devices. + installer.target_installation_results.pod_target_installation_results + .each do |pod_name, target_installation_result| + target_installation_result.resource_bundle_targets.each do |resource_bundle_target| + resource_bundle_target.build_configurations.each do |config| + config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' + end + end + end + end + + post_integrate do |installer| + begin + expo_patch_react_imports!(installer) + rescue => e + Pod::UI.warn e + end + end +end diff --git a/src/react-native-app/ios/Podfile.lock b/src/react-native-app/ios/Podfile.lock new file mode 100644 index 0000000000..7e768c05ee --- /dev/null +++ b/src/react-native-app/ios/Podfile.lock @@ -0,0 +1,1609 @@ +PODS: + - boost (1.83.0) + - DoubleConversion (1.1.6) + - EXConstants (16.0.2): + - ExpoModulesCore + - Expo (51.0.39): + - ExpoModulesCore + - ExpoAsset (10.0.10): + - ExpoModulesCore + - ExpoFileSystem (17.0.1): + - ExpoModulesCore + - ExpoFont (12.0.10): + - ExpoModulesCore + - ExpoHead (3.5.24): + - ExpoModulesCore + - ExpoKeepAwake (13.0.2): + - ExpoModulesCore + - ExpoModulesCore (1.12.26): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ExpoSystemUI (3.0.7): + - ExpoModulesCore + - ExpoWebBrowser (13.0.3): + - ExpoModulesCore + - EXSplashScreen (0.27.7): + - DoubleConversion + - ExpoModulesCore + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - FBLazyVector (0.74.2) + - fmt (9.1.0) + - glog (0.3.5) + - hermes-engine (0.74.2): + - hermes-engine/Pre-built (= 0.74.2) + - hermes-engine/Pre-built (0.74.2) + - RCT-Folly (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Default (= 2024.01.01.00) + - RCT-Folly/Default (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Fabric (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCTDeprecation (0.74.2) + - RCTRequired (0.74.2) + - RCTTypeSafety (0.74.2): + - FBLazyVector (= 0.74.2) + - RCTRequired (= 0.74.2) + - React-Core (= 0.74.2) + - React (0.74.2): + - React-Core (= 0.74.2) + - React-Core/DevSupport (= 0.74.2) + - React-Core/RCTWebSocket (= 0.74.2) + - React-RCTActionSheet (= 0.74.2) + - React-RCTAnimation (= 0.74.2) + - React-RCTBlob (= 0.74.2) + - React-RCTImage (= 0.74.2) + - React-RCTLinking (= 0.74.2) + - React-RCTNetwork (= 0.74.2) + - React-RCTSettings (= 0.74.2) + - React-RCTText (= 0.74.2) + - React-RCTVibration (= 0.74.2) + - React-callinvoker (0.74.2) + - React-Codegen (0.74.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-Core (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.74.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/CoreModulesHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/Default (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/DevSupport (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.74.2) + - React-Core/RCTWebSocket (= 0.74.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTActionSheetHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTAnimationHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTBlobHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTImageHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTLinkingHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTNetworkHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTSettingsHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTTextHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTVibrationHeaders (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-Core/RCTWebSocket (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.74.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.0) + - Yoga + - React-CoreModules (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety (= 0.74.2) + - React-Codegen + - React-Core/CoreModulesHeaders (= 0.74.2) + - React-jsi (= 0.74.2) + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTImage (= 0.74.2) + - ReactCommon + - SocketRocket (= 0.7.0) + - React-cxxreact (0.74.2): + - boost (= 1.83.0) + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.2) + - React-debug (= 0.74.2) + - React-jsi (= 0.74.2) + - React-jsinspector + - React-logger (= 0.74.2) + - React-perflogger (= 0.74.2) + - React-runtimeexecutor (= 0.74.2) + - React-debug (0.74.2) + - React-Fabric (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.74.2) + - React-Fabric/attributedstring (= 0.74.2) + - React-Fabric/componentregistry (= 0.74.2) + - React-Fabric/componentregistrynative (= 0.74.2) + - React-Fabric/components (= 0.74.2) + - React-Fabric/core (= 0.74.2) + - React-Fabric/imagemanager (= 0.74.2) + - React-Fabric/leakchecker (= 0.74.2) + - React-Fabric/mounting (= 0.74.2) + - React-Fabric/scheduler (= 0.74.2) + - React-Fabric/telemetry (= 0.74.2) + - React-Fabric/templateprocessor (= 0.74.2) + - React-Fabric/textlayoutmanager (= 0.74.2) + - React-Fabric/uimanager (= 0.74.2) + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/inputaccessory (= 0.74.2) + - React-Fabric/components/legacyviewmanagerinterop (= 0.74.2) + - React-Fabric/components/modal (= 0.74.2) + - React-Fabric/components/rncore (= 0.74.2) + - React-Fabric/components/root (= 0.74.2) + - React-Fabric/components/safeareaview (= 0.74.2) + - React-Fabric/components/scrollview (= 0.74.2) + - React-Fabric/components/text (= 0.74.2) + - React-Fabric/components/textinput (= 0.74.2) + - React-Fabric/components/unimplementedview (= 0.74.2) + - React-Fabric/components/view (= 0.74.2) + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/inputaccessory (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/modal (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/rncore (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/safeareaview (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/scrollview (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/text (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/textinput (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/unimplementedview (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/textlayoutmanager (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricImage (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired (= 0.74.2) + - RCTTypeSafety (= 0.74.2) + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.74.2) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.74.2) + - React-graphics (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-Core/Default (= 0.74.2) + - React-utils + - React-hermes (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.74.2) + - React-jsi + - React-jsiexecutor (= 0.74.2) + - React-jsinspector + - React-perflogger (= 0.74.2) + - React-runtimeexecutor + - React-ImageManager (0.74.2): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.74.2): + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-debug + - React-jsi + - React-Mapbuffer + - React-jsi (0.74.2): + - boost (= 1.83.0) + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-jsiexecutor (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.74.2) + - React-jsi (= 0.74.2) + - React-jsinspector + - React-perflogger (= 0.74.2) + - React-jsinspector (0.74.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-featureflags + - React-jsi + - React-runtimeexecutor (= 0.74.2) + - React-jsitracing (0.74.2): + - React-jsi + - React-logger (0.74.2): + - glog + - React-Mapbuffer (0.74.2): + - glog + - React-debug + - react-native-get-random-values (1.11.0): + - React-Core + - react-native-safe-area-context (4.10.1): + - React-Core + - React-nativeconfig (0.74.2) + - React-NativeModulesApple (0.74.2): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.74.2) + - React-RCTActionSheet (0.74.2): + - React-Core/RCTActionSheetHeaders (= 0.74.2) + - React-RCTAnimation (0.74.2): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTAppDelegate (0.74.2): + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-CoreModules + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCommon + - React-RCTBlob (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-Codegen + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTFabric (0.74.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-nativeconfig + - React-RCTImage + - React-RCTText + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.74.2): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.74.2): + - React-Codegen + - React-Core/RCTLinkingHeaders (= 0.74.2) + - React-jsi (= 0.74.2) + - React-NativeModulesApple + - ReactCommon + - ReactCommon/turbomodule/core (= 0.74.2) + - React-RCTNetwork (0.74.2): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTSettings (0.74.2): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTText (0.74.2): + - React-Core/RCTTextHeaders (= 0.74.2) + - Yoga + - React-RCTVibration (0.74.2): + - RCT-Folly (= 2024.01.01.00) + - React-Codegen + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-rendererdebug (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - React-debug + - React-rncore (0.74.2) + - React-RuntimeApple (0.74.2): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-utils + - React-RuntimeCore (0.74.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.74.2): + - React-jsi (= 0.74.2) + - React-RuntimeHermes (0.74.2): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-rendererdebug + - React-runtimeexecutor + - React-utils + - React-utils (0.74.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-debug + - React-jsi (= 0.74.2) + - ReactCommon (0.74.2): + - ReactCommon/turbomodule (= 0.74.2) + - ReactCommon/turbomodule (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.2) + - React-cxxreact (= 0.74.2) + - React-jsi (= 0.74.2) + - React-logger (= 0.74.2) + - React-perflogger (= 0.74.2) + - ReactCommon/turbomodule/bridging (= 0.74.2) + - ReactCommon/turbomodule/core (= 0.74.2) + - ReactCommon/turbomodule/bridging (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.2) + - React-cxxreact (= 0.74.2) + - React-jsi (= 0.74.2) + - React-logger (= 0.74.2) + - React-perflogger (= 0.74.2) + - ReactCommon/turbomodule/core (0.74.2): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.74.2) + - React-cxxreact (= 0.74.2) + - React-debug (= 0.74.2) + - React-jsi (= 0.74.2) + - React-logger (= 0.74.2) + - React-perflogger (= 0.74.2) + - React-utils (= 0.74.2) + - RNCAsyncStorage (2.1.0): + - React-Core + - RNDeviceInfo (11.1.0): + - React-Core + - RNGestureHandler (2.16.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNReanimated (3.10.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNScreens (3.31.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - SocketRocket (0.7.0) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - Expo (from `../node_modules/expo`) + - ExpoAsset (from `../node_modules/expo-asset/ios`) + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoFont (from `../node_modules/expo-font/ios`) + - ExpoHead (from `../node_modules/expo-router/ios`) + - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) + - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`) + - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) + - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Codegen (from `build/generated/ios`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - react-native-get-random-values (from `../node_modules/react-native-get-random-values`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" + - RNDeviceInfo (from `../node_modules/react-native-device-info`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNReanimated (from `../node_modules/react-native-reanimated`) + - RNScreens (from `../node_modules/react-native-screens`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EXConstants: + :path: "../node_modules/expo-constants/ios" + Expo: + :path: "../node_modules/expo" + ExpoAsset: + :path: "../node_modules/expo-asset/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoFont: + :path: "../node_modules/expo-font/ios" + ExpoHead: + :path: "../node_modules/expo-router/ios" + ExpoKeepAwake: + :path: "../node_modules/expo-keep-awake/ios" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" + ExpoSystemUI: + :path: "../node_modules/expo-system-ui/ios" + ExpoWebBrowser: + :path: "../node_modules/expo-web-browser/ios" + EXSplashScreen: + :path: "../node_modules/expo-splash-screen/ios" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2024-06-03-RNv0.74.2-bb1e74fe1e95c2b5a2f4f9311152da052badc2bc + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Codegen: + :path: build/generated/ios + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + react-native-get-random-values: + :path: "../node_modules/react-native-get-random-values" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNCAsyncStorage: + :path: "../node_modules/@react-native-async-storage/async-storage" + RNDeviceInfo: + :path: "../node_modules/react-native-device-info" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNReanimated: + :path: "../node_modules/react-native-reanimated" + RNScreens: + :path: "../node_modules/react-native-screens" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: d3f49c53809116a5d38da093a8aa78bf551aed09 + DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 + EXConstants: 89d35611505a8ce02550e64e43cd05565da35f9a + Expo: ed0a748eb6be0efd2c3df7f6de3f3158a14464c9 + ExpoAsset: 286fee7ba711ce66bf20b315e68106b13b8629fc + ExpoFileSystem: 2988caaf68b7cb706e36d382829d99811d9d76a5 + ExpoFont: 38dddf823e32740c2a9f37c926a33aeca736b5c4 + ExpoHead: 1a1b30c6c1d125e9b8a199ca305c16a1dc041624 + ExpoKeepAwake: dd02e65d49f1cfd9194640028ae2857e536eb1c9 + ExpoModulesCore: 9ac73e2f60e0ea1d30137ca96cfc8c2aa34ef2b2 + ExpoSystemUI: 2072307375696c398a5d75633bdd5143fadc3d26 + ExpoWebBrowser: cf10afe886891ab495877dada977fe6c269614a4 + EXSplashScreen: a4ce3dd5d28d48e8b9132bcd9b58ee8e340db78c + FBLazyVector: 4bc164e5b5e6cfc288d2b5ff28643ea15fa1a589 + fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 + glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f + hermes-engine: 01d3e052018c2a13937aca1860fbedbccd4a41b7 + RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 + RCTDeprecation: b03c35057846b685b3ccadc9bfe43e349989cdb2 + RCTRequired: 194626909cfa8d39ca6663138c417bc6c431648c + RCTTypeSafety: 552aff5b8e8341660594db00e53ac889682bc120 + React: a57fe42044fe6ed3e828f8867ce070a6c5872754 + React-callinvoker: 6bedefb354a8848b534752417954caa3a5cf34f9 + React-Codegen: 49cfc291275676ba00401e4cbbb6931906d50623 + React-Core: 5378e701a95b000d5a0b7020149f428b854a6222 + React-CoreModules: 80cd03b1e5ad19de582bd076fb63114964e5a45e + React-cxxreact: d162761aef4ff8191d01fea602e2b981365f5f10 + React-debug: 164b8e302404d92d4bec39778a5e03bcb1b6eb08 + React-Fabric: a3d85fbd80e336d7137b77bcd6e713bb1ef5f9e3 + React-FabricImage: 60a42161a730e98b8391b71aa79a3dd01c91c117 + React-featureflags: d97a6393993052e951e16a3b81206e22110be8d2 + React-graphics: 98ac899ccd24a52b95607f6e936f0dee1df72fc6 + React-hermes: 7456eb2ac1cca407e743db848e39473e1e8cb67a + React-ImageManager: 5f8615ba4d5a191c7bb085a22063f12ad1ef77ee + React-jserrorhandler: be31e8fa6c5056976215f4363c018a09521eebdf + React-jsi: 673c0629d1347e4b47f3e8af50425b84dbe3bffb + React-jsiexecutor: a0ce7f28434a949235e5a849689cceae8bf03a8e + React-jsinspector: 37ce74bdcd2d604b05ad871a2bf500da50770f18 + React-jsitracing: 00f6151766dec0ab324e2854a9d4dfde0e1f30cc + React-logger: 70e002e04cc56ff5c12157537405d1644c050703 + React-Mapbuffer: 8d1f0fc6e7280a8ed6da70ece5f283ac5c8032cb + react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba + react-native-safe-area-context: 8c70551c8688cd584a53487aa1b9361e991a3b4a + React-nativeconfig: 9f223cd321823afdecf59ed00861ab2d69ee0fc1 + React-NativeModulesApple: 1cd770ed7dc463e55d02a05f7fc3be46076d393e + React-perflogger: 32ed45d9cee02cf6639acae34251590dccd30994 + React-RCTActionSheet: 19f967ddaea258182b56ef11437133b056ba2adf + React-RCTAnimation: 62269ef3c6723d51677b466247734c94a57058be + React-RCTAppDelegate: fff24d087c7cb05849a744b0c7288c71fde75180 + React-RCTBlob: f684ebda742dcc0869aeaf502b760f68dbc2eecf + React-RCTFabric: 908f220527719260d5ddcfb2fe0d8f52833fe71a + React-RCTImage: 71f8c1c9a4f13121211d7e179c5a0a1764a0c1dc + React-RCTLinking: f79e8f8a68ec7155d267922386885cd60ad1208b + React-RCTNetwork: d6c7b68b10b268c80cd72ef7cd710fdf71f69d83 + React-RCTSettings: 2e1d70025490790cc6ce0c766af8cb174390be43 + React-RCTText: a8d1d3716ad2946bfd96932c8a2bbebb07e569bf + React-RCTVibration: 01fe1cc2c7148e74f11ed8997a553399393c8fd6 + React-rendererdebug: 1d87a8cc3c81d95beea2f8caeefa0d4520971288 + React-rncore: edfff7a3f7f82ca1e0ba26978c6d84c7a8970dac + React-RuntimeApple: ea00d0be65f8dcf8a7f33a712dfda5098f8cd85c + React-RuntimeCore: 08ca132a26c286c6be4376a7db27994e5f97aebb + React-runtimeexecutor: 5961acc7a77b69f964e1645a5d6069e124ce6b37 + React-RuntimeHermes: c11cbc1cd10659aac0910de11f11dbc825a32785 + React-runtimescheduler: c5ba36755abc3c28a8cd327325b13599af586204 + React-utils: 08bb648cea0f37a0aa5df0c4f9ef50e5484ee0eb + ReactCommon: 4968ff446d467c4def1945125e59f82e3e986af3 + RNCAsyncStorage: c91d753ede6dc21862c4922cd13f98f7cfde578e + RNDeviceInfo: 900bd20e1fd3bfd894e7384cc4a83880c0341bd3 + RNGestureHandler: 326e35460fb6c8c64a435d5d739bea90d7ed4e49 + RNReanimated: def444e044c354f38bb0a5926a8583ba19d944c1 + RNScreens: a2d8a2555b4653d7a19706eb172f855657ac30d7 + SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d + Yoga: 2f71ecf38d934aecb366e686278102a51679c308 + +PODFILE CHECKSUM: 43d62c9a2cdb594df87b33661537b45c69daf63f + +COCOAPODS: 1.16.2 diff --git a/src/react-native-app/ios/Podfile.properties.json b/src/react-native-app/ios/Podfile.properties.json new file mode 100644 index 0000000000..de9f7b7524 --- /dev/null +++ b/src/react-native-app/ios/Podfile.properties.json @@ -0,0 +1,4 @@ +{ + "expo.jsEngine": "hermes", + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true" +} diff --git a/src/react-native-app/ios/reactnativeapp.xcodeproj/project.pbxproj b/src/react-native-app/ios/reactnativeapp.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..0613758f4e --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp.xcodeproj/project.pbxproj @@ -0,0 +1,543 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; + 5B906A66AC954B3C8799AF14 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B0478F52474B4C808FD8B5 /* noop-file.swift */; }; + 96905EF65AED1B983A6B3ABC /* libPods-reactnativeapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-reactnativeapp.a */; }; + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; + C2AA57E8CB91AA78F8ACFC80 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7CA499B7C37DC82E3E64F2AB /* PrivacyInfo.xcprivacy */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 13B07F961A680F5B00A75B9A /* reactnativeapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = reactnativeapp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = reactnativeapp/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = reactnativeapp/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = reactnativeapp/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = reactnativeapp/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = reactnativeapp/main.m; sourceTree = ""; }; + 23ED077BD19D4E86AEAE4B7F /* reactnativeapp-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "reactnativeapp-Bridging-Header.h"; path = "reactnativeapp/reactnativeapp-Bridging-Header.h"; sourceTree = ""; }; + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-reactnativeapp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-reactnativeapp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C2E3173556A471DD304B334 /* Pods-reactnativeapp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-reactnativeapp.debug.xcconfig"; path = "Target Support Files/Pods-reactnativeapp/Pods-reactnativeapp.debug.xcconfig"; sourceTree = ""; }; + 7A4D352CD337FB3A3BF06240 /* Pods-reactnativeapp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-reactnativeapp.release.xcconfig"; path = "Target Support Files/Pods-reactnativeapp/Pods-reactnativeapp.release.xcconfig"; sourceTree = ""; }; + 7CA499B7C37DC82E3E64F2AB /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = reactnativeapp/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 92B0478F52474B4C808FD8B5 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "reactnativeapp/noop-file.swift"; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = reactnativeapp/SplashScreen.storyboard; sourceTree = ""; }; + BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-reactnativeapp/ExpoModulesProvider.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96905EF65AED1B983A6B3ABC /* libPods-reactnativeapp.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* reactnativeapp */ = { + isa = PBXGroup; + children = ( + BB2F792B24A3F905000567C9 /* Supporting */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB71A68108700A75B9A /* main.m */, + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, + 92B0478F52474B4C808FD8B5 /* noop-file.swift */, + 23ED077BD19D4E86AEAE4B7F /* reactnativeapp-Bridging-Header.h */, + 7CA499B7C37DC82E3E64F2AB /* PrivacyInfo.xcprivacy */, + ); + name = reactnativeapp; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-reactnativeapp.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* reactnativeapp */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + D65327D7A22EEC0BE12398D9 /* Pods */, + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* reactnativeapp.app */, + ); + name = Products; + sourceTree = ""; + }; + 92DBD88DE9BF7D494EA9DA96 /* reactnativeapp */ = { + isa = PBXGroup; + children = ( + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, + ); + name = reactnativeapp; + sourceTree = ""; + }; + BB2F792B24A3F905000567C9 /* Supporting */ = { + isa = PBXGroup; + children = ( + BB2F792C24A3F905000567C9 /* Expo.plist */, + ); + name = Supporting; + path = reactnativeapp/Supporting; + sourceTree = ""; + }; + D65327D7A22EEC0BE12398D9 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C2E3173556A471DD304B334 /* Pods-reactnativeapp.debug.xcconfig */, + 7A4D352CD337FB3A3BF06240 /* Pods-reactnativeapp.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + 92DBD88DE9BF7D494EA9DA96 /* reactnativeapp */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* reactnativeapp */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "reactnativeapp" */; + buildPhases = ( + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, + C2277CA7080B937B969F4DDD /* [Expo] Configure project */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + 4C3206BEBB7C68040650018F /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = reactnativeapp; + productName = reactnativeapp; + productReference = 13B07F961A680F5B00A75B9A /* reactnativeapp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1130; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1250; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "reactnativeapp" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* reactnativeapp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, + C2AA57E8CB91AA78F8ACFC80 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; + }; + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-reactnativeapp-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 4C3206BEBB7C68040650018F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-reactnativeapp/Pods-reactnativeapp-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-reactnativeapp/Pods-reactnativeapp-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-reactnativeapp/Pods-reactnativeapp-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-reactnativeapp/Pods-reactnativeapp-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + C2277CA7080B937B969F4DDD /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-reactnativeapp/expo-configure-project.sh\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, + 5B906A66AC954B3C8799AF14 /* noop-file.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-reactnativeapp.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = reactnativeapp/reactnativeapp.entitlements; + CURRENT_PROJECT_VERSION = 1; + ENABLE_BITCODE = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = reactnativeapp/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = io.opentelemetry.reactnativeapp; + PRODUCT_NAME = reactnativeapp; + SWIFT_OBJC_BRIDGING_HEADER = "reactnativeapp/reactnativeapp-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-reactnativeapp.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = reactnativeapp/reactnativeapp.entitlements; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = reactnativeapp/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; + PRODUCT_BUNDLE_IDENTIFIER = io.opentelemetry.reactnativeapp; + PRODUCT_NAME = reactnativeapp; + SWIFT_OBJC_BRIDGING_HEADER = "reactnativeapp/reactnativeapp-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CXX = ""; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD = ""; + LDPLUSPLUS = ""; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CC = ""; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + CXX = ""; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD = ""; + LDPLUSPLUS = ""; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "reactnativeapp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "reactnativeapp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/src/react-native-app/ios/reactnativeapp.xcodeproj/xcshareddata/xcschemes/reactnativeapp.xcscheme b/src/react-native-app/ios/reactnativeapp.xcodeproj/xcshareddata/xcschemes/reactnativeapp.xcscheme new file mode 100644 index 0000000000..af30646acb --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp.xcodeproj/xcshareddata/xcschemes/reactnativeapp.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/react-native-app/ios/reactnativeapp.xcworkspace/contents.xcworkspacedata b/src/react-native-app/ios/reactnativeapp.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..7a4af092cd --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/react-native-app/ios/reactnativeapp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/src/react-native-app/ios/reactnativeapp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/src/react-native-app/ios/reactnativeapp/AppDelegate.h b/src/react-native-app/ios/reactnativeapp/AppDelegate.h new file mode 100644 index 0000000000..99b0e8968b --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/AppDelegate.h @@ -0,0 +1,9 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +#import +#import +#import + +@interface AppDelegate : EXAppDelegateWrapper + +@end diff --git a/src/react-native-app/ios/reactnativeapp/AppDelegate.mm b/src/react-native-app/ios/reactnativeapp/AppDelegate.mm new file mode 100644 index 0000000000..b27f83286d --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/AppDelegate.mm @@ -0,0 +1,62 @@ +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.moduleName = @"main"; + + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; + + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ + return [self bundleURL]; +} + +- (NSURL *)bundleURL +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +// Linking API +- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { + return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]; +} + +// Universal Links +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { + BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; + return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result; +} + +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken +{ + return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} + +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries +- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error +{ + return [super application:application didFailToRegisterForRemoteNotificationsWithError:error]; +} + +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler +{ + return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; +} + +@end diff --git a/src/react-native-app/ios/reactnativeapp/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/src/react-native-app/ios/reactnativeapp/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..104d8efab696e3f964d28536dacb9fb3b8139d98 GIT binary patch literal 191330 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

cf2$F9tXn37Z=E+}>Hf0bE=E4bt15^{r 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ⅆd;e$EQ4sMjtN`F_)qYrWJ|#c4Bot&y zL;6L|(V5?HYQ7YG9emU0)R1*wMtH;M);dotXTXqshn7LI)TG?$+TM03-fLO!KWBPr zUiy8cj0kn$4@};q^5uwD%TUssmtFe!s)7Y|v~C<4F5I(I{gEZn@uK6yxjU)nu7wn; z66AjV@6sgCWpWAuxKCrxOn*;>j@kKJvPf2uR+4UxLOfnr;~>AVaC@J1jES0Y)wne- zq$=T0SLwe#<1KFR65!L;rn|dT*X20i<}q-Ko$9icY_{!vWO&K_ed_2kLmy3hOSN?7 zf|15GyPMbxX&rwK*pJdiE;9Ut2i|9KAu?C{n*o=BsJm3udw2B#EBavaG!BF<2Yzp_ zXXq#*$5gVRT1tY@ZS#L!)mz}(KEx7*dW_lG9!XVvYi0X!I_%RiZjhVfdn3Sa@%>GApj=q^X2GKlaiN2yYa2nAPN)5t((5I(gH)qMn z=M)Z9d9Ibv6@+=kc`WE^I&lgm67Yi)9vm<`y}wqJCgf6r_lwQVJ)x!;n4K1o&GsLk zfY$j|75y3hYiF=L51c{LY#Co@w|{in4N2;^-C=1H#|@uuXwPz!UDp-Yh?AVwvIu>0 zDiC?AMqIn#sda9bfqmvdLi=V%d_X!FkN6{Clj}asX`9|n=+-{!F>Xh6)2ILM`C##} z(hJ&<-o@qt_n?-2%VT0bfk1fU9-2OBpFLix>ym$ev%0qKh88XDcTGF}mqo_MBHw}E zZ@yZ;{O9Ch??TH@Ro>}`>fQx?0^PR^Qv+-!=J7|3xRX`bRV=@=d?aYvzS#FkgU>ql zUD6=|g&)43f(iK>hKKK@(_&5m{bzeamb!##xvhp2LCV`<^txVVv=vE(CWtcV^W}+x z`cO67ynxjzceqV_+Xhm$ITUMyIr)n`8amR z%PE>wp=<`pFx%@HSU$4tU_Z@etNKjHUw^0nd)}oxZ|?Pw4eos3Es~wAnMFU8HTC{$ z{Y#%OWR~Z39powFimO7%AecQJqSM}iUBGL2Yx&*LdSC1zamYq*&*^{B#&_1QeOw-Z zfZi!mgmlmjrnNE-dVqh^U2x|^r)avSy(-sUwHG>jpYa=5mG{*v8URj~Is1D8V4U%f z#Np{z&ZB6I30VKo@+<8O&+(3Fo$g+@6dWq!!IRVa2PGm*a>nMbWHtn9a?UGB`{l6T z_l>YTf5DY2u1i}lnXfa;PWRP^dWPlz<)nLCR&$ZW#N4=B7SqP4m7v-s*$GwFAKdRf z=gkKtDRFFH+cZBha*!>`ym$BjzScGm`h)pm`K?<*scKqtQTih>>RvRrYg0H^{E@l! ztE)rBCMMS>fuUah$F1etRafOi$QF>?U-U;<8a=qWg?()V2liBwnmJ6G%oKt!odLrl zP~V$lJw0Z~kNPV0R2N?__y-xqrSGXpS|TRaN@0`Qg(1!+SdI0L1|x zN?1n9YJisc2_Y+MYjrqp0?8g>v#y1lvW3}qk7^h^E7e(2;k`L|L54z`$wm4!$>d*I ziwNIt>ZP# z@_PwPp8xHA^0#r$K7hMdCivto3ki?@v1=ihbMxmibGtmY_m@UA)<($4Gg~V9zBtQe zo$Uuxfuxz?DrKGsec0ERN7_9m3wiKpdl#B4Zj}}o zH$DVeiu01*eS>iHl*YLVuo1>P9XXbK(9e+pTJ4Euvt8Gc{PKILcqibUYFZ}-k$hLG>?0yy3c+!YRK6UvBf&zNtL{MlRiIJN5|!zRiHplo3FEr>d-d1 z>i#c4jw`tOh&*?}Aob3m_x_S~W{o+!Mhf*!^O^hbJ$gsN0J?|C-@*VnRrmYsH--)x zA5QtaOD{NvkAs42@n+|-q9y(2&&*B@?iN11c6SdTLNA%|(>Aear6E3jnp2m$rbt=^ z>|1Ht*o2&d6dSq393EmeR%|$Z$% zzE1b>lxF0s=|Fx8myc-pRx0bu=v%zuH|Jk4e(Ih4uNOdu_4*FcN%U#@AHgKL^*DA?W9BL0hAZR7K|URyAtxh zFq$SL1$F*-%IwKZ+IE~0dNALvQ}RIw#mlTTK~@dNLY)VY<>bu6nCwP`m$kCe4tt5y zKaLN+cz#7R0zT|FIQ+4K^IfI_G>RisQN`rC|+G2%u3q0Sxb8_prY zVZ+u}VvE!I91~_H>zjo0{0C$WeI$|WK!)Z2?S;5P;*$_(@%e?@3`lIP$_T_;`nvf` z>9X3)OBAI|XWA|+8tpcDZ(l>24RN26CYxd0lGU8waBzHfT4Uhml}+U(V@F?aZ|V$= zhtK;h9_NGs!$7z8dO4_<;w8-e=3*s6D9B&$m~`J}kjc<{y|lC-w#(t|AD?cvrL`9K zyb0v*Dr|x`JMg8DwC3C>X`bGl;-AtuTz}Db&&c$7OVis5JVh6#wzygr0BGy44d4}{ zHA=!~aM`CTPW`5h9<(=){IJtzp$J7 z-f5|+%ba=X;P3io6d>^Tu?Hp}sM{qBf_7{4dh~Y!g9}@I@=AX<{UAYnNuR70@(y$q zQY0r;de$4c2sO@|F!vO>#;VESy&t|VA;e-i|DE39wO5{r5x(rz8`JtGX*Q9S~YfVjDmxAX>Bx^)|ZJk z1tB?VTD-uTbir`U0{YJGo~q#WbN2ok$8V_AR9ltC_{8eecd56c4E;2Hl0BcOt5ADX z+u7nD+Yri}5BAHqj=Cvv(|$x8p@SMa-DFd2`{D2+fDQoIk^aRQ6PZd}2eyj!MiBjk zU9y4f4}om#8aRHn;5ir9h}GliP0fXqV!5-y%_C|;s_=Hww|Z8BXvUCo}3&YR|TJhdf=U; zShG|3Djj3@+eS_;C0k^B?asV+RBpE3l}u;qmY<~bqF4qCQfsY(WpDe&al_8t zVf%u8OY(iYDCZFqS~$LwhLJ~N_LYsn=2!M?Lmk>$TeqB#$Lp+BpE^q-+3z$eRePMQlPs1YeULFa0DbogrW5)&z2>RB~Ld7uBEUrq8{g=D%f1) zFSRkWnz4AaKlnJbtx7V$YjtKcX3|$Yj@Yf`3b_ypIGLUcW&?z%4VO+Tey{G9nTCythVAOx_R8zT<&6WQ!#G3lJuS(Yv~uWxsh(N& zI|-vR?&2Sr2T>(K)_lO_I{zB6G?|%D9$(;Q4&i`sJitD4IKGvkF>iD^Y?h6W ztQhq*RTcsu5!y7_Ksrh-sA@obAwntQtTIQ=e|7oW0cB_LkHPht9KmFpQNf6e)?-%o z8CAn;DV+DfjUNgu)ErWu96Sm9tpcIDtMSQ#&qT`$r+}t4cd$oGI+NJCZ+gLb* zjTE5mXH)O2fa4S|COAWI*) znuVy^L=r8UlYf^8STW#4xnA_qfflfz9U1&i4?`%PSpbML-$;jC#hKy-~myHC-zdB@7Z-%LDV^z5zI#n1xRQa}s0@xHJ^L*p;0@~VV zX31+pbiKiGc)kSrX7{n&_?>#-Y-{adedz8gwcPosmJjt6JVn?g03Zla0#|Au93XCn z$UZ6OK`!q!ayP>greeB$BXVch-UkI%mDES*9?M!nHGFl4xvCUZp@q1>sQZWvz4$9S zW{1?;d4lJ%Z%Am_2|i1>@OJek?&DH9i-0a~{r0We5N>3zy$?JjXE|pV5XuE#2kit4m)A$3LQ_H4&Uh2cL}HdWqBkgxYm+ z(<1gluEr;-dx+nTLvG??ms=wO_m1AMrKz(>N<(}04OWFi+y!U_V%o@@S^C`<%_J^c zOMN}wV%WM~>00Nq@4?!=5_+PQ1ZS*jIU)Gp2{9`&PR9_0POS zXM#djS8?py&JP*uYY`cX?bpfmQnCqgtu!&aNn2XIP4A|+c<=)y^@PyDBlwYBPFgb3 z7^>P8)3%173EUDmCcn9?$s*xIeP4HG)(XxlBwJx_B-hiUS7#U zER9^^6uxcOSS6iYzwO#hJu?aGevCdn)m3y(*!i>`^eG?K(NthkA?9yFkiK_t>13Od zXs~#`RNa`P(r=Gx2Ak$3Yx4%{;W~!+CDung_IuQ`$wQ~6)>cgx4-RJfc4L63=HmrH z;>mo>mUKS76#lQl?w?ST0>1YX+SqGhlr_CcEbH0SVPEhmJ&vevi$+%hKU z-R^hK7 zsxAL8Cd;w0r{_>^*PXsvga>g2CuvagV?80k0xSa)0%vRi&a1@T zf=-D#>RQ7r47I2X$IPLLFQFCfKU0(%b#8}Y>}gUwx%3n~gzY^ND$vzJ_G8c5$`Szi zoQpaf&M;1%X5%Y9_vT2NLymH2j035*6ET*I5$pqd=yy-3IRvG5PTOe=QTJ`atnr4N z*=g(ODX~f)*DZGP`Xrkr;!mk(TA{~B?f#GvRTL!Pt4b1vRj^QCE%e1lpyqc zW07YdrLfIy_l@!5VUUqIVq@M*hn-B>;vx{yWTfg0?(H4%f~1y%n%cz2BvflE<8HMy z*bN*VB?H)hpfbac#31t*TQra`uk%twE~T(5LW@NU;;lr6l-=EK7#SD zYD+aclJe!4_Vkv(2PzpvrBlPuDV(^6Jd+qB)R!uK@~?M`qE!65dm-Kq8y z@E$sZ;Y2RfT>y1{qWxai#%ic%{8Tr)EwyLSj%RNVqi4JSO!Y>*;ehuT0%O^q?`kwh zQeiEpzGUv?_#|$R2FTCx$?yh-MN@f~! z#IC@eBu7lrXE{43c8ps4p2m@urss(lOC1tV|1|?&D>W`eDjUr*YUR8oV&eu5%hpBv za)QJ+#Iu9VFW5N~W%)WbOR+0RAitFpy7(Tz9BE-mrO6;rx#w zLUYs(M56ai*FoH$mG*%7i@4%zC`}K%U_kGx{10 za_@(^*7zYaa!Sg=&mdnzb?}1K+0^&A6}~%0MrN#k;(w@HZLjK+j%4%6YMYpOm9y;} z`vg@beY!c5m8JEhq4soF(0m(M+pHUkf4cA{BBjy-@UJk=juI$S2p7QMjqwrSY?EX) ziu`(G{}f?AB>rgQ(=jaB1mx4n;gZA>SonKIJ1GBs+z%^DUNK&q8!8CR9kGH@zFPgO zf=o9qg1u`Mo@X82KfuOczevu%1UC7i;)(nkpML?F11J2cUBN0 zk=$A@UmDvC54zWjGLOgk^>9sReKxq}LVQuPYub9Uy;H`rj_R}n)0fIR%0%OK$0S27nqTOWM-?{L z^iuhDoaG|)DGDlJva|>*1eBRlX@?ZyX;hm#*15k9nFC@uzXpV&3OOaYx+TjI;&3q4 zf;r{Y9Qa0BY354e$4PFsdNZkB73$|ps5M*;+bp^Ic~M6ng_x{eVTo3Q z$_z!I63^ET%cMh2$A4PZ{SI+&`z~FS9zNGktMcjz_AehI*Na1?rSWT+!8KU19n2ttCxh%5?$JgR zdC2I6a_hQK%cB-+XLocZ)PsC^f^Sf=C zSMGj3U*V>>e@K#eFlu5i;NS>$ZtZeSf!t1UCwBPip5Xo7MZQmkBm8s*pN*vO*|68< z;6L?G53T!+WPNN3`sID<4;wBn?BW@u)^go;Vk68ESYv$Ir;Lef5sPhX_VbZ|ug9CM zIe)aa`D5JkxT4_wb-Vqe@fvk=8UGq&=8;75k1zG6KYyOqB0a(I(A-r`|6}3l^E_x@=A3y_lz}il61-QVzblN=YRfuRn;h& zuAzA9G&14dzcv4+xxSxFXD@{E3`ESdKFC$IlKbnW`|&v9m^rDueqif#pF7Jt{cJ2a zUBmOqjmgJPPEIr*#sEihiGGb`xc=22)9YoZD#OIBHbGYTsEP*PZ6RT#V!044y|2!( zp&0dtPc*0rYXK%iiaWsoy32gRZtAe!p@o0v&5y7(up07PaATI~tS$@rhaw4moZhuHN=rOth69-f%#b*JA(0_Y>{;9(ANdFuyY z@gKpuvQ5T$r4at-3Gj4y`nUt}L?IP;Z-Jd|9((m-mFBfC8h}|gTBv)JcQ81oBK$1I znTZdJi^7-_X=n}N;S1Rbn9LWhynPDGQ;3|B9sKUuVHovBqXk-pg4x{EM5TP&sq zZU*6Dz^PNrH0w0QgEK%FG=iPH)bUqV#C_nFOx;pzpo|HB#8wBtmg=gBMm1Yp6BAz` zdq95ER0+mcb+@nW*q!%D!l$SbC(hv;YNb_EQObGmghCUD!SaOde3ju!f{!J8j)F33DDP9AEpAIfvy z%d_7c0pFBgBJ<*;Zp7P2JEsSY*4fvIb=w`|T(Zyeb7n$Ykx6k^h!lT7JU}Q9gp8QY zG`8+4zn?BXK2|#IE-lbacmHU6c5;}Xv9A#7SjAtz664`GIK~>IFfCNhDqr0f`CFqX zu-gj?_Hj6%hd?l#^Pt1(Yj_8rQ^?ppw&NF5ZekE7VI$>&z})e9)~;{R>>4XDz@4vi zxv?CJA!1P0d>e0EygxDl=72~2mjNf{XFw9)!Is%rvqbQ!K@JcX zdV)wf6Ex4-0_Gey+ZF%l_mXlFc;CczFHoa8qkA(sVwO1?cMv?jrpA`^ZE_=9rd?n9 zQgwP7JpJw3vI`*2P=e0Xnf9cq`~nllmDyg3PgGxVCkbl-Zb0bCV>8^cfl-Q|EUTL|R)|Mz5PK4`)fKl+k49hB)nc+{ zCT;^;JYA2MbIu1_4d8@sC<$G6J{+1ZIsf-kP{1k&lPAQJ!TC|t$?~_A{Wr@$VLX*Q ztHZ+V0ke^xri-dr$DL4mvs-6PVmNF8Rh!YYgo5P@a2>>3nmm)O^tRE4UP1f3Bf1^aTzTd$48I(8Qq5y}DiSV1UxN1QL0$mlDX*{%_=rtoQ?wTGnV4&? z*+t}w+N+ANmfbF6TfduOR~c6)Zynfp5Q|**pu3m<%*sR*w_H&FVn~{|u-P_1;<-yB zx+rF1&Zw;9Efpd@d;xJ+O%JS5p?D2$3Vg`yfzgr$Riu}NuFHkW?wt)?45}ZPk^ug+ z`9Q(|>jlPBVm#FpL=QHcbQ)zO$eOnCW}UzaMxN=J(KN01X`_ZS$|i>qxYie;JCDYSXjRWC04S`l zA^;E~4a|P~M3Qkj_2IC!XjY3Kxh3#q)B0c>ws^Eu&rqig2M|Y)MW)W$ggukC7fY<5YN?vIYqFPprZCD3MoGk>R6~?7646nVEE>oF122I;6x29<8HxUClo(?t4#0VYK)Jc+-kG z<8}EYja=bsI%&6=$NWkWY-g8EUg;QrcD&J@@4_o(%wNFD zIk7x7IlOO^tr;;25`W$ko4H^M%a}|)s8gQuiDM*g;_w^xOyk4|3JkDrHkzl>~#&QyfAdcXPRs1jBQry3KC$T_)aUeRuF=VL=QK%17f zdE;v(pRG!-`a!i3v`j=fB^KY_`c}!W!62@LPpY7x(7Ehmlc}Paah-E|on+REA~j^w zhIje2dSq1|S1IP(8SA|&iMI62`>|5OrdWO`i3Zh6p&Cj3dn=>nvuzKT1!wXKfPkHd zXVm1_631h0lJsco(3zH&4|0$KjAHi!NrIs$I{)+CD3z`KR+C~A%Mjd}o4c#z$XSd{ zqXaZ@64~*^SDdY`*BS)M3ap_WGHmbCQ|k6AW65%`SCCZ#d!#HOR4F`tcVixtEIB6? z;v_KWw5_opUEXhA$MAozy(=;*S3x2kQlH$QzcdT$2|tP5=NikQ3C@p{7nIsY#b5u0 zSUvYRn!z(~9BQ>m?bO~}fLOOya*Eogs+PccFno+15d0M*J>)xoeg*4z*u%-p_c|#N zvF^yVZ_^>yX-aC~HHj>g&eLP6&F#_r&^;S`<$G7=nU+hnHdL?xz34vb1m=`mHx z>gm=dlIWsR=jg6>dByFSWIBz~c(9DZTYE5FQbArUm$Q1I4yGV^)N^7>_<@^Hx|?^5 z_dnliA6}x%TR_~t#Pp2R@%wws(zlehUO$n3GXtI=gEOl3TH6@cCv5oTucQTm1CM{? z1X#DsW*6M6(nEEAR;D0M5L&fQxVIPP5#@MVE>J++eLA5Mc!q<9tr!o2w=hASQpCuw zt5>!kF}82KJk^@bgYj3LsE<8d)G>DXkTJg9zqa|)$Jfs>6g&6k*vEWx+o@%0LfLDL z^52kau3m)(+Z#V)eqW-ZonOmEC7A>AFj$mcEJS3i+?lrD}_UHjPV znzFzuzpFEw;!{;t3KWg;vtlfd^y#)1v6&>#SAYxaWBU2ijCGNUV09Ti8E{Lq9(5_E z(9{XI)1-MtkJer1>TXPuZDU>e(}TWcTulF7mB8bMWX2N#gA46a_vpq@Lw@^`@o4d2 zAIb4~;hlO+i7bXcSv{eYQ$$6DGcC%#41H=~#eqn16BNj8jo=4au3!dQ@r@C^y){}Y z5p^nLWvOu%(C9~Jdcom#0wD`xA5(s~=|yKo7I~^wy=oTy&{U+(?f-ky=`5pOoJo#A zCY#x6^(o@>)IX*G%%)=>W?vvDV8VVM8u&*-4@%d*yGW5wGRvLxE>2zN4(<|NnxXh>g~ z55^KX*2c`mOtIA@Zv!Uit~WI2=Luwy)rwGSs&8BJzBIB_QI%WLeyJc{{d>ausOCr} zF%!6iY5#8k;Cg`y_?g~@40wf3sC?V5w%wgKWNCYqPs&va+svKR-EjM-*^8g~wvrC} zqV)mkeQ`>#l~+?s99n^$PugT1b;o9#xQH``3rceFXea7ta)7zX$ZLPn)1k_7;V-x1 z_ah$%`?!T1;JuFU>&X4S#YKz711IL3J6g@36xiX###{=@jyg)+Ly8&0n#1j}Q=-k> z)m(J+Da;Wj2J-2~Exhv@BMA=WrMI-qZE9nma%MQ>^TonNZPQ2iW0ZAuL`=l)wyZrt z^_!V0qL})Yt)`#c9i_h}uq{|m+ak2_NC0;bTMTNu^N9531s>1f44M@k{VJLw~sD@(+9f%zyCIgR1DXI1AqG6Yhyk$^Ir|*oJ$>mlP zbL8Wld|A4#;hoFpNt+hYRnwF+y3k4ZtW?{T7TMeU6YrkUW1WcYUny~M_9l$}^sA~( z8URk+&Y7M9W=*4l7t2_?!|wwBEwqKXDu#cKi-ehw>4uJv>Y7tJXR_}ogal8mqKIRt zU+Z4K#Eo?0H*L2H96KeuSME>xsMbB?W8Hq@5mnJtgW)jP&x|gnQ4z2Oi8YUEmaiwQ zb8?OMcGu}9Xs9*avt)$}GY)EkrD)Y`je4s~Y;)semK(#sC{a$H1t`->`+|hG(cqz<`;EZv6-BykpLz%~! z>xl?K2EC)&(o}_M)ey30Du=Ni!BI^!NNBqwZPW&+ktyCrnXGvm0>c~b=4zQq#sg}x zrAqwjg=5xSHV-wd2E|LoC6h+hK0yN2nyw%Vqx)4y?6(MImF`jpKWeCK>{s51afyrb z9B$Rm#!l8tY|K1PA_TAFX14Ja$U?YqGBsdlx+P?Rmt6T{k_ll5I5%GM(zi*3ZdeMD z$xTCn=w_S-|F)=6vPR(E`TG48L5Y?X_e0_Ilvl}O>AApkixT^tFUxra9Yfx2o8=>2 zaAAiR6TKP}4jDBt>26VH=>@ z=+O<`4S46*j-zl#jeiW@YeC~NZBf^2E+AtSVWTzYv$ ziFoTKz2RjC!PZ`dEt&5FprzktAJ4u~pM^Z$hzJ;>e&QWv(^HB|z;r+EC_oGKl#0iW z6gfsDT6Sq{ObQ&2_E?Heq&d&}2Nqf3w!Gz90v$K(hV9jVTBSX71&gqtW8=HxLfReV z{*CGYv$wHr7f#od)9nV#C6tuprObNwcTJt7OeUNfN06{Wwj7P+O>28TUdP4h1}wK^ zak*3VwDt50m>I*kPtwDy(_V2=fgkdIcF7taufYRfIEWUGnyP9P2Jms!Bs$c-Pd4^u zhBqOan%_sJ!K2=mMz1UAwayrPnKAs5Zc^ei7&HfZK8C&!%wSf&2UWzoZVsb1glTdS zw*Mf`zcu~%#)onnZ+n!FxXgVr&bx}xJUTnI_~ zKFO3!8)aL0VXSBMjCzV~^{)a?`mE@#w35sww8}$|5$a{X!QeAXYH&x#DyGHHx}tmF3>?LDj=gd zh1B>G^xE}C^g1jdm9B6&okd>Jy^t#N$`t!B?~1Ro6-+lz0{mwczC(IBENe~fedj1p zRrcOxxyLo-7vGH zfKylF)nQKn|AtOGN!?*kR!-so>BZWk$X7hZ&3Q5On5?YyYJV1wy3@2&h2OobXf;eJ zlQ+GrER$LKn#Vok7)RMkVd#;u?#EO?8)Nw%-5MOE9$A>RRX073{rTg(qab;_LG|`B zcPzM;9-}XBeAQXLAU?7HZUjjvDT3rvXwW5?eit19PYHyFzJRpqUzyvcqidVE^SOf2 z#eqxD6l@BH`!xjWLD;5R-)_*{Ykf<-Frnm^)5j>kYg5uE;X0L-laqW3E9QwQ{Lu4T zwCqKi7e~CYm=;*vlU~wJWs*^YY0!sJy1Ywqw~JR{GTMZ(a@#_Bp?QAhSVyZ!Usmp5 zLis~X`@U>EX=nA)F#vGhS`q3;c8Mp1GeOd%JYj&C&zkZY8;XarZ3J0(I9gZNXV{c- zlXg+StrBE>pjUB>a6qs)mQlo&3ElQk%@zH~x-uc+(1-kXGbS{-@qVCemS5(blJFTTW7U=p$}7%D+~j z!EF%nGT0H!`A%5?GUQ~e3v{t55vRg%+CAWMGQ7#y;U#o{*aC1{3V@7jRkF$^&sEA5 zTJ%*|a>w(w5_n2y>avuEl)Hnk|kn aCXgmXtRG>GItT>9l9QEE2Z0d19)F&q0Pl>T zG2{Th(41xU+(009+Q%ORc!8J)2!uRrqp1tiRZ@gNogCQBES$_O+2Ib(z-SOiSPbrL z2DP(+c=8Q9Mm_{P}x|B(CF|gaVj}WTE4N7^>($?@K)A@dfPz-Eoj6Ct^!QRmg0vDnAJ1+!y{rENq4b|TvFgp<%iN^)0bd^-8B%NF>sRY@4 zE-HROc5{9x9}g62CCEy}#mU9P!O717=3@hMLAV7WoIF(j`bPsS=xSjFQI~rCujPQh zL}=c?V9pQ@4o^={c2910Cs%6@u%MtI2PYQ?7Z)2ag3Zm#5oQKwb9AHqj~S#a-Jq^E z&M+G%N2b7B!TI0QI=cN!Q-IDm;AYMoV0O;OUHu(s0sZ$lXLnco zzl&QyIV|lh9V{JTZopXZzsEYiae_Iyy>a^AO#SbV|Ca>-?J6n#dyW5A76*raFX0B0 z_5il=FNOTKqun&UoGm%jE!~{lU7?oJ9)Os%kGpY(NV-~@!JJ$*ot*6d!&a*QAu<&g zA3K=prIH!c#_@3zO#kT-ODQv$r3lTV-2jWRfx((!9tbxNgqNFz6AaC+HdKGT0%8Vz^mY*% z=%bk}EolDrw#|Q|kN?ri|9al@jU_PY|H1hGtnTJy1@km>wUn?1boW1SFOL76_-z(F|UcRqesADORRZwWGDyUTm1W}92K6SbHlF5BQiGWUD=i_0$c5&yszu`Bv zJK!a61LxZKjk%H@g8S+zb?7CL91QgM0ykHL*(>z%J^x5~3gGWok(9ZKGLN4uM-;8% z{T)pG|L+i4MhNI}C0U=ZnJio37s~OP1Ty)`BN1HtoW)$+;4oyc-bjcWTDrnpDv2<3 zIag;bcV}5Xtydu(Lw4Sm3%Mp)?HG7GZ_I1bc%?}0Wn}sGj#m%qrK>ymq$@Y5T>4&osBrd29BC9Nn zB7g>g7Q_lX|BuKvAHB?aod@!}EgNCfn*y2_ruNA~;RS!4?X3onZ-xLdWNuV3alpDN zx@``n9;&JjmjF!hcBN#4(UW&`Z3FZh)IaMLJJuy6W1QqE)d#j=NO-h+(X{|W8!;iz zO!lV(km>Ub#vx*Ndrpv&0tGJ&_?RwGF0q4z(6eEln4*C)b`FOb{>u6D9h<>F`$E*b zyIn;%!$=Z)!l?}VDBev>S#*~C*9+c)lCI({6r&U}>9^J*B+`g|(8g6x@NAZl0S|d5 z@Eb!TTr#li%)zqqCtcTJ)k_Ih^ki zsUmyp_}4uCW!^5XpWHa)GjYO?ax34i_h9-VSiIq-_{S{%U;NFw`!L^n27{U5#_?{a zwqk0TynjT#Fl#Lw##I7JPA{6rlqMo9E&*F0j2lr?o`yQN-|H19tmb7(f#uJ~cX zrD531UWSE*f4%sU_9QpHMxn(n*9{j;SEM!_EBOc|K?IDf<;RbbK z8HPNZHRJN^-xMI33S5iL4L@ulID@u_`-&KERS-;(O$E=zD#y$o96ED;k=HBGq&%rK zX5^Jk{G+NqkE^ZafVL7C5;V4D@e#_o{o_f>X&>V$$Aa%x!6)YZ2XdNx%d;4WF+127 zF*OhkPL{|(pWrf3O&o!{Txe@+n;Q}w3<0JJ0*^<5$MM8z0x$9JorIx^Nq!kss)pl% zPW}Te3p+UNOR5IG<*W*kPq~Yha!~AKzcsP{$}i_3aqnDtO;?`5Nn^>f(a>U5xfUKC zPFP$bzrYz~z{9!;r${;yd6Nf41f@4WuGGhX%!zyzX8}tn`7(KERy^*g)8nH##Hhn7zK&)8UJ zs^Vw=M7lF*>>0`sjyNTVoERz^;Pd7nh|Bk4#@~KUD-^%EeCv#B*JEP8>wK3atZ!f^ zq@rEDCDltk+RgY06%qjXw^SRx&2x?mt z=Cg;-S+Dj$TwHxTKeY>2oqyk|m?)BsRZM-qa7sTR0r`OPT?RZ$OX>=9a?Cv8aCiYj zPUK*T$@^Io^J5awaBd}T`H3ZvHFk{1LxIo|W#!=DcnJo(6w%4$5kuP%FcF3#!0Q(= zB_lW=p{+PulRs;SW5KXJ;-DoYe6YDH&GmV7SVv&H*I2FFxCvW4w}Y>>{hVIpw6{T8 z`5ah~jGJRKMlNs0_*}VzwE4&iX|hXjVL)&}TSw;;2_Bx>*!^%MM~VL1ktr&-JX~y@U>Dq9qF(G81vbZ5@D2jxY(5=@?Jq;JWGp}xFI^@Gr~ z5da}$J2OCAEdOZBm{~+*Zm3kJ950bh$uu?&l`|9kxhH3=si<|gW#H8O&!1_|Y)@7Q zUG?qLq|TDXX`cXzkSYJ(39AJmiUa?Y=wo?ql=G-|j09!Td)`u|)^&1Zz>jfeJc+8e zyqX*{Xk7Z~@4&9k>NgLq`YnRxsNY_+plE6FYienIjfsjX9y_J!$dg}C!NiIhDL2KW zeH1VbFysB|n_^PhzGEH`K0>TnEON}iTIs!RMqG{9f`9LhNS)MDT%mINMKfiKb<8N0 z0_MqrD5V*7xW>F)1+(m&Mkt#QdWEGmwe9v7HseZ@a$Q5uEzs$~T4pz;;088m2J}T; z%iUdCy0fmfwiZ%j82g6Zugqd|n(>M#FoPX}apaoLfu5S;8CKd3*ih>2Pqz*E1hM-| zT)mHl++Cj$lY!91%jh!^KKw1eE2asEk1yU`L z*&Eb&qwpxsk3xbaS&0*&&#@G#u{#{3k?}qIMw~r@HAs`#i%!yN_lgP%GXj9|Gz!_H zoPjk*+8dLaQJ~y_T10~~0dJak3~FRl)T|z2A<~wVAm5v@jQG`w#dF4c;kC2*Iq2bZ zl19SAb&S)6X;1l!WUe3h6b+V|^<`@6pk}L z6)Jtr|8VTWo9UK#hXo@Kvi**M+_tr~6+YkSqmo3oB?h{0Cmubw@g1SjTB|*uH&N4q z3T~Yt_$?nUqhYYdUzy%3-+mXye@Js9@%D%tp_4QUA-B1a|K{d|Hgf)fs{9*a#c*rw z(s59-@aH^+i8mYrUc7+|f*WEJV`F#9H>X~&@7l1r>7)FxAPFCbC=NU|@dy@vf@~zO=rSLu!zN>p+gCSztmelT^ z@2u!Kcytq7+BG;G;VXo1);>LzEn zHHEv~H%{5#v(wS#Pv)5+O5NqgkJ3f?p)terGl*5oI|YEu?xODE;v#EkIC~Xa@uH%l z!W!JAJXaJ4pY6qxQTB2G(DrnH{xk;>tj3ToSU~Er%hno;aa~8Rq4*w6quZnHPeoje zP%rcEZ&O+c3r!;HoAc3yz!VtR*#0qYO{s488J*@=q5=Z7va&D5G@4)9yzPK3APKln z@lk(WR2;J?rMun=e(UiI$aqZAuGAa8X1>0@6?AeKFQ7!~ttZ%4F-W8}8(F8RtYAZ* ztw2IC&nqv#w;2Y=rTx|1jx)@B5Lw;U8~(23-^6JQawGK;5)xPGCt4*X^M)E4dHq#Z zppxqnNk)`8ClC!lX_}&3UIQFRC0WR`EdOOM&%o722E?5?(b9_vYR}-{x$MVRK$x!n zXCQq9izzCH&7U1I63Wf!+1~V9qs9=8E*2aG=F>~e$7yeCLl@jw0A#jNR>r==9eq7! z@>+%jYgY$S7F)Z#$z8>s2c&Xtdp-k>fh+Dx>%oCU%PXg@$upTOI~rr#{`J`;e{!lpMoKgKyC^7VP*JS5+)_|E}jY67%t3vDuXd<1Qa+$<=K+1va>kuXj zrofMd@n|+iDTI#+WA%xamKGkcVIa-C;Uqri?y>@RL1G4^^>uWdy5k!e%PEt+Buu12 zs~r;RzTqNyd*lecS2By0=InC(vjr<9kQU4?*%djhy+c*qu%f3#_j0g;US`2;=ENXZ(|V2(F=Dhk6n2V z!TTNRJN)59G8Jl%+ao|vxVz*0G^A92G;_3t_s{M!bhu;kQOKa z5U6>1waQDj*V0eMycSrAFd3*84rwpp1luPc;w%srSrb?F%6D z^Ee3F-rklS{yAIV?{fScExSKHs!P{+=fH;aIz;YP-^j=)y`-cv9Gg6qO>V@zYm#m_ zCGwmv{Tu(hSE0L1_bO+Q%~R*wsYadl_I5YH4W}9VADOw_HpTw_#~`$0b&!L>)Jj1z zJF%jQN--QC+kZQLUm2*$Zxj2icKQV$IO*um zMG26`i|Gia1V;~H9MOg;7dzwwVrFl1xf1s*E2s@GE_J3WtYA0p6CjGHTw;?|?69OR zf^C2{a)~W#?P6@^<}9@#jBJ^%OZPjSTsc6`txHQF-K09JqJJ3Iv;vLTArY0+`iJp3 zxr~aILmvvN>OMZn{QX-oucV{~ha7U6O(&Pd)pcuIO<~i_CWL`UN*>C>VLx+K)lm=b zGN+UCW)>C}R?r&LBOo9!9-iGHa`z2HxQH59`f^U#04>@?tB~n?EPBgpyw7YiN=o=W z4(9!u>EsSZ^uDhq@7aXaUX@TkmRM93<>voEi2@-NevgnZ9{yKzU58 zteEGkXZ;vLnS;clL6ul?oH`iuV9itE$YKLt@_4thHF#*PVj`VY%?w8(oeewmx3x|M z-i3Y*Jx*i23@v+CUcdod)I3D&A4VoQ0F(=> z$$j~$ZpU{vJd8Zz*IR!Sf`+7_*vuKNrXS6Vfgh1ZfCN8}qj7TtIt6vU2r-lv5Gl>=z7h!Fy=^#_2?N7+&I6LD{vk+w;()z|P&m-) zbT-VbNqYxeyoyKd>guXkQX)zL6k0vR^%>yTeY9xQ%4V?{g%dlTZUYZG8XEX}zlk4% zjVtLM2QpuCen#?6Jro$00r<3G1R+j zveC@U3>AnaegORz#s}9MsgYkOQi~xFuXaUd=G3{1^vV@&+LRnm9K`&v5qSyB1qQGe zwBdU-EKM*cwE=WtvhrriZVxt>W4ZNx9=3lbvNJGwfdiu`A~!tbkGvC%6QVQu1iFtE zh)Sc!SJZoG9d(S1$a@3>6beW8Ok*<`AUM<=58y8EzVElF8@C2Aog>A?7eJBp`b_Q$ z(==6dmpu_WXcyQxo;Q)7TZqv0;N1NUa7TmU5^r~){zHN8vU~5x<1X98Rw%^1hSrso zBz!I`BvroEp9_BffKdBdm8VA4uF}lN4QsLJWYfKP^QY9B$CYpbit0vm2;-goTG@K9W*HsT%nzGKQC4l29BltjWH)xIC?b=S73!zT#Llj@#v zO59#j+|jv;085qZ(#09p0~#buy+JCbGhiJUWvL#A)|^EE_wg~ zc(QQ|l}r4n(MlT%XIUHao%9rCgM`Zr$7X(7(cLHuMg^DxyZZCB+sMes#@LDnuC7_v zcslCPT6w{SC+B+!w73VxYQrbyig(i)?HWC_%EhInF)QgD?=7zwyL6*Bg@INZ8ND^r zt^viZwhX>niFb{{qH<*05S= zUhamaz(*+)J^hsd1wal5517VExrN^SM=&7^VBOFvDZyi;-L(Cqo#1W@+SN<&TMgxi z=hLg1gN!-38zRp?1g!4c4Q=a>Fhu93v&)TG$5sGY18A?=y`Rl8TYwSOo-;~&VHs`2 zWK;4HaY~T~DD^+!|M-d%Y`|i0%lfsBAnpLDu=#(_>ExsckL0$swV4iF%_P#@NgyZS zE@L3(E}qpAUW1)7G=Vsi7ewk}ifM^e>-YVR*S{InDL8-B;r@mpfv3;024{2&25{3x zfJ=tH{h=Cv`}Ahr=eBtfE1<0N;;;m!tJ9zVLgYZx(7fkhrk@#H66VFhuvOw^{1n{nfYfQ6LR-d6%odZ+=8 zaQUqJ9tSCV(P(Br7!^P;BJUXuWSs0o8BqS`&)b3<_>kkY5@mBA^BF)yGiKxrBJ_S`wY5p>gZA=T~70$_L4 z=J;3BbTM)sZl`!g4moZw1Vy#?TMS7|9{^bED0C(`cSulcwPQ>j#xJRAwf7ktB`QcH z3XCty%m9cFSDlE$(<7!5tRHcnEiP}GHt8G-+*^e{i%1W?mR6Cxok}K^w-xczsxu-r zwY9T@zLJz|wu;SQ`m33kJcJ+a{1QyYjF2dUpQVc#zh<1~rpM==(m!w{7?1kFyP8si zCED**s(r3|HIES^=Nu`&jBb78>Z*$#0NST}=B1(T{ne^{p3%z7+L&`b5$Cc@a$)X(lt{bLy=hPmK>r{ajv@rYuOiEru#msq`{5A?$9bJ_d$Z*Ybw8mI~5Aq7A(27Rguor3Z0% zCUfR#xj=JeXHZ^VUNr!4F^HkoKz|Mpu7K%!Jafu_3nKv7cIvd zQ;v<{^)81pA=aynbX-XNt5-~E{o~xMtoHbi@(oseY;QWkp5&W<0YW|?SwhA+{P98r z`^GV6P8P{m=Cx9g48N!&I`9~^wAyFc#8Yx8tN!2E<(5GrLlujFE(k4pJT$XyVsXPC z82n!+v^SlZ34ABC5iXON65PlOv0mT91zKpCS!!BmC|#4NvEYzRR{dqNBK{dXk}pK$ zVYsc!T{xSPbmBZ)kJAJ2eRIq9DkS zw(HZjgw7|56cty}i1IzDG2(tsi^>=sFa6X7p}ap>{gD69tyuO)hohZJ>xZvLgnK8s z(5hc2(t~2?6sSKe|Ewn9S1=lD6s=wb0a3o#(a`}EwlPxH!_((;oyjND(@DmoJ9G^< zvoB$S-kJn4naIG({XSz zQa({bet{vw2$6OGtvAQV#}BZIjl;|6B-eKQCAh|0FWEWW|1;S|!UQ4eDH^9Cf~HXR zG-wRFOc$XOQ{eYv^v|P*nu*|+iH)nf<)|Mc?ms83(J2lG z&11)-=PNpi2LMGe!57mPR+JvYc4PF5w%w<SC8N%eDR#N}H zxNh!jCusT=RHMx!x?xq0P&0-okF;2X>Zwbzuv3Iew!R`A&!R0}jTl{hGy$uT!B-@D zayRr7P+yu)OyE~^3E^K2nb_bPNKT1CG}kKONHh;e2$vlOr!QybZm1yR zpnm0DHwcz0e1j;Gv=Q=LI>jFr^WJ$_PuOfJ;pVV^@W#}$=qVO>ah(MfI(<2i3&mUZ z|7c#cR-diC7o`6I!MGZyK{Uc@!uRd$l09)(039S;p~~m=U^#lG-da4Enj2$O3e^Vv zgD_=Y$u>c31;?#J%=__VHthFWsqdZ>A!fv%A2QrWhUn~t=zm9$pVBT`6KWwvmyVzz zdDm9o3O~0U1{;o-HnOWNwo6=Ok`OYHBrp0H3o% zWA(AA?^_I?7B~~U&mB{ZnFyLGk!GZEv`FW{Q6JF+=K8$;fVNYYrtg>ad>pF|;X+cG z7)RE-h@gH^Hh@&VhXE)5^vS*cP;3LLbm1E`KyCn9@?tACUO*Lr7>qoDpZUM^YL@J| zA-C14+Z5;sNoGRnDqaW-yLd+4X*q7vE%{Z51`;mY=YJ>q(C|o|HmTSE5!dMC%%gJ~ zT8Mq59_Mj`-{HNCXpV5TVEU8FI_wfD{`)z`%AZbAlT-U0$I!%wPn*QShj)Am?a7fl z%q3EcHdtTF&de1)vc4mb_R0dE2Rx?PX}JpVp1T*lImoJgHKXQeh`{+Dm#)sh;a#qE zIYEZ_d*+CcyKbVtxy#t@YnPdd^T`Jfk1t8XMf2j4`dcXkAN}4yx2D0zQ8>FnPK36y`G%Wy$wxe&V)NBEa zI&L`%a&X<)~{8-l58qr`V|-r43$T-<_1_T1e{Y(iSt@tK_sGg zk(jImbm1z64=)gF7LT$n#-1B;?LKJMZ_*9qCNfSAYgH|9cCkNuT!Y8hllc5=f;iI@ z6`%?{*NDpOg8&X)3o-GES8V!7KGSYr_md{ghc)(8k3UHW-irKLuHMt1>kUq#_7p~~ zE8}jVxvsi$LohfLFfle~6KFnhFOh~l*HP`kf76ple@y?$kSpsS;wP&i@IEA~J@cHV zww)D%d4zW@S|iR6A1^lfrqf=xEnh^ymSq_rKdj-P%C*s&c|=|N^H+g=ELau|Kb!QB zDnHqbt%+Y1g94RrTxW7Hvi@t4GK^41tq0#?fA;6d?o_21;8l!(SFLI`Hv|1*eO#BuDk8;y@d96S06r4oZ=PpDcspK zeFtjxqE$5K)1vPe#L${YDj@j5b(L|lMr`~t7N6STk1fDJzDlc5q6=)#)g91qceZk# zlgl2h+(!{*bHhO%5c^~b52dmNVVFXx9Wwl^y?@8S?pu040h1>H0Qc{2k)`uCD?l^&Xhw}p!cJV_faM zZxl)9)L>+pJP2+DsrE zD4!|QcsKQf_z|ZDW{X9OF>19aQ3DN@ZKtyH*pjd4!$u7<4hWWu^d$OXqoAqE*9h8*6lmn5 z&?4B9yl5KwgsZHjVn=ZDB7hZwb|k@0B)oX}b>{rJ2m>j#XCqnNzD|(zxzn-8am7Qo zG1l6zL1(hdC$|066W_02VB2fh3-p;_P>2t%dUbSTc+OpHOs7W>oMq{arb1ZI6$}kB zjI^Mg^LLhIT_@-U9)xYS8dBX%tH zFAee=9Nvrkn7y+l9@Ix@|3%b_xx^lRM&ujv^>gb%CeSQq_HsNw3O3TYuUSt1O{Sn zn~!aW)n?=5GfDlb=^Wa&m1LT1Ir;r)-=q%+TQ zTMMF`#mG#=B(n$*{3-^omVT@KPx#3KqWF)@Qw>CZG4d7`Jy>T)W_3nd8tH{;KiB@uzL% zrYxPfzl{XZk4IhT%vx+Mxv7Q})HSw5hZw-8L$h(5iU z=a*un7VR|x*h1LKVWL&@Z^eos9IxCn7fqo*iD!>4AMbY{-g8Cqru{_?Yc39~(aA=| zJgXy!|5X`l?bb+V&;@?x!#x&@taIB`sm8@~Pn$lUenN)}_U#$k^~>LrWq$Ov)&s7< zx#7}r?G2ZaNo&2g2K#=%wbLrm*sH>%!^;dP9=@fkm!XrUzFF7Tgu9?V$2$a$#+nyZ z1O?(H1V7FmP-Vu=hvgy@Tn$>0vOg9Er^Te*)s+o81hQ9kg5Q5BH@ouU`NCq|)&ynW zwc%*}u|=WlPl0vQHG`mVvchk?qRr`-ta0Usu#t=}OnV_ZrlZ4H7b%|^K7ZwVQ)tJx zq5Nj&X08J7Y)Yek>35G20%+}nmGE^NGpoUey^-V_Y)EsPp_bs|d7qBxq_1zx`?PYh z;3g5MVee|c|2+%7S6KC8I&|-&;qJT%Geq6g^-t@MYyFp30a41p?HVD#&x<?&YWV%<_1yal8KDdYXcWKA@5x&b5Qk`HHg%LqT10TvXf{#^q0Y&mb%=nzx| z4^4hAfH%b7T$n+7=OFOC+2)L7)(~-KdIv$~Bt~vcd7}mrpHNZC+|2jJYJMg+B=R-A z3ew5Pee!1Wm3K8W2D!7<9O=r8OGouxH0%tQmyh+((mNvUyoT?0F(T3OJ8F7!O@o#c zWo;rVY~5vk4`0s7hlH?ejJd1kCN6l1GNj7piX`4o!-92 zbz#+IA7P-Jse&tiClf2X!qJajk_{-`nF(QSI69m?#mvx zh<^0JZUAv6OIp27JOgx9%_~hb`ZQ+z1c3_9>E)XxZ?rv%(KKf&6}3N6W;&~m&oesH z0K}8<&@0pej*S!3?|fnTH#(n`iKh^BO#U3?PXK6(dg8e_$Kffirtd#qw!DdHtmM!~ zUtTsJKUH4VSssvONI@U9v^4WN&kYsA@vin=0r5D&C&{n<&mL8jKqw4KulZgdJlnQ_ z!e5|$*45r5pcCL{dAwGxcrATy@Q6buhl??mEjOkq0**n z?@n{Ma44{nw2|M*&DjSXayBpb{sYPs6U_+JOg)#86VL8hAS=Aaa;ZbbAAu+^0q~&O zN~?SV16o#H`d2#>!)>%&;V(DJZ0wiZqMgWNyf9JuAoljJR(ZW-q^yr#1B)L{wN;(y zI0_#JmKtQkWRGX(r96$qFp<2wGmftxaqVHNSxt5Jw6`=m4}-TPEv0AXgK;ph{_v_` z!-nEc{6qTiXxN|7sy1!3ostw)yXo^w1nLKd+(lkvf!ll;oBOz$Zz&beg&O8QL0fyo zRZqm6YhWTA=L+svS&#JWs?Qu7y(4#8(QM-Lu*b)AYHDA- zd;9Sz3mim+iV*(Gs(E%~nc8RrqZKBxS7#XGvtP`2s84w#5p^}{rho|)qwV$QhXXp8SoSguZnR5K;g3gt`Ki?e|qjAW$dXLP1eL&_{%FMI%v42nLxmpZeo-k9!$vsFj-3JDB+?f!Y)>h6WDc( z3R=%QaDPeWG~``0z;n9If(AbEW%8!?q1U ze#(BL0~+42s1AT&bdEZG5wm27cZ>H@IM2@Q4F-;CgQxRq%-OV2e-ol+23XU2?Alzj zc0_X0X8JqR(6rxKX(%m+0ZArQ{jg?}*jNsI50T07d46)v+g#L;unT+FF*=|h<*>4c zpm(^6ZS5lsL>W3s%B%^T01EY8X9169#A?xp{Bp1y>dzDD zAsl~1&L7UP`Crj{-xVmYU2vxLUY!9&Dcf`Mj!&GP=~>%Oz;>WRC2?Lt%%xvb=jQ!) zwzk?-UOnFWEBF0YFvSgHjNgu&4JIKQD1E(wjW^Wu40}zJ?`nRLN+dJDf(zI>3~K&t zlT0WpyfLNuITBuy(%WZ@uarfx)JJ%}5mI~+d;PcfuM#MPc%sHIni3EweQtLbmzk|= zdgb!8wy~*)gB$u>aia|R6pt;TU8`uVcya8eg@7f0kxteHiU8g5j3ukj3=vsDvL5kK zCr53jgTJ27$_=?BN$s)gtom8%9#ZR9{Slc%lurr{R1R`^Lb(9EU99sqR;*96{T$jM zb*f({8gCo!IPnB!PxQf$GhH+fBMq2PMRS59x(vRlFI)UFVh>OEg=E{UR5r$=0QDI{ z_Y(a+)@En2{hK2?v;<&RLYV-)S!QVd{q@7Q131aGT6wiFb`n)*Jjh(8YUjAY6^9H} z)Mmo^$;&WFLH^5<;LitkNrY;Ej43W%V&jfXaerKYN994@2&O9lX&%cRix0SISJ+cd zDfBb?9j|$$3wAKb9>W?%`iAL@s&E2XESUdBAh0f{Wn zO`Hf;Au60}G&8v8Ve7VtHS@+N#gBmjcU?@YnRRd7ZZZeo(T7Jkl1rzNSkrl31-3zDt z&Cr^LJIgXz+qkLu@P4r?3)26T*AL&XAl2@hGMo6gUURQK0^G{%zg&-qHMZm5xK~lD zzKgLm%@Tkqp3mOH8P&Do>rjNYNq39BR_6SeN2#2`j!}|;y+;Ee-E8oFgfFg>xSfFL zTrz=OjnjY(I6|hRUq%^s)t#7sIzO`i;4iP744MnPq3(=_If8uH>X7QZ-$4~a`#GV+Zj>}()&AqYdA_N6RX?rZKKO6X z3iZgn>M$2Ak*-1}(?qXUC{ObQKP}4-{w(}7X2N?iNq~$Q+d{`2xWNh#=%CyY$a|es zH616<8T&|OMr!7^(9K^|Qqsw|_?E9=p=jXYR@q3b*RSlKn&*YQIS?LUKhJPmnmjlg z#I%u*C&!*!WK8Gq1i{z#yJjlqMKow*pL0Ly>M_A!^LAhZ`s9pCVg8rgrqmfT7ZUq{ zu7?Vfp3S>sF^&QoV%pCM42PGDc@O=+y8)C+34WKv7Nhe;DE9~nwp7LvXi9;b3~+he80AG zRnLCw;66SA#lWu09hHOMY>kG^l{iH822Dd)etafanj5TX-+$x%t~2VDBxdch*xg%V zqF|~dYzYSPws=CJI(G#gGp6vX?(?sNr_#T15$;+dfG8p{Ww)nsEDv(%LsC8dXhSqG z81>S-jIbd9`dL7>f|e@m0>s?~O2l+5M=Bo-(N94!{z;Txb1z~feDC^;06C$gq-#(X zS%BG#5gs7t{YKx`*v3(!zqmf4ZnNt}i1X1@V-CZ9wx3VVmZxgj=5Y5BXe8k!$^voO89--}+ zP8&}r#eT}Q_=*e467lO+S5M5n@4wr%lnEN3(F!|99l+#Tk~7@64q&3b1b%bH;HCoy z&de*u{7aWIto5P@zm>gj4grao&2I1Xn?}D%C!iZAk&$hmNpQO^5Ri9dsr4Woo{hxj zR~wv|xJ~4N(%o3Ec-z^a^)xlvgq0>nF({RdJ>?M*cWx+qEuu$5JE`|8>Z*njj3#<9 zb>W}8sXLfH!#Vv(Roo5{9=E4#fIgSqjnGqllHsKV`4W(c6>&hudT>S(Ge4F}B*F|= z`W}4J7i_&6Ko5y*&PzmH6xY7$UHo(#wwe2Y+WE2 z#i%^ZRCpyJkA>PO&msV6=NRai^p8`K3%(n#aV%csEmlSzz)DTI2-&0xqFPj#2Wr0o zxjBtLGjkIaLVx(2cy=Afs$+B1Fv63U$CzWzSW8X_-jy#=WQg*!7ZAn=oQiVJ_kN|43A_qB?}~2 z0choi%bjFXUO%U*zpO2{4fES+|K{KYGOT!$$bl=XhLlYSgm9j5P}v5S>GcrdLiyNN z13-Btq00gyK)ZV(H{?llAiEc3z=vs@llb7NOnoz7s?rhK37aV3%60L?L{4^XSx&Bylwdax&jJyG~(kP{BsC=El3mE$n0BzG{D;WFRv>*4{ z#&rARU~g#qY^y7|z9buLY(zk`ls-zDupmhIx?Rl2Jta2Ivx2tmAtfv_3camQ zMX|Gpx<@I#(sl*Ux9+7<`|7mr>1Y!JQSu}?^LjwDjyTN-$zwzFt&d9NFiFyCS4v)w z3DReQPu&_AAKR}t1c5`oH*eXUH*e;!=CWmu4&s9KoVj8(nr)!Nb`RX%Km@j2;YDC2 zNm>zlFPLEZvzsc+7h-sdH2HbDsHhm9$Oid*+N@cRQ~6=uow=-GJh4SL>$l=O>wMLs zp`7~^iw^`c&r@lVw&Uteb{`Zlgj z^MWUyH!aw9cYL#RZM^Pzsl=y`F+v>9_ZL1DwkyRqZ=^#> zk7nDGoV)VNl>FIQt14DIrL*dmDmnrmjKNPY?maD%Se(Rw-VD~viIHMi#z*Dlr(C>^ z*`bkzJHUmGP`-C7-EFXS%D3jclTkeYg-NwDRSD>G*igDD)dp^EeTEYk`j<}q_0s7) zS4&r*0<4P4qe9R-#2C}j=37!-rNP{U&s(;X1(eylvYa@MVfgl%pkvDtjtIz!}S zeZECDrGAljCjvTgOW4oA2wv>PKHhQ=Bev z7Ui|DS}Lwdi0po1*mDDKjVI+lU?ry6zWy+lX+%)N-T1^Q;GK8xPEt4Q(dVQMVWTXT z31}E#p8C{tDL^ zuJ5(U?-eI@7>4muJ75w+34YB-QylBpH5$ONkM1Xvr`4i5A+Vr=IiMS_A&i+sROK+X z2VfQ3C8??dNC2({vEOm}9DKo{ekx8pcfev@vu-GD6d=Fx##QFW!t2pM2bHZQYd@J{juZYh1{2 z_WkZmS{MI==VRU`snD_&laF@NQT<%?8hob1DqON&({Qoc?9db;l?*Q zy<##B=)Fm2hckXF90*@o+;H&bNU{j*fsM%G=OAPT(hSPb5-#-Ho>4>sqJj0Z&1nlJb(|HTlP|Kn|nQ;NEIgHKy z$0i*JBxr_+xiXK6`K}Dd>T94w`&U(YzB`B43w2%~*f?VD2_X*{hM zd4N$&Fe*r0bH@7QX9?&qE^a|Y4&a9Et5<>S&oQ5Jrzkoh)=I(3#0fb^i7@;JlB;ZF zmh^JncsxUsKRypzx$@-8tRk9k5p{vP?VoxO2!kS{FkhJ)-XwfXh5W!bP7}eBLwlG- zoNB6nn#DRfwqNlS0rd0cgQ)~sE>wKtNDsMcUx$KlWP1`@Zi#@hC zaS43iA%BkrVd%2|c)8MN4d~> zMQS{hM)_^*&_$!<1T7>^+lNK&X(gi(~s`{vjkp3y4 zJ@b=@=J8B_Ny7y-yZGYKZG9Y%hBm&^k)CTuuKBA^#6-<%q-W`|FQgAoSRFa%OXKcIqIER-%( zVEK(wX-YzJ(Jv68+<*p&p+>+R4{I+0Lc!hxg?S$nhq$R^{nN-zvTlLr7atn@Qq};y zVS~hhS_d#BES7YCdYo$b9Rr=9V3KEU-+)89Qfw4@aC^@3RSkb`L*l>!-5%W*Z+fH6 z3caLItH7O%L%gmA>$k7XVdu?u$T}bRID(x&JW6=rGeJ9X%>Nkoi~(4i?fO1DNPKB= zKR9t)4it?eN28SMnI0eD(^sh*+q9lIIfdpr1K03X9+^twbcJcIAS5GyDta;q z_)g0?cOkSRn@&^P;P6(6bn&od&u-b|@pv?vVmHOEGcMHSdeC%GuV+IC(r{(f~4LgNaT*K#<<-?PVLSty#X{7QFCqFl`K&{(YzO=yJ~V0b0=^Id;oW(4BB8Y+E!g61oG*iDM-Nwcrn> zl=1m)NEEQLDoG~>D4!}HNX=)pY~+3(ML7_v8;sDp^3_4l%EQOWkUhSkNx%*OO5 z3X|h^M6=ZUv$p>iNoO5ZMc0LKI;0z=q(!GBdH-Q6A1rIduElyo-;(nxoC z>F)f_eZRH*!?pCznK^Uj#NN;I+eU>h|8G*@c_V?Uh7jSPe>-v;e@#m0B!?zs@; z%gvA+$geFKi##xblche+k9p%2chvp6Wj7xd$Bfd^?RT9{l-$x?0%q{qpGao)L?rO4x6)aTPBg(cSf zECtt&kzUDv@hp^hrTg53Ln#ZV@z0M#EQo@?Ll>hl*YIMqMtb%*n6o#LD(1;ntak2} zipK?qS%EP)Q@~+e*|uE`?kqha)uHm9!cH86i;Y3s8AN7ZUjLN4`30LD? znK%VhELXR!()b^1ml~3BPuUYFLnE@KRKEJ2{uvK4$#|qqLs=-R30u7RxP7<$Z`=wc zw@xgN5xm1Hs>H;CH{yfUd(@x45Ph-^q-bfgcVGiqs{w)7KDfMZaYHQC1 zNwOV6y}`tqRwcdMT5+y2E;wJ}q|mU97L3byGRX5P?4R(JiNPz(#5N>uLAQU5md)T! z1ut8%1a@B-@sM-@5z4E^_6RI!2q|du3f>sM?Zy3JQ&W?`IQ9J()s^y0N5iWb--o-n zQ5K`UzX8BT+ZL{M6y|a<DkK_XZLPoYQ?ytW~!}fKv%?F{`$~Scl*NLY2YNap_OvFmLD!9fmm!- zq;V4Ya3TC_oa-2lH*TDAE`%Id8@RqI#R40Qs`szW;ml^;dMBd+)?B9=*%eA)hCE@4 zM4qmlktiD$+EN4pBk*^`$hqPimxsfE@;|+7D0Dp@>h@flY^mWf<4Nf-m9|XSF^QPY z>3UNr$YZ^SYFvrkogd%Y+@n$VJIwMeA=i3aR3E7^yLQ*@*ust2bd^)xJlmYb8|kI( zk#Vdb3$ad}c+sb=rly9g>|)geRe*_xHw|{^pNKN^L@`mGw>AO!ICWcB{3SwCi&VO_fe>pU>Io#CWWZfdJt4Zj}Lo%a>?zzxWMz8R{X~0s@jVy=HX7(^kIUK#7sCI|r zsB|NbM$vJ`l$0ZTCF|?&vvOzS+YX}k(E1OY(w!VP%p9~2xN;)03TbGht@TnA29}Bz zW0oCI1;g8b(`IRlPZfAU+b0N;-tZOk70|Sa`bUH$|Y=*2FFcnN17OT(Kh5g zL@_m#bkwbVI35&LG598f6Jm0nUQ_$*1dYidavQDeW3)_gSl9}+P*}xTaYDU#vt!CO z=D}2{9wGjQ_xfL6Nrcpo0WQNXt60b?IGq$&mF2C=JDmC07E}98QD+VecB)UV<;-{GP_f6lm>*;G%skNBQ}~Z73||E zHTqofDS~h(p3y(y4EL#*avAISad%Lt_!x?t@@>XIKc$4l5mfzt%%!ctfb2g4qxh|o z)(M~33E9jFjY*3ojVe@>U+%JDP1XWTE8mKQ-X ztI-7uOXkOg=eSNwa_38kT)Vpx>JlzwvHMX-Qn_ocUYoiTIPi+jS4(OchQhD`}D zHHal0Pk-tfRv}I&b7#zV$HqZ`$dN76rXq5X)Bd3B?ry}do~khS%c7WyZ6y%mu` zt}x?E4+O5hlR?yUhl?fgje}8*_(UUGA!2GV3ol)~$U%y<#9M(umUz$z5r(yu9bARr z_Ft&Zxf)PEp)uV2W5GPZW_hIo;&z;Un7|TUA3m~X)zY+SX8K`~K`4lwQ;+-_;zE3w zaY16<`is~LCn+LEI(&2%oHyar^yy7T>SW)2p1u^(u`La>0jojd@8VHKd5s*Zi`SWv z5*dA%?{aAyc2myJorAV<+j^`Nmq}I%GCf{4C#W2_B0$N7uZTC|p;{&*R(o+S`MS<@ zk}dOVEuWJ#@12-y@~6WE^^RoagX;83i-3uuyb+~R_-ZA8@djUrC`jPTbD!o-&OZFR z^Bt#R@Up?x4Sh|P&X(_6zE{BR@Jg(foXV#a1IrxBXF=byVzcD3yRU2MgZ9t5RqrlW zD;XZ-!r^+?|3bG6`6a|xeU-W6;c_qtGCRzotH5k_OmC=jO3b!MQ0wKlqc$#hA5!9Y z4^Fg;r`ufC%WL;@8Nt`3%Eiid0D*uTGnalO`A+I*!HmXWU3c9YaiMB2Sj=&n4EZg; zMO=#)Ts=7beGY-_y9!?f@tqDPXqnWus%ss2Eflyn4}QkT@^C_2zPA=0BK|f-iv%~w zJS-45b$>~>m4YTxdxL!tW!U*_wq9iW9C{&@9axUB)JSvi9fLUY4S`VRq51f8?+~q& zmY}(0Ky)~^@GBeW6Lm`2Kr8E_MbC^^YsrDd%t%%pPZLOHLlxYg%+RApZ#1)U=)fp zvidA#wQewNXSHC7pFC~<{~KI>j9r_(s&k?;=K|;VFmiE~Nu?ffPN2IDWFUpC0ek?r zH1rtRQ0w&9SqZSM;J#w{fNJRL$4z`6#|ADs$of-8!Xa~;G#^=$_d`CF_1y<4aPgrz zZ^qL-e4b$wRj=m?(=#JJ*V}^i>O&mL+<4-2H?jjjWHS2{F|vx$QnKlD@9?>28Sw|A zG!%^vq$z+<5U38YA|*?|)}HtBH;>mB){Q#g*_16MU})N`WZ%8EBK>FGhUnoE@y)!- z&Wl{(kbT5Qn*|Inh@Yn${sly5Z9BGL5zHWaLxsJOgd9iX zX_*pn{ajp_Q>Jk8LCYD%4yx&gNHJ2@rtTd2rjE4?O|`WRo4AxlC~~waTP;R2dE>0N znbTbRSBG>yZ(~TUK$^kYIn>HJC#`wQb@T7%tD~=_uCvoC2(`}DPKczrKtznI4jg7& zc;a36rJL{#fhrxJzRo1Igoqc!&Sz`p9F*tfF9AM<@iep5r>JDVcbYMPQ}gL?#8AZ- z>t|h`V+(k=O`@rf=V}M$9^scCZ0&7{kEHt}m)E`#V&U_C7J*)R9uM+BQ8;?LIn40# zaSyogo;uQ4gaQjlAyvTqET-p-ZTF9tzM`_>aPCr!Olpyqwwm0@FzUFNL(VjIa!yI*LcDS4~L^*ibMgE*mA*H|~ozdDAGaKXtN+JoNR|19_3Tp$6=< zq(qz_5H>$8s|a=HGQ^qh6{KTz-VYQ`9s>twW5`p z<9QfQvy_Z-@{M3;RZEIiQcLcyCNCL_m&$tWyf{>>vrIyvGvhmSLjvtMV!k&l8Jxu! z6F5mGTYcmpAD%NQ4~qZ>hrQr5vu5n+zwLh~`Iy@>5m+X?4@M`+SSHwzb@f-7xz5%wXvLb7Em8Y0{-*l7;r1x+ zoZ8~`yKJ z!h)jsS!TN_j_BzW(i%N`?_op5uld&^sFriGMn^s6=lGyy1qU6(l!`wR^KJMU!eyxM zlWF-FNV`$!a+j_9_o(c8!4wN&d}#B)(%ia+)Lzzqek$uU>EhP2>wO$#`}U<6oD5y2 zi2PgUK@a@){UW1Uzz9J|i5=Z6o6A_(+{j4~l4v*o_i zI_ylmhrSL847Lw+y?BM~-N3qUiCgGx&ji5<~JKTVIB| zv9-@Yh7&lJ!0+d)`@3!E7bOjMTwQ5#^*V?@cS`hU!^5fEdpQElt+U*-?oG~2pcX}f zGoILvasSsDk#^PRLHd`G^2q0Fq@CZAYP%l-tHHm;6uJ>E;b?c;J=R&R;-z)*T5nWq zt8!#Q=wQj;8yeES7I_(VI8LhUfzskyzPs9%t{0R2QLdSLouD^94U}38O1WIP-l}X! zVVi5MmL6S($E;}rRjUI>Gd?%lHbw-zh3Y{}#{IVqqgYJ-^_HC_&Z_`)0VhW-)2;Ws z&Ba^}*{yefbTiQHNunmS&nK9hz=#Bvy}DX{gvcKk{QMHT&Ul!R<$_$2Pjs!@NNk+X z_1KDuh*D5R341NjSUnn%YiGh+#2iKd3hIq+s1x(U{WySQZ6}e(3_yh7;UuNbx8n$> zH@&*0u(qdIpW#0&?K&tv9q+R&NBoS0AGK?K?!{cw?2toP5oELE2VZ+L_a#Lx^AWMT z;R+bx!#UBT(fyv4c>I!gMo4usIssdg;w^LQ0GihEgjQhQ@bjrxnHB}_sj)G3Bv zY*|4zo1)f37QVdMdR4x6*!28B)B2GC-UH1BGsL!flW%d`%@r_=ar?8q|hG2jb{sc)7R{!0_ zD-EVCa^NbElo^$A+_&GpU4c5Uxz_h-PPIK8x$jq+=F{={q;96IuirL{{=Yq$A6Qxu zO?=~hcFe!x9Ev2JF>@~W*?YfmqeR3==&Gsd&+JcQ(9FIUHJpDm+JC)QHkYRG=m^X* zDE3hEnID_n#%bq2+*UrHe^jDEd6;#Bn>r*CSK^UBJ z8|Uq*r{rUlVXJ2?8+Ws0GnH8cZiZ8fxSi}9yX$mZ5=U=d))SQ|zY+gkGiHMrqE?C@ zKD=Za19ynPY7D3EuzRMy{+_hJ8|&W&*}ur|R3`}9_NW~n=!F!{yzf0)Ah#FMol^BN zLTxwq?G#K!ShwEq=8&INm+9qnJ1P2%9`1)jK-Wqi6&g>8Z#yZ6_ z#oemUQZd`4%D+m5S`s{I)fMk7`3e&5$biq?xox{w)&C@8Do(OixU73+r^yhdQDXyQ zyf{E0FA}gLDJ?rT6dX@+y!+E~d#Y?F?{=_s7{^^8VFv$~rOG?Y?k_auii?oPs~td} zB8W!$2LEz-3w%rs7iipCbD9)}%B}D?m=EOL8~*D$7WK2py;ZgM zKqSS{U?;-5E21Db@JC2pP`bw@!t4F}uP0}xO8TBLuA`)Q>m?wnuiZ?q>Ky$6b|Xs; zw1-ru$Zr`wRipmUbwf%q>hE?w)P3W)&S#)T6Fu1$1ZGmT(o4&PffWvUoNn;G4USJ{ z+@%6Kq*)=JPc3_}liaPdxX0UAr{(tYayB*|9-h^!+tcfV`BCBnvC_)?<*1o70t;A@ z{X@D_eK?v!7<=2&K`Tz@Qa2O8f6XJAcdc1C&O17*}8vo4apwb#=8GY->>{**!FC|1F66D6jiY@qV~(6td4A zrd>AE@8tM>szU!&L(Lz}u$^Ae&8|7tz|m4)|~i zm(gfCkl^p9wwU*SRR9-`mW;>gw;m@j(N@`{l8C!2A$0vp))C0i1B{4C@Bm*jXFmF@ zsSWpS0%ND|a~y%snPhLU15MVUV=h9f)k&d|%^2YWS5MnN*{pgp_0|yr0J${u#%BIm6T<>b|C{&%XKSxD0p2SPoNc5+Xf-E$lc%zXPQF;A_X|v zRwqOb^jkc3i4`dEFxSm9CUa6}M5@o1d!OgbaSANO%_9jYB!d0@*hcf{*@f#PFK3UP zA_uE%ORwzoB<@Fn0qg$Mtzet8gQNCd)fY?%&OS(W#@D*5oz-PUo2`Hqy5uIDPj|$28r) zwO+)sTE*02whT5?5g1c5<IOog65XJ@{>vhNS77UBZxfaMPuqF`*WyXqK_{Vk?v!-2LFX2aV)^och6H zsOy9V>=6F^0#7VugyPtJmWubgYrX{-p(cxW{-)M9Ut)xcWUNF82IX05qPEexIQp8j z%cc)=ox<1S6STsXNv8hJ-#>L?IW7kLd^V0J2d7>48l$+m)!mMZf7STfest^l?6>=H z-}}9oj@zr=Ro)SHeUo^Q{cIyl$R>RD5Dx9^(iMjq4m@D#pBxe`J)R!*=m0X9vBjB) z`swS^p@8Npb^k#jb$TI$6DN8ztZV0Y-?mA+yj!l+?{iGXH?Ts!aC;_?tlXMYXOcx3 z{)HQMjQGCCN8kumoIf`N3K9N72Lrvq5^;=8=qb2l>f_g@@Wb&bs`{PK`ObYVH_Q#%O_Iw9qu^9 z)Lle`%l=^$ZG>axR?bpC(^Yr-x~P{;#G(Kr#AHHbyGj424x8#HZ|oz)H+;1_4}&=s zEuNaJWA21x7&!Y0{iKRDbJn6VP~6S~`Ue|07#Xn2+ zJd!x3@vb_Oyw5cocS!~tZQ&QdRNmJb zz|$cqgwSLR7GD5oX%np7r>ReEDbbCxdw3Hr+OA*nWEx0!;xp-5l%49RJ1EoMcPXeHWtw9bkK%>>@y$k9#7S@qeZn0S=E}b; z-I(1_|6F#KcE+r@((FS9GYm%aL)n0Ph7&*pVQK%# zAv-Uc+>je6>=w8n)1EQJv1OW}OD9gFCI>05+8aRtC~{1ZEE{!!ygrZ{50a5ReimJ2 z2%FMCuBSJ*+C4!JI@)g7rv&dioOLa%A`eSMAe zeH{F1wv-M5Pxj=VHWBy5dOK98jxNrEGs5-rXB+pmC1v}u>_S%^`&E5!w{2(TerHqG zKp_0_-@X6W&QgOBJ?R%n&acpIIx>FIim2{*H&~fai}u;3E*;-8O6C&LnK~EZjs+;| zPdR5C^(ifbFaGej#T;3RHox82jk>Gf;~qfIY1rDOK1AQ#%CF-wk<|STM2_vvcxFUc zxp~+5GN>b+2}9gG6ksz-QO7$2k4=*Gg-5!J!;IQFlYN3sTX+C{BZur*?M@5?j92c& zuaF!OnfO+Pl&ugB`FqO1QuuSZf)Cobo9i2wvCRrtoRVSr90!OVf;t5WvifIhGs0D2 zm)%YS>p>P9=|L8jLIvtAl+($nh#yF@$`Ua_ej4Kz9>?F~8dVZzu92C*A ze(X75ZI*M-KM2-ZV82WcD?9XtphRPt} zPB7Dxr;n(@pe21-^Fx{_)*07h-cFjnOGg`^wQ?=H*}U{Y0*U27K%1IJLhJ~{Hzs|e zep&l;7`V~F2-~oy^b+L9#TetkUu^4mVQPaD*vi4m0(pH>ORTuc6qM*@G#3NzH+zXp z07gHP&GNe*~i}=zZwf2n7ZF6?W(q!=aF?QZ@r4q~ahD(0D+HuzcE| zt@5oslT}<)Ki%ZG!Hk-EvQ_oHT7WMUbE9iVS(u3AQQ3F^mI;vO6Z3akox-U%o)KG_ z`_^T2@9EAZrr551=0Jfe7Gm?j>i^NflDx710;WzI!ae*8s4O5gO*B-T*D3%Q3P^4z z*%C+wj5c=tcVvLlE$xh=>YzBly^u7y$XWi$uWYyvfXfeVqjT+BE^b`2y|TJBfe!Px zJ*Z_+=4EI2dfH}~fP&WeA&VO?d%sos%ptjD#l(P@pt6xqn3-P5T0ahN{>M`G)I}?X zBO}ySkr}n!U%jcfcr=nO#1$oq^0iQ?79<)AFSAnvJninTH7%^&lEIV31v2|rg(b>I zT7)q(V)KE~N=Jgx3mUn!LG#Y%Wa!q}Yzo~+%+=EUXzqUGU;SgR3`=erKF_&or#_*! z99AlBR8}5xWIb|k2BX_NMlY_hY@>*6|GfYJ7vKpOxB#Zik$Ewzox+T-^B3~AOdeCb zb(DvsGh~0K=Z=q^m|^F@R|;pZRpw6RsFNPCv#**o6?OTZ?pn2*h8ksG zhF?C4a8XhnHj^!9fpO5W3MvV>X@jj8&d7XIJAaL6|8pO2%jw3p>jC9M?K%c3j$H# zeODscXP+xwEU1Cx3u%#conA%yA<`?3gTh+P)srFOHSfP>S1dDb3YHkIOe=q2oH3@ z=nBTU%7w(4|NKpc=)X1{5LL_S8HrqXQU6BV8GAE}zlkShaf?fCP1M-n%5U}G`bGt} zj~t{E!|@PJq1Kw2{BGHSDP7L-iWw}*&lwVn+5KyCof^{r)mxG64qKFdUL7%xf6D;r zu$GdZUjyv{w1t5%LR7;_WXrfa`@yp!{RO@HjMB;Rz7xGd-OqPu z^M~$vXw^}W%%zj<8!uiEwLoy=Ono&(irg4f2PL@UmQTpI4_epbc}j06=$pP|ghZ@7 zTNR$lf4*{`Ai?b}W~%upSCp|9BZ2Xf)8;A2mHZyRMT`Vo621u+ipm9WDi>rhHy@KH zM}B^>3Xa)=w>Zf9LaWgV_I$Bkjx$Nw^pawPFXi%rU}9PQ)r_aoy4N7H&ry!qy4YFU z0+4&5mNAhAfMeN&_gfseq(CB&IOa5Vb;xrcfP46@1$;&GJJjTN;(-ZIg;s({AAi9& zWzB%434mV&^U9Z}b@n(Tj^@0+6UGpKpi1mG8J}qeEUKE{U0P+Vq%q*IikNKG{ya!G z8T*eBiN99l9sCuj%l(CaX@-Mvyh#J_j9N;b>*Vw_Mh*rEes^NP6B{{Hi_g>x*BY6}70^DX&4aXyjedpopnjGM+vScF z0veK}__~LGqgzND?E!K&ySowz=7awocvzhTIv3P8^c7{h0FA60BYUr9R*MXLhaV6A z>Ho&>_Fr~L6Kdn`iNa?(F9#QA{wa?Adm`a*zndv5 zQpKN8lly*uYW1@dc)+Y8ig}=FGP72lxM)ny>UDyL{A}LFJS^BjBzC!&_7}v7`6T;J z(Di`1lPuf1cgpQ4nqPb=^e639E+pO+48t+S+0Y{%@5Yd=sx5J!fzwwgjPAl}n78!3?)B{SGTPzs zgLvU>juYJ15j3~>6*poV#jM_}pIh#9l?MZ_dVy1_w|lfq@`dQiR_zB{kw6^)FfnLV z27DTm1;yKqt-oX@ZW`kobuVV8^)cw7!dNIy9d(byMJ|HnvGi#f9Pp0)XW%`czCWGM zt6NrCD8wE9LB-O&!Cu~nabzp0gKYC_Ul~|yNC2CN$TiH45?MySKCgz|P^EPMsBuG_ zLkY!4wjB10t8_N$9%u(hzHYN>f>uPpXd?oX!i>=v*=*H%kV+<5i% zZ1wlOLf-q2J18P>#M7G2nC%^;lbK$JjpYw(r;gu}Td>G3!!$qW)T}Ti#t{Io32+Eu zRT~-xohn3a3&0nH^O3BPc8H7KnY1jmp{bUR9cYMQI5LZnn-ByK;50H6H;U-Vj8{1I z5|wi0$AfbAe5$ueePt?U+z2x}GkKWJ8h^yBMJkAo6O7K*Rv-aq7o+PTD;@>?cT?zx zjkZQ+aEO%zJs&bL=(!PM!{1%d@Zo&3XMjV+VE>f(b&D7(;5Y@A&f8tATPpE&a@_jC z%5+*H+jz(4o-N>=f%Kh1OrNw}MHK(zR zI9j+2U%I}C0tMdVZjK#{8Lb$hT@X)0Y^a^6b!Z9p9m_Lb69uc0EO@J3)(+>>pIO!^ z=prO4t`05KiIO)SDqL45Wq>XCnsp?gBDG*6#EmZ?hK0_is{SXp;jD`|%fTy8;3+^A z!+a>3(HB1mEUmO@A^2SDmyyoG2xOzc(ZYF;5BV7czNUPgf$F(r72Pi~J$sY1C`OM* z`rcP-Aq|HU@VOf`pLc#Cx?laFsCg*`0WAN~wpw@$Kczxs;(UWkV#d`F(Q0D{QavB` zN#stBL&WXdr5^*e6qchBOxJpeRnm|GQjk&t`+D)buPt?;#z4Da4*sX|W@oru8l^b8 zP+0Mq{A;!Gc-@P;K`GDo+AW22%fgB>)CkQN`0l7!p9zVM9 z0j{`P@SDEIfG(U@pX|42`WFz)P)@t?akIm%nI)O(1dA$xj{rIz4!xdfv%v1Bv-(?#H&?57Kd7a9P<2NbiEA&K097HO99QEJD1Ptn?;%Nm>NW^oh ziB=`B5%n0%0P#RHSP_0nuY^z0y>jCcG;Mt~h!RCBSy~nDp3SDx-Tf{PkAf(;SNuS# z7>7cub~Vhorx$4h)Z75xTltm8gn){+6^!H$e-d3I!5qAQOc?zlAy~p^!(@yqU3MGW zSsT7TAU22mk#f-xqjAGy498QtINBRLbl~pjQWNJ_m2B!l#BPUHwc(mRgJs$TuBm)j3Q|QO}Pk zP$SUMOiBY?Zv4Jao1-^0T!Ma8vbe`4-N9v2eFgB|@(K#4nO~z_$E+DD>PG%8dU{AM zb{wj~7ATk*f%f-i)<(+xK>Ym+k*mwM0AmyhsAT@*FCmNJ*Z?=hjdJk?mEhfejG!w+ zSv#S~e+R|lRSz|1XJ--rZm`Px&%R&XkYoSOj zy=HnGJKv@+b+XiD0HcIbsJa^n9R8leII4gUcia25rhi+u4U<@TrCLNjWeZ7dz-oE> zl~4WA_6@~)h_BJt5N-w+nOL^?+&p&*kOy905S1N8D0uRfpHzBFQ4oC)d{*Eln~J@B zv0Y2Mfe5&$Q878seX{ka-P)v`qy4){&lY+~z9osEf1gZ<&|1&fh_Z9rm&{0-qZDB;VEXp3dEELgKcLZ&klQPu`!SlDPY8{#IdJzyDVQ!9 z={YeWVTCX0v}3y)r?lHykCIxiL@a?1=d}l%@Abw@u_tqWLaMo|IQJ1CvTN7`&Ns2K zX1Ao(3t3|WCs7#xFOnfYj*yhm2YowGMi$*PJ{Peeih+LATw}e4RF)YCCA+Xvae$M3 z<53X+xlRsKi+_vkQ=w{lHDjn8MZm0y6X=t0+!(j(16niBgcp4`F1;5$9yqE>;gGrX z$YHxH?Rs8SFyoq`oX2!ekzDorFSk`@i-MTm!Rqw0aS5JI%yc4o#*6C_1LPK|Fu0x+)yLpEV+;uR{&ywUrO0`V{;H&y#5_Z ze;)q~aG%osV@Qe097^}(EG?!%or z(|eJM({qhyc$K7F>h4p%jrPqr0Tbk-0b>D7fIPWhTT*5z7MZ7~7<*7?83zCE&)i)e ze?ymTC!(4>b)rA1>NIqt{A?mmk>%~eYWqzP4N#;soXM5PE?;e~NCsY{Ie>_oy(dm~ zW@F0w+aS(=lYRyN9f`5jPo2l#{T6S@?QRI-!(e|;2}V-+uliGCKPw}~a^}~ivQNZW z2TZTau8hCcZDedDhBSYlkr%kCIn3Q?$S>)OBw5Kjcqd2OM>>+RNHk+81h#Qv$kF$m>XPLk1nP6|Iu*r750DgsCi5}?Fb0<0Jgfc!#hYn^5K0w7 zci3lZxgo^g*g?&jN9Yl<{GdM@W(4$2N%ok#8=6)T^DG-`$cF9~w1dnKkS%Hl<gAut`d0ps(fRCI4{NFA7>_pgGn+r@jvLz=aI3hU3CFEesglrylB-(ws7b)d_ z9-{gF7!7o1!@+!xyUnGgujcU!&h0R9)b1j!PVY|(cn|)lfEkkxlya7BXQ;)QX~d&^ zfT32BAbR(w#e6qUF$_)LV-ebn1zhd4) z_C^q1i8-Gy^;%r@ec}FQ*t1~+5;aGDwTON{M~Epx+ymZ8CBO!fuD95n(Q&9ZIEZ2Y zFb>&%#X51-j@kr|6B#4%ty7TwVkU2xhsgs+q&oNGQ_eHLJBN5Aj#k4yM)vH33%_?C z-s>ELphMM@TI2RB=}JJ)v2FB3WB79TN+`0QN!B+Iph#AUkG!xoSB}^~Fo8t~#S$Lc zlEq2|*&6@|52IL5v!vN-!_&qXTMrx_?fU&MPf;D^w=6qVIWrI2<>VueTY z)UCR22W5J|OU{%2L6iI4B;WcbPLu*yF*2^VATG(j3O~*% zw-*Q)x+S|(_386+c?pHTb)%)i`ERV0`N|s`#7!HwAY85%Ngpo?^sN<{9sfj7CiINe zLg;QUB0J-J(Mc!7DNFe%J5h}ez7uW0gDQaCuu5z@1kK?wG+APpAk+S4=E8ASJv&&p z&cHfDB35$d3Onby+yX~mJ|ZeMDctqa^P(4-27f?xhjtAEtKOK_Ua-G7NvfDTcn!Fo zU$P&EobTlEO9mZY72?BW2WLiK$M)!6yCDJm#A;`{EH&q{9SMq1hzwTnNe$I^azo(O zP+a{-GisO(M%z#T*u2FWrZzCJuqdGd3dzQ6oG}84i1vlL((U|&!dK)l;9R;9S8&J+BcWrz)7o!$s+ee;4vNF4qhwC>+jw@VL!s`28Jc|D?L45gpsMymR68fcHd%XWsL`AKP;rP&mSt$naYN z2x_UoNwmA|$N-pHf|w8I%mM(-vabaTY}9O@XE%U)3*XME?edfd&e|=A(Ba|0j-eA^ zBJ+@&k7r)Y=LUyQwrjCaHu_-Z(zbf_)@yO~N{KtO0n%asWTjc{7fBHF{L)v*EiPb3 zV=|fKnnUnM6X*um6|)%hiuC=SDim}=zM7wfub4zrGl?M~_qycf#lg9D?ua@}4oQ@; zA<)>EvIT?4Ctw~R)Hk}O@BtjGfF-5&`@0Y81V#k1UbS&8ek^XzJ@fdz7Iw! zpWQYV@fa0wJ|brlihPAD zKZj7Cf>?qG*exK3o1er@-3th_Uq6L={lT7pF`2(PP!qiZJ(x2JP56b<(~lD5WV{th z3rwE)aSYM>{&#kiQ=3eTJ>1&%&w!5xOfw=;3WiQ}5e__AL(<;wK^?qiC`*4OJo<0u zpE982;dne6x&ZgcQIr+i4!aNvHGCLYLp#!>udE*40L7pc-`&zWjbuv}9p|F&ff}%P zr-Nk{>2>=)r!FAs|5+iIM04QJljx(ZkL@g?mIqsQ{K`)Z70A&y7KjYNxNgrdcvp+> z7{0q*eHwpQn~Xlt1V;6NgGW75tF=m5|h=WkIxS0jwj8};dzH>gPj z3Nsj}OTIGv$_wNE8s_HacEN@ew}(*XX6hth%jed@eA7cxiMT{2gaC*i*atoFJl~d} zuMqUi+#LG|ZtlclNl0dW4*0D_{(^u2^(K|C&M~Mgn`J%u-#=@Cl+xN)R7PqZX+W~3 z-ZUj1hhLP*Td0kOwa=3W?px%cLpm4X?!0PzP0+|2!YjZ9F^8n%-^8460oCC?wI z*OLst9QtnuR%&JT^~MGRJiNulHhzc&WriH6f^qbLR>;5k6Ijvl&lZT4(5OeYmj&@h z#dsoY$MM%60J=`PB6Y6@ltz`jmjF|&uBim5s|OTGK`JGG|GQI{lPYTW%bW-_oID$K zv=cmEy;B|!HRT7UX(M!I9@rm)*XF1XMuW)7#EZYv{D;n$z4grw(2H(|zI?WiK^`RS ztRA|eiCX!+0^q@;fN{#{kRo=(nV9v2i^{w94A95mz%JhY5&JLiEONmqTZU7+&!$qk z#i{9s@BjVA$~0nae4+ol-6$#S?s^}8Mrs&V&l7HLe!!61sJ*|8=eDU+8~-Ew|9b;9 zSKXF4$n!$!B4Q-v5`m^u)#D3iXaj>G&U^5od$5}PVpEKA0Ofg8^TVU}#<8 zGm%8&BsB#SkbBSDNlW73YrOVl1Ql?O=GsyC|0O_oT|KSHo$tS(2ZLBz4;GmCZqcaw zWy_{Z>Ps#yt|U^^?fPRH$FCr8)3^s<9Ao53jQst~VkbqGiI3k<5VIHk9D0QZtX1nM zunx8{85^(!zgG^$QVKRy#nB& zC>!jqZS9Op*=|MdEHvDvj4#=O2^CRwMsb_iZ=Oje!5YFqzdUG-+wwc`asj}U$~mGW zO&&A_X*4{Eiqw-HgAH6FiBT{Qj}poZfD}w7&jTLs>n_tNM-ex`2+nkjS&0C69V9qX zEUxmVA}T)HtG%!Kl5zxxO}?aM`Sd-b4kI4&@&hLS1zHnG@XU+G!A~pa3H3cy>=wPJ zaL@OMywuk;-p7E`JvOi_aBPx?)gy;Gl!mq6DGa5WV&(B$fQ#O#{avlp$y}+$Mw22c z%rOr4eNujVg&7-AcQC*i?46oEqW~v$k4EUZY6p;Pg6TP2RS}$aTIjvv^k&Z`v@^1A z=YcB9`%V!B;E)zG4(Y-~Jvi||W7M6YQo1ovl^xVS_M`h-*C(S&8Qf*UFtNGF({EGl zvS+qwoVa)`1VF^JK~^hDXt%z^eMToF6h+ z&!+fI%&>ew-b!Xv&3b4RL$&j3qe%7gEzPx7H5!}TEX?v$sP1(AL4qR?XCNqF4Zjra z^m0Q@@KN7~^lcFK#@l@3&A6V8e&XktTtbD?#t(HO%4 zi)|JJYTrMf;>O$E$YGwHp%2JGw|zmJ-z#ew@6o6dJ~d@}D0lj(NCUsdqj4dLMdD+PEh8BW0=q{mZw zP!Nhh9%LSZ88k4-;`}EWT_v8Dt7g9%2FCt7>WN3FFp^e6vkdYTg`9NdB~t%6C#R%7 zJU?K6e(g9w39j+|v`;1u)Y>Bi`fmmn4Nw?OQcg}Tq7shs`=n<_!}j-YrwY}h)*NPa z0x?fdkkG<6jNGt62#!B6nf9L0kO^|mLn2+=#mlZy#w?VmBkZyAE! ztBcSGC|el2>dcUCBE54?zA z9fX|&0QYy?xDG=}3C$stMG?lV36D9y4q6UIicWh)(1)c8>c=wu9w_bHU@t@IfU}>q zeg-BCadmttncfBV-L9hHKFeMQrK}x3DPzNzgs+Su_MS3NR z6ILZStHFx=^RBh~=@f5K>D7HOIyA%lG$Utn$H#H>D_#)($=o{6I42sl?O$ppOt%#Q zeK6t?0;dX$51*!`DiUF$Akx45*lQ+ld-{@!4j3jK=46?Z+fTyj|8 zl>&{>z1$@J+hwjb*6L*1ES3rmt6*-V>utU|#~8UW@0%s9H|$Yt*lLrJE;3<+%VzQb z(Ss8sn84_%oD>|Ssp0b=j%ga%dy}HN8+60-8^stA|56reB^bID+@cjh@hChX(%Eo} z2~dHi*trDbQuPSpghNl@_>)CiB_6(V&dX%s(qKa{ahADWIB<5tdb9-%Dq>tWVXrvQ z{5V1V1HG!VMuUS|It{G6oyP$HKJ?#z$pAHu4{$-5xJ6eST28V2$_qC0^ug}2VCx5)@Z`>W&_D@~tfe?r4)E{C91o75 z?j0Jna=aOO?4lS7=m@X}qc#k8QlVGHkYJePuelDyU6-FR;)8qe>P0M(q|pYk|P z$@n}=T$i#we36YSslwyx{)|ni6x6f{#%1pngx1#97Uwzvff|3TLO7P-`p5}7H4gfzOx>ZgA0KGFKl!N1}!@JgW7|B*0>ZMlZ$$% zG(o;VU>1z)*niPI)+p8RUpxJRE3brt3L9%Tkpoz}4uqE*w#LPeFQE%-Y7N^0zF(XS zZ-B1a6c~3cZN+Pa`54?|n_<6W0i7e_+E2P|I$scRU2xDGRk=BX3C_dou~T!`R?2nT za*wu?8G=sl$Eihz59rxx7O$iJ|4R@9kDT3p3GT_^+uXXq&J1yB-d8t#R{Ige!w;;h z0SSdOXa8&Ms^6mgp7sI~N=b+`(uj0-ND9&^snWf4!y-tRgdkmlv~-tBhje!%$OL_|DP;Du&B{zu1o8(w!TQ1y9?R#oWbTh6nPJ?S;v|R6G&dxs=a$uH2=h^F{7%O}mtN-hSQ&DM{gcYNm;g*G)AEf5}kH>moYB8XGSJi7Y&0w6Z5&{ZUca1_yg~gfDNDd(A=G0~fjZqRXi|vhXEn^58!{ z!{f@Tc6D0$0&nf>xxm_VX;^1Y(O=ter?rfGHj!Y#e;0vGU6F_YX#Da-3M23lz&Dh` zasPA7!OO|jHg8erK@%eQO-zk1$Ylbz0T<@rwI^^)KolV=S~*+`6!cNc~ssybAX+T;aNLHLcKG#_ijO_$DPX8wFr}F_S_Hg6}#fnpJ=S9FGV|?#L z2|@k7@K`0q7UvOsGMrGiG2zyrc;SnJka!w7qZH8g6u5E(1eV0$rcZ@x=AodG#A9Tg z%)XOS@OCLo!9@RKrf(E7DuitOz8fAQ6lHl7OISUoZB)Bw(Wcrwp^6zz^m4w~s=<1U zz%T2+!npEysxKX-aqkR#Ng-&R&dWC9T>dYgR-rs}4k{^;?B~f0N5e|%Pj{BSUp&mr zM-7+)ZL@B{mBtgQuA=9U6jV+4fyEAMVDQa6R)DBGaaH#wV!-}yqoO_c~mm`jOu zpxC;W(9YKWbh#m@0@3ie-n>Lc)4J11QxVIi1NadjL&&Cj2m~r0^x!D>q~`X|w&p`3 z2M7r5VRwA*SpXpdjYt^nwzj!{)Fo#@_=xl+9M^Dcs z+d$N}hTtRPX&(J0tY_%a0KJ*}KfT!+ z@el2xs5{oRiW|nuaHoY#jYyz*d+%fb6!KyZ`!QB$Cffp9R3L8=GqvcfUp!d{Gk@@8 z1+QS)77?{<*m1z%IqUF~h+VDQf=zLPThj4YP!YIJ)XJM7jV;p9RBXA3#zO(XoR%rZNAJ75rY`(pPl(V&lfTVQe!j35)FK$Vg z1keR*uv^$Ob$C0rtE)@y$4f8a$}j!tyjHRE4GIVYm{Q8P5 z8HThMu)`i&GKMlE1cVmF zGO$)NTw9h@8*CRk_m!5>@H0##bMzKTz(HKzpB;)yl(71vUHBF;e@S`;fB29;DCEIQ zxPE6ftGu+V1~ElNUt~qgXUKcw?&|NXZ=WWw&{ee5%RSg*mm>6ewAc1}9?|3)5D2SK zMBTI69yz)7y9s_}c?_ZVb~zM>qwHP%2{RgaF?kY;vPzic1?5wrppofV_)h(Myni0iqkqt=SQI>C2E4Pn{=W;>hYD1EKfX0e8q?N;{MlK5^z!o zhs=I)!K|Wb1$rE}?x)PmTmA+JN6&L*Y61=W0{B8JF9cTW-+cLizv15;6&A#}nuDKz zsz)@W6gr=fV)pe(kO=-k1`5o?jB9>3ad*bYng14rWQNKw*fPQ6j|4n0q#SpS9o)(zL{~NYZ-saTP z+v~64Tu!`jO2{*Z7QD|I4sD-2aUeo*+?IT#ICkDUP#q49V;&wJ%7?LdK_@BQK3P?CG<+CRrQLp+pSyXY#1M<3TAa7yH;xNw%&J9Sd|y8i&Z2&WfqbITH^TFoGhR2sx7CnL|E zaJ&KZ^`HH+8M6BNzvX~UZGoA}xq1RL0d2i^;vc23fo&1In{TN~!-TZ$b&fr95rX!U z|HAZ`4Ja?W;Xjq*t*my1@10AM@_{4Ns=WBVB*5i*pB{egA@~GQ!S-9Yr1(L7z zQ!S}I=24}bMEuGkJs&_Co<+XL02|sEXLOSGQ3@CseQeZ%2{TFj5}bfJx&VGo{0N=N z3c;1a0oL#?X!)cS`UnGpNC1pu%dPL-3yEjzAtjPKdJd-O+frUOt|3xZVEE{`h9r0d zcj)yo#AinG3HXR50yTvbd_+WYODs?_CKxGFuqK7`F^xrMmSIgV#~AzN`&A{6&=e=NlEg+yL8CthSCcIF9k?EWl!pu zInSC~lnKL^g!6wtdD;49KA3DEmr+zWB9$6}GrF;iKp@ICsa_5+XdQ=#Q@7jwGTq3# zP4h;ICjnJ7dHN6_jUt9wnE@z``b#uy@>L0tP+Tfv#J6Wy;J;wMNTUUo2_OtWq{=!v zBuOlMzHBNj`!_HL#wR>B`h{eEK+e_la+-Ya?2JG7zY{TR+QE9Ty;N zQZM;f(cxH-gjJ{zwX&MpQy?pt32fe;h0HXsDX8l+ktc)EWF(Iwf)9opQJWo5G#Rxg zd*XT0_9rOF7L2JkcVuG*XhL9)iTw`@PR0nXe3YrTGAbAo=SD;cVS~bw7hccdl!vl! zUpKp=+}+)+>D({9X$(Prm_+(9i^z{KLW~FM$MJ8Kl(3j+$|F75AVoc-zB-RXdck6t z6OhDK{(L_fulH@{2+7}!Sg5$sCq-k=-|-3Xf5`jM=BZML|JHWm^to zFg=#IIiAHe^-nqH)c7?b1lgsi(rD*%x93yIeykiIVY}=MX>=8$bT#LhlV28IjM)S% zId3gUwo$|{i){t|s8l`Y&cNB8EdX68C*?A#>RPfzD_ay!&<+gO9u z;sb$|ZqjzS{dRao{Pb@x7+q-=eXH^~gc&GMJ;(o8!nCRFN;|-x3#gdYyheUHC@(L0#@Uf&5;iM_4%S0f&1Et3b@uVbrj6x* zyW&P_cJQ#yz!=ELP27S>#VvZQ7#hS1@Rhg^Tro{TBGi)@ru;tIA$f31@7ol@4)JFH#4n@Ylgxj5Zp)wKl(XTo~Z4+4^0GJMR<_w+vusZ*M%+4 zU#7jmz?4tib7FqhedVml8J@%tm_X)8Wl>y**a)z`1Oy;f`7tXiOQ+RU>KfE$He1Ws zbn1-@zhOoa;P2dxKZiwT=R4HSr)Ku$MjZEPo_LLXNv$h3 zBJ#Wx6cxjRJV_eGl3E28Js1A9KD7CyhK1Tw0)e^CSJ%X=ZcPEy;TXz&7X30;2++t4 zN6AF=FkA4Zj{EuA^?zrDZ5DlZbfod4U4HjPbQL@sByV>B-9QzV;Q7#_&E25GxCr&(9kACRO z+}VDxP--O;Ofk2e@MJUj5IEB6DDmX^PvuKW_|*ZJNi$@dwEeD8I;JGBaPJ5w zG)MKeCEnaBW++dIM0KMkCft416=brRuj70})yUbSAJO%eG-9x}0-LdtXxiVyezqdG z`wec4Wf=?=rge0Fl5=j_5=!h6(C}G^GWz(@X_9Y!&~YRJh-uMri7sLH;ZiBQTt~w% zI(9wpmPMi`E)?%k9wf6cOj8EPFo^~+^K;_J;MN+cncPkH@n%k!!+Q_AJ5di&0a6s0 z>zit>n8LWYy@|>cx{ z6<(NG?rSE)-{27Ol}w(twsV|BWuFlbZ~rIh7(JI0C00eJS2H$_b>mqw7PTi*G} z6k0ptynI+}WHnh-$cR*I`g0i)-{l*5a`jAOfA}8niMK0})XL#=Hf7wT5UYp3`rpTv z^*zu}<4*UJXC%Jpsjb)#7qx{A_P?pLytuTs{?llkCd?oEL#DQMqmi;_whJ^8cy)Vy z-tcb(btx=iMy^zk1|h67r>|kOe9$e54SRuwhoIxcXMFNm;5c@i{ll}-@OQLH{?(!O zs`_pf8Iy4&oTOuBmA#~6?etr{pPAIT6r7Gl5%sOxW{al)G(^dh(ciuofcbJQ(9Mb!Pbj?iXtv$12&wObrw>R zfj)N;uMlvWlU;L1D!9;JLOJ<0T7$^AG51S;Ah;9QrRNhfhR5HEyH6|Ur=}@v_7CYq zl1pTiee(zl3E?fx!Dj+XC)G zK37{xB!y#!EtfxW>^Hx-nn=WtDWvfv84nC_yVL2@4UVbEAYIto;TJHp9#&AWS=yP? zt`t1=;~FWk#X+o4eVm-N&+WQJQ!Gz7iQOb7HLL75uh#S0fn@~w^Gg- z7#JEmMJYtE&o@uw=V}D|^Ak~()V8L=jz&;dAN9nB=M>!ueGU(=hrh_>r=g~;>0bUj zb9$k=vlDXiVZ^rY7q<(2 z9hw3c2_$!|wP-FK6LOdxm}_ZG2uVtIFfG5y@qGJJ3V*JV+c-L6lu_a1HL1513Kabs zFJ+=9Fq@7puh=YquggoB#E7o4EuHeAdX!bW=Hh@)&M!8pZ@6;oppt2m z+i$NBgwYsnRA4d{&A^=iwKZ;pSD?M#HZKUb?xy6rW&G({h#r@!`G z;)&keiNo|Y^Jk(G*I3#TYvrrc2mFb3eA49gae#xz2OdRfa4(1Vri?DkZKV7C6PukN zO&&ue9%H+FHxSL8&l1V2!#d@RJcQiM)9*>YM*kEt4ff|9ZyRPhhmyc*`iF`OoayQM z6-w!nHB}RPWr+yJA~+7;w%zu~UODS&6lL%1C7^vD#OwfUvR$`V0OQ(eHVle1hbDW|w_yH>E~%K?|-P*|4A7hPmoDzeKSS5@iCX zA6hK&7x*lU5JWD*cU~wQy>DyBA_dQGe71|9JzfgXLKVO5(?3S+E|v)bv@D^kFrb=c zCc+{CTQ&;lMt7aWqbV)KzxOWFs@$;mplbY=;PB3dNWA%=h~ufXC-lIL{nn;ifVJFh zL^yn@o7DF;M@rx@5I)@6c$4E%s^@{}Vj?c(&lG*(eqOgRtG&s$F_i@MAfHBJe6<_KOWnOSY<#hC-7xA+^;Ykx>jRdGMG3Cvh zJ(_(rzzSn`^iNV2Ti5o>3%BA_3aX0No{DiqM(egV?aWMZK4)Qd$Xf~?{={p`aN z^%hkS%NS3)L zX<{N!+U#sn+_C+g!=JSpV>(QPVhQv*e}^DCD%a`DSVzZ z``Uxkr2?mBucLQwGh$7AEy?8?s%U?%RNf}H+7)(B@W#b57gm#4WUqW_uW zFR;**J6ln`{}~{*D*Xz?@o~cRIG@`iB@>$FKod=s@$ahzeOxp7=1%04!R-G zM67qC4-IO)8cb0wDBgG<;6HSIV=-^4yPu>aEZ$^|Gn^*;eRzhm+&VYe=`SM=M_6o0 z1^?*aeIs-+j`v+Oe?*>;OtJQR8*=qyFMX)p_)(S3r$k^ZQmr6RvamRvu@y<7#qC~V zmmumE&KSpb%f|$_m7B#=F5^DM)?4Edd;#XN>A%Zo()Z?OJTywX=0&@tt6fy5Mw!zy zDrLBP4CFLg<#W|3*E7*G(B!{C6VgaEbt?rA%PV+CcnuFyQ*odVt(3|8-#>ZI$XzfT zSHut+pHh?nKvrUyytE3tZnKAh7;gAP-Q^`a#*5q2uTy4o@aDvP9#?o@eY zKxEBLh;jy?K;zaL*vVrk%_CDgLCVak6REj|m|>E#5>%re;|9EZ#7U`#!@GmU#wRUH z(vcpq0=$N@K7W#_+zKJ-OS!%`w|uqRm!*9RrGJ+e{XcSBItx(>4s0FMG-99>1t*J* z$TNK0nh{LJ*P9~W)-R*eML;-cug%%fcg4O1+Aq9t>&T#Ev9k+9&wLU1yRB(vOa2|q zmFLS}Z7r(;;8!g2%pTy0610FAY~UdK10nXZP2q^TY>TCTC(8+yX@=!2K9H1WSg5yq z?R;q>0?k^#iR9!t%a#=|V|5XlJWxF{WhQk47dVxzInToLb9*!p?bOt;AxhR2&;kGe zhl#?NTVi`FY`aKe&d!w5h+HX)$Qyo=@y5{ese>(d&MwMhf?^$)KD>GDsj2|qs6A>wu_>AqH59X4|t z$__}pk?H+CIUcbn!pbskipbJoHFw+kHJgk-tma>+(9WVrsFaoX=3Z`kc;PJRrltv9 z4u3J&fUzjZ`7TL_D}LR~Z4+KZ8<>fC>0Ro3kiHGCBX^jbH7^X6=baKv`zGy_=hODZ z_D>8rx12vBXk^i;E)S>#opkAjFMq~!NOt5kC*xV@XOTbFHRTw@nF7l=@?wC{m55DzP>!=F)CZB}7p@#klI*E?UuR;J2Uf%eImoc|rGy5j$Ry#qI<@J!7N6Dk9~ za6DFG{n}QDJvDRkkSS`#)|ziZvO^qn+90Xcmjmi)^8I&Bt(uR(!D{rw7JolIBwhRV z?7MP+D)73HFf98#S^bswPHd7+>89K1<}5S3MSN@PaPz@=P{PiyY5z~W@8G%Bf9pB=TEKqiSmC#0$LZz+d??=s~V@56=5Qxa6DC|XwUy!&a+ z)L%o1SiCt_YgCwt&M4Uj**KieRx{CIMIk6bh{X+}SLJ`MjB$#v$#?hkJQC*K!@JBO zJG*}Th@y`+h||x0AV^!XaPE3_Z9|!;AUD!%b@;E+mxZp8AW7`$(NW<+cs}!=xSb~g z7XZt4%J@aowEf%Z-`tuz%ku!|>*qfyE9-XPMg@ZAvxjyTnPs_Kr5>g(nDh{*TxpZD z2zvUW;cRgng=FcJx95dXjlAMbVzi5#0`H{WJ^^tAe|BL1b=fj!9lKtX+UG{kc-&v@ z4`nF%oGt~MKV7(^_3(Phg;c)%qTg-MU}4{&G$)%?8uaS_azxdSjrx9kELJf&YffE@ zp!II8fgqBl0`UzlFBpzbbsH{^w7gFd7XyE_b*GN^&4$@YK&76C7OnMBuea+t2V+$q z7AYK(z4`#l!yI9h=&7`L?a~)7YKc3%mWggep_CQX->2BX8nb{AM?uz<;zDs&aFBRQTCd)VfA(dUWGOgO)>E)$ooQ4ULRvA^zXX zRfusC7gtWTX|#aH-N7c^@|(`n+|8z(=xCf?QyOaCyOLK`6rw!zIGs9IVi%+}MMmJKwhiUF|9p?!pX1}{(2NH`~K z0?p0Dz-6{-``JpW!qaFQzy<{9y$-A4o=uvCs|6qLOj_pJ3JdJ`L06Fu#qMFiqBE@mt5R_IvXM- z#bZ>hC2HQ!M7cCs_LK4Vgmdgtor09K zdXXeJnVei@(|RYBr-#(x;?D!|`*VNu`tYZIufHaZ)kO7b>3^^H?LdLyjr*|94HY}% zOM)-Q0ei=nyZP#uzh~h=h7g_KXpYx?y^|O!6b0#VwJ(I3A};F1yAi*zB~9JP&dv>R zbxYcYb{-S_6*W>-&R&pD<`2cDK0neOJMLwQZ>Zl08$xrFgTjg&u0m$X&WBY@eu9lW zRmut(%FZ-OB4)>@`9kS)bjku@eoC>W94E<@7SNK?=jb__78g4Xic|I3K3NDn_8u;u z_V66PGtqbh;J^I~Dj@^st_|Rv`}~R9P|WR=jH`G?H<@0M`dFDrL7`66vUd&%5jew6ZGnwHE7AOwIZ}`~-EFF1)|3XQ zJ%f91JpYb1nCbUH(l5jwJ!(v9-iR^o6jK+BU8c)wi$O0dm))6qNlBi-tKO64Y2?- zB*>RPqszM>r6N=D5HTLT6Nh#F2C?(6`<1(aU1pD(qUCY%^C!@80kUa2S9MApe9-*f zZ>S^Nh|lszD)%QLA+oCn6$*;8G;k&VBOrEqVIQrlXwfpJ>9OTUSG@x1=-wYJ-n2yP zv=lc@jqlBr%%r#642$n*F8|vXRW&_ ze8IIY^ZXK(ukaNUkC|DA%y`0enE`@>JND%PVPwwlS2f8}^6@zmI!35_?7Qdg0AGAp zvmvp8pZQbRyWrpfEh02CczXIV5u9x`OZ|B9S5M5|x>g{i=-xmC_X}~pM+ZHS3M9_i z3G0cMk~IzR486Pg@mqVM%eX3KeA2#YmpHm&-v3+l-Niv1GCrC2qt#~bHXlopK{!k| zI2q5f?jEg6%{TIzYq)!pC#Wzs>Q371QuwOtlD@Pt6r~|F=BcBlo6^PEw(fofNwB+z za;Z+2D1IYNjDhrTN$!YATVW7Hm-O$rwU2vJlV!;@Z@qu`Uh}yH09N{h4}xMdE4HYx z!*?&f7$_;@(Pyv3sLX-oNZfRor5Nq)tF$lM3Ygh0ZbWStaisBBM7p+Dbve8ZiA=xh zWe!7SWmUnfQJww;tl{AnxYbAm@eLD0-*|HJ%#CUTh3MCh@)h7zubj$$7Yt<_8taB; zEr2FR**rhy83F zOO`D+Id5Qx&5k~S0A^Zm1gg4wyP~Vz1yCbash%V5dMJx1#!zmsK1k6gzT_!>laUH; z2;2i)Q2J&1(F{(Ur-v0{bpmva?KDmZdIH zJSebg)vxmNO#Q3_2DE??y`fg3eoQddlD+*PMVs$%uxHC~m+`|hp}%dO#Q4mPIJ!KJDgU|I;2=`Mi0_u>KG61Cf$uPLRhL-|JB?~^M|AZ>-}K` zz$ln-F-RMru+JhU&B18}cYpg_V698SFw=1?8bnG~_QNyvfzkNZU6$lOrCyF}(B>Y2ucF7QK(VpgA_Gb)u zEwS=wFo~^PjnUc3a3|Es9>eY5+4kF+m^qxeo6_0(x9@b-T}v-bfd=bcBjkV}1VHdi zn0D9RD9Q8+C}#!l9h6lRM*OSEuymKg%pr#hggJ-hK8h4PJm%O=g_`iY*VGDx%1*90wqv_=BP<_&j@Bx}<=sUcQD37CuJ3s8o#-2SV;uX3kE*l9BWQoob98%0Vn?ZwK=M(wLs!#aX2016M!F>s&?FG22rN|;} zZLj~n^$90Q6viRlkCsy7Au~M=9G~CB#DaMTD2lK3!>7{{NN=*nUq(IUcwL9w_5hgM zqI@a7PN-7-erWGQD5NzG#mG=LwL$ouRA-Cty&+;27!;xF$2pkDxeZ%rtxVn(-!UHa zxYHbQi;#aIRswtv+^i5T(=m74gCaY!NlB=V&RvJ@YSJTE*2e_QgrlyWgVK@DbvL&c z#c4qTqV0N$Qx~<0S0^%NicA^T?$XZm?8Z%*_5y5ojgJ8T0AFNk)obav#frJ@rzk#5 zJ9jf^)30`K_WOYC&$NR?ej)=L-5^iu-8W7hUi@+&y-okkmcpqEfDZ{(dO-D6d*HbZ zboI+DO9!LpipYWQvNxnawM!HtrIwy8aX?C-@}K2kBe}Xh;&m6)n<3Y3b(Q}8Z_MOI zZ*QY~JN|))(oU%}1OCJLCu9dT)+1%KAX@+h`c%Iktv_AdH_`97&ROm0XFf^4<{XK~ zaPOIV>j2i_4D$2+%D*0%;un)7C1s9VsgLFfiT3O$Cs*!?zD}F%1@Aq)z((CQWAR?q zm00$&_j%<$IM}N?Q%D{yU^L(^4K9)o+uccHsHs)KiC%3EZnz<2`QiG|EF+HmkRTLB z(6HqNJTo0+no&bMfj~R%#hjmCC(5+5b~GM+&KqY^0~<9mR?JE9{|AHp?LwiB%j~c~ zg$Mxy)Nnplm?0WDXpkiqP{`3`{o_Cf7Mn0=k;L^Zr`5C;P9CUp_hN4^)d_R;wfZq+ z-fN6kaE|2uG=Xhg2(*{HdQa z2b@T?Dh2zIBCi5;)a_21_{XJJJ zfRNt1g{avm#`i8u1ykMk=Bt^w5F;8TYM5;6nN4g; zTtd8)yL;08r&Z8 zOa-if@cgK7gMP?zVMsUM-%YF3LNR!m*g(q(@hfM0ITu9b`1&RaPENiZAL;J+`j*6c z+385`MAfp>i+2r((m)#VK~l8f>0XCRr~#XO^%z4TS#*7u3j6lA&m>V5CQj3}q-89y zlpOG((UqU;`{iTT*2zz@vIbD`W9WKiif50Owt0QIQ}7@eC`!~2Bl8KtrrR{!&sDmm z{*80?G}g7V^wCU)(9*8$nZ@@;XatZXDLi`MmtEN3c$0NsN??D1$Hm2L8m3eD$btjR-px&yf6 zF?szm<)fvO)dpXmz0hK@=(bH>XR8^raXS5SgK#VRg#z0L(g>5FPwWplzlSU4NFA$( zWnK;tfA~yb^JRBbB)m2JQ_Ap&Shz6p2Pss7PtS0k|1ttonfIuMe&&c55F9>Ax1aL9p6AXe Q0tz#Dy85}Sb4q9e0EL(iEdT%j literal 0 HcmV?d00001 diff --git a/src/react-native-app/ios/reactnativeapp/Info.plist b/src/react-native-app/ios/reactnativeapp/Info.plist new file mode 100644 index 0000000000..ef9c9c0e39 --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/Info.plist @@ -0,0 +1,77 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Astronomy Shop App + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + myapp + io.opentelemetry.reactnativeapp + + + + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + NSUserActivityTypes + + $(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + arm64 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Automatic + UIViewControllerBasedStatusBarAppearance + + + diff --git a/src/react-native-app/ios/reactnativeapp/PrivacyInfo.xcprivacy b/src/react-native-app/ios/reactnativeapp/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..5bb83c5d43 --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/PrivacyInfo.xcprivacy @@ -0,0 +1,48 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + 0A2A.1 + 3B52.1 + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + 85F4.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/src/react-native-app/ios/reactnativeapp/SplashScreen.storyboard b/src/react-native-app/ios/reactnativeapp/SplashScreen.storyboard new file mode 100644 index 0000000000..ec5457492c --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/SplashScreen.storyboard @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/react-native-app/ios/reactnativeapp/Supporting/Expo.plist b/src/react-native-app/ios/reactnativeapp/Supporting/Expo.plist new file mode 100644 index 0000000000..7fa791181b --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/Supporting/Expo.plist @@ -0,0 +1,12 @@ + + + + + EXUpdatesCheckOnLaunch + ALWAYS + EXUpdatesEnabled + + EXUpdatesLaunchWaitMs + 0 + + diff --git a/src/react-native-app/ios/reactnativeapp/main.m b/src/react-native-app/ios/reactnativeapp/main.m new file mode 100644 index 0000000000..25181b6ccb --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/main.m @@ -0,0 +1,10 @@ +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} + diff --git a/src/react-native-app/ios/reactnativeapp/noop-file.swift b/src/react-native-app/ios/reactnativeapp/noop-file.swift new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/react-native-app/ios/reactnativeapp/reactnativeapp-Bridging-Header.h b/src/react-native-app/ios/reactnativeapp/reactnativeapp-Bridging-Header.h new file mode 100644 index 0000000000..f8f0758cd7 --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/reactnativeapp-Bridging-Header.h @@ -0,0 +1,5 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// diff --git a/src/react-native-app/ios/reactnativeapp/reactnativeapp.entitlements b/src/react-native-app/ios/reactnativeapp/reactnativeapp.entitlements new file mode 100644 index 0000000000..a4942dca99 --- /dev/null +++ b/src/react-native-app/ios/reactnativeapp/reactnativeapp.entitlements @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/react-native-app/metro.config.js b/src/react-native-app/metro.config.js new file mode 100644 index 0000000000..40ddc74b57 --- /dev/null +++ b/src/react-native-app/metro.config.js @@ -0,0 +1,16 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Learn more https://docs.expo.io/guides/customizing-metro +/* eslint-env node */ + +const { getDefaultConfig } = require("expo/metro-config"); + +/** @type {import('expo/metro-config').MetroConfig} */ +const config = getDefaultConfig(__dirname); + +// Needed so that we can make use of the alternative @opentelemetry/semantic-conventions/incubating export +// See: https://reactnative.dev/blog/2023/06/21/package-exports-support +config.resolver.unstable_enablePackageExports = true; + +module.exports = config; diff --git a/src/react-native-app/package-lock.json b/src/react-native-app/package-lock.json new file mode 100644 index 0000000000..f1016955c9 --- /dev/null +++ b/src/react-native-app/package-lock.json @@ -0,0 +1,19603 @@ +{ + "name": "reactnativeapp", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "reactnativeapp", + "version": "1.0.0", + "dependencies": { + "@expo/metro-config": "^0.19.4", + "@expo/vector-icons": "^14.0.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^1.28.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.52.0", + "@opentelemetry/instrumentation": "^0.55.0", + "@opentelemetry/instrumentation-fetch": "^0.55.0", + "@opentelemetry/instrumentation-xml-http-request": "^0.55.0", + "@opentelemetry/resources": "^1.28.0", + "@opentelemetry/sdk-trace-base": "^1.28.0", + "@opentelemetry/sdk-trace-web": "^1.28.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@react-native-async-storage/async-storage": "^2.0.0", + "@react-navigation/native": "^6.0.2", + "@tanstack/react-query": "4.36.1", + "@types/react-native-get-random-values": "^1.8.2", + "@types/uuid": "^10.0.0", + "expo": "~51.0.14", + "expo-constants": "~16.0.2", + "expo-font": "~12.0.7", + "expo-linking": "~6.3.1", + "expo-router": "~3.5.16", + "expo-splash-screen": "~0.27.5", + "expo-status-bar": "~1.12.1", + "expo-system-ui": "~3.0.6", + "expo-web-browser": "~13.0.3", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hook-form": "^7.53.2", + "react-native": "0.74.2", + "react-native-device-info": "^11.1.0", + "react-native-gesture-handler": "~2.16.1", + "react-native-get-random-values": "^1.11.0", + "react-native-reanimated": "~3.10.1", + "react-native-root-toast": "^3.6.0", + "react-native-safe-area-context": "4.10.1", + "react-native-screens": "3.31.1", + "react-native-toast-message": "^2.2.1", + "react-native-web": "~0.19.10", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@types/jest": "^29.5.12", + "@types/react": "~18.2.45", + "@types/react-test-renderer": "^18.0.7", + "eslint": "^8.57.0", + "eslint-config-expo": "~7.1.2", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "jest": "^29.2.1", + "jest-expo": "~51.0.1", + "prettier": "^3.3.3", + "react-test-renderer": "18.2.0", + "ts-proto": "1.181.1", + "typescript": "~5.3.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", + "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz", + "integrity": "sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "peer": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz", + "integrity": "sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "peer": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", + "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-flow": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", + "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz", + "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-flow-strip-types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", + "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", + "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@expo/bunyan": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", + "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", + "dependencies": { + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@expo/bunyan/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/cli": { + "version": "0.18.31", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.31.tgz", + "integrity": "sha512-v9llw9fT3Uv+TCM6Xllo54t672CuYtinEQZ2LPJ2EJsCwuTc4Cd2gXQaouuIVD21VoeGQnr5JtJuWbF97sBKzQ==", + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "0.0.5", + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/devcert": "^1.0.0", + "@expo/env": "~0.3.0", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@expo/metro-config": "0.18.11", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "^1.5.0", + "@expo/plist": "^0.1.0", + "@expo/prebuild-config": "7.0.9", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "^1.7.2", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.74.85", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.0.7", + "bplist-parser": "^0.3.1", + "cacache": "^18.0.2", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "fast-glob": "^3.3.2", + "find-yarn-workspace-root": "~2.0.0", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "glob": "^7.1.7", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "https-proxy-agent": "^5.0.1", + "internal-ip": "4.3.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "lodash.debounce": "^4.0.8", + "md5hex": "^1.0.0", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "open": "^8.3.0", + "ora": "3.4.0", + "picomatch": "^3.0.1", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.2", + "semver": "^7.6.0", + "send": "^0.18.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "temp-dir": "^2.0.0", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" + } + }, + "node_modules/@expo/cli/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/cli/node_modules/@expo/config": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/@expo/cli/node_modules/@expo/config-plugins": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.11.tgz", + "integrity": "sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==", + "dependencies": { + "@expo/config-types": "^51.0.3", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/cli/node_modules/@expo/config-plugins/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/cli/node_modules/@expo/config-types": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" + }, + "node_modules/@expo/cli/node_modules/@expo/config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/cli/node_modules/@expo/env": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" + } + }, + "node_modules/@expo/cli/node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/cli/node_modules/@expo/metro-config": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.11.tgz", + "integrity": "sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~9.0.0-beta.0", + "@expo/env": "~0.3.0", + "@expo/json-file": "~8.3.0", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^7.2.3", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" + } + }, + "node_modules/@expo/cli/node_modules/@expo/metro-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/cli/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@expo/cli/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@expo/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@expo/cli/node_modules/fs-extra/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/cli/node_modules/fs-extra/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@expo/cli/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/cli/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/cli/node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, + "node_modules/@expo/config": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.4.tgz", + "integrity": "sha512-pkvdPqKTaP6+Qvc8aTmDLQ9Dfwp98P1GO37MFKwsF5XormfN/9/eN8HfIRoM6d3uSIVKCcWW3X2yAEbNmOyfXw==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~9.0.0", + "@expo/config-types": "^52.0.0", + "@expo/json-file": "^9.0.0", + "deepmerge": "^4.3.1", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "resolve-workspace-root": "^2.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.35.0" + } + }, + "node_modules/@expo/config-plugins": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.9.tgz", + "integrity": "sha512-pbgbY3SwCMwkijhfe163J05BrTx4MqzeaV+nVgUMs7vRcjHY1tfM57Pdv6SPtgeDvZ8fvdXFXXzkJva+a7C9Bw==", + "dependencies": { + "@expo/config-types": "^52.0.0", + "@expo/json-file": "~9.0.0", + "@expo/plist": "^0.2.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.5", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/config-types": { + "version": "52.0.1", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.1.tgz", + "integrity": "sha512-vD8ZetyKV7U29lR6+NJohYeoLYTH+eNYXJeNiSOrWCz0witJYY11meMmEnpEaVbN89EfC6uauSUOa6wihtbyPQ==" + }, + "node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/config/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/devcert": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", + "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^10.4.2", + "lodash": "^4.17.21", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/env": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.0.tgz", + "integrity": "sha512-g2JYFqck3xKIwJyK+8LxZ2ENZPWtRgjFWpeht9abnKgzXVXBeSNECFBkg+WQjQocSIdxXhEWM6hz4ZAe7Tc4ng==", + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", + "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/image-utils/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@expo/image-utils/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.0.tgz", + "integrity": "sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.3", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.4.tgz", + "integrity": "sha512-2SWwYN8MZvMIRawWEr+1RBYncitPwu2VMACRYig+wBycJ9fsPb6BMVmBYi+3MHDUlJHNy/Bqfw++jn1eqBFETQ==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~10.0.4", + "@expo/env": "~0.4.0", + "@expo/json-file": "~9.0.0", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.27.0", + "minimatch": "^3.0.4", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" + } + }, + "node_modules/@expo/metro-runtime": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.3.tgz", + "integrity": "sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==", + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/@expo/osascript": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.4.tgz", + "integrity": "sha512-LcPjxJ5FOFpqPORm+5MRLV0CuYWMthJYV6eerF+lQVXKlvgSn3EOqaHC3Vf3H+vmB0f6G4kdvvFtg40vG4bIhA==", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.6.1.tgz", + "integrity": "sha512-4rT46wP/94Ll+CWXtFKok1Lbo9XncSUtErFOo/9/3FVughGbIfdG4SKZOAWIpr9wxwEfkyhHfAP9q71ONlWODw==", + "dependencies": { + "@expo/json-file": "^9.0.0", + "@expo/spawn-async": "^1.7.2", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.8", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "resolve-workspace-root": "^2.0.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@expo/package-manager/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@expo/package-manager/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@expo/package-manager/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@expo/package-manager/node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@expo/package-manager/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" + }, + "node_modules/@expo/package-manager/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@expo/plist": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.0.tgz", + "integrity": "sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.9.tgz", + "integrity": "sha512-9i6Cg7jInpnGEHN0jxnW0P+0BexnePiBzmbUvzSbRXpdXihYUX2AKMu73jgzxn5P1hXOSkzNS7umaY+BZ+aBag==", + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "0.74.85", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" + }, + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/config": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/config-plugins": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.11.tgz", + "integrity": "sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==", + "dependencies": { + "@expo/config-types": "^51.0.3", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/config-types": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@expo/prebuild-config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/prebuild-config/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/prebuild-config/node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "dependencies": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/rudder-sdk-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" + }, + "node_modules/@expo/server": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.4.4.tgz", + "integrity": "sha512-q9ADBzMN5rZ/fgQ2mz5YIJuZ8gelQlhG2CQqToD+UvBLZvbaHCNxTTSs2KI1LzJvAaW5CWgWMatGvGF6iUQ0LA==", + "dependencies": { + "@remix-run/node": "^2.7.2", + "abort-controller": "^3.0.0", + "debug": "^4.3.4", + "source-map-support": "~0.5.21" + } + }, + "node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "dependencies": { + "cross-spawn": "^7.0.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/vector-icons": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz", + "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==", + "dependencies": { + "prop-types": "^15.8.1" + } + }, + "node_modules/@expo/xcpretty": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.28.0.tgz", + "integrity": "sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.55.0.tgz", + "integrity": "sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ==", + "dependencies": { + "@opentelemetry/api-logs": "0.55.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fetch": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fetch/-/instrumentation-fetch-0.55.0.tgz", + "integrity": "sha512-wkybQE85HzInYX2csZ4UuMlCIMCyGGHcNqL9TcoZgAZC2EuXFReTsLytoszknhcaX+P7UT9Ee3915t8KC6XP4w==", + "dependencies": { + "@opentelemetry/core": "1.28.0", + "@opentelemetry/instrumentation": "0.55.0", + "@opentelemetry/sdk-trace-web": "1.28.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-xml-http-request": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-xml-http-request/-/instrumentation-xml-http-request-0.55.0.tgz", + "integrity": "sha512-Wlz4LzDpBFxHpb24RAM6RoiGspJ7J16ux0Xw5KVLtK3zzpQaxMYEVF0XQNC61WJJa3tRNt3XRjiQ8mrXJZxVQg==", + "dependencies": { + "@opentelemetry/core": "1.28.0", + "@opentelemetry/instrumentation": "0.55.0", + "@opentelemetry/sdk-trace-web": "1.28.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation/node_modules/@opentelemetry/api-logs": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.55.0.tgz", + "integrity": "sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg==", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.28.0.tgz", + "integrity": "sha512-cIyXSVJjGeTICENN40YSvLDAq4Y2502hGK3iN7tfdynQLKWb3XWZQEkPc+eSx47kiy11YeFAlYkEfXwR1w8kfw==", + "dependencies": { + "@opentelemetry/core": "1.28.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.28.0.tgz", + "integrity": "sha512-ceUVWuCpIao7Y5xE02Xs3nQi0tOGmMea17ecBdwtCvdo9ekmO+ijc9RFDgfifMl7XCBf41zne/1POM3LqSTZDA==", + "dependencies": { + "@opentelemetry/core": "1.28.0", + "@opentelemetry/resources": "1.28.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-web": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-web/-/sdk-trace-web-1.28.0.tgz", + "integrity": "sha512-/QOIrJc/A/caKbA9voLua4isf///cjQKB6gomEzX2fL18TBqZhIkm9k2DpjlbtrQoYCJDZ9x7Phrec22aQGpQw==", + "dependencies": { + "@opentelemetry/core": "1.28.0", + "@opentelemetry/sdk-trace-base": "1.28.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-web/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@react-native-async-storage/async-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.0.tgz", + "integrity": "sha512-eAGQGPTAuFNEoIQSB5j2Jh1zm5NPyBRTfjRMfCN0W1OakC5WIB5vsDyIQhUweKN9XOE2/V07lqTMGsL0dGXNkA==", + "dependencies": { + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.65 <1.0" + } + }, + "node_modules/@react-native-community/cli": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.8.tgz", + "integrity": "sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==", + "dependencies": { + "@react-native-community/cli-clean": "13.6.8", + "@react-native-community/cli-config": "13.6.8", + "@react-native-community/cli-debugger-ui": "13.6.8", + "@react-native-community/cli-doctor": "13.6.8", + "@react-native-community/cli-hermes": "13.6.8", + "@react-native-community/cli-server-api": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "@react-native-community/cli-types": "13.6.8", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "rnc-cli": "build/bin.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native-community/cli-clean": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz", + "integrity": "sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ==", + "dependencies": { + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native-community/cli-config": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.8.tgz", + "integrity": "sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw==", + "dependencies": { + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "fast-glob": "^3.3.2", + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.8.tgz", + "integrity": "sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA==", + "dependencies": { + "serve-static": "^1.13.1" + } + }, + "node_modules/@react-native-community/cli-doctor": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.8.tgz", + "integrity": "sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA==", + "dependencies": { + "@react-native-community/cli-config": "13.6.8", + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-platform-apple": "13.6.8", + "@react-native-community/cli-platform-ios": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-hermes": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.8.tgz", + "integrity": "sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ==", + "dependencies": { + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6" + } + }, + "node_modules/@react-native-community/cli-platform-android": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.8.tgz", + "integrity": "sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw==", + "dependencies": { + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.2.4", + "logkitty": "^0.7.1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.8.tgz", + "integrity": "sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg==", + "dependencies": { + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.0.12", + "ora": "^5.4.1" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.8.tgz", + "integrity": "sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw==", + "dependencies": { + "@react-native-community/cli-platform-apple": "13.6.8" + } + }, + "node_modules/@react-native-community/cli-server-api": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.8.tgz", + "integrity": "sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg==", + "dependencies": { + "@react-native-community/cli-debugger-ui": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^6.2.2" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native-community/cli-tools": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.8.tgz", + "integrity": "sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ==", + "dependencies": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native-community/cli-tools/node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + }, + "node_modules/@react-native-community/cli-types": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.8.tgz", + "integrity": "sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA==", + "dependencies": { + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@react-native-community/cli/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@react-native-community/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native-community/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.84.tgz", + "integrity": "sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz", + "integrity": "sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw==", + "dependencies": { + "@react-native/codegen": "0.74.87" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-preset": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.87.tgz", + "integrity": "sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.74.87", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.74.87", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.87.tgz", + "integrity": "sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg==", + "dependencies": { + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz", + "integrity": "sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ==", + "dependencies": { + "@react-native-community/cli-server-api": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "@react-native/dev-middleware": "0.74.84", + "@react-native/metro-babel-transformer": "0.74.84", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "querystring": "^0.2.1", + "readline": "^1.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz", + "integrity": "sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz", + "integrity": "sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ==", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.84", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz", + "integrity": "sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz", + "integrity": "sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w==", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.85", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz", + "integrity": "sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz", + "integrity": "sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz", + "integrity": "sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw==", + "dependencies": { + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.74.84", + "hermes-parser": "0.19.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz", + "integrity": "sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw==", + "dependencies": { + "@react-native/codegen": "0.74.84" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.84.tgz", + "integrity": "sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.74.84", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.84.tgz", + "integrity": "sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==", + "dependencies": { + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/normalize-color": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", + "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", + "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==" + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz", + "integrity": "sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw==", + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.5.20", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz", + "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==", + "dependencies": { + "@react-navigation/elements": "^1.3.30", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/core": { + "version": "6.4.17", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.17.tgz", + "integrity": "sha512-Nd76EpomzChWAosGqWOYE3ItayhDzIEzzZsT7PfGcRFDgW5miHV2t4MZcq9YIK4tzxZjVVpYbIynOOQQd1e0Cg==", + "dependencies": { + "@react-navigation/routers": "^6.1.9", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.23", + "query-string": "^7.1.3", + "react-is": "^16.13.0", + "use-latest-callback": "^0.2.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@react-navigation/elements": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.31.tgz", + "integrity": "sha512-bUzP4Awlljx5RKEExw8WYtif8EuQni2glDaieYROKTnaxsu9kEIA515sXQgUDZU4Ob12VoL7+z70uO3qrlfXcQ==", + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/native": { + "version": "6.1.18", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.18.tgz", + "integrity": "sha512-mIT9MiL/vMm4eirLcmw2h6h/Nm5FICtnYSdohq4vTLA2FF/6PNhByM7s8ffqoVfE5L0uAa6Xda1B7oddolUiGg==", + "dependencies": { + "@react-navigation/core": "^6.4.17", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.1.23" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-navigation/native-stack": { + "version": "6.9.26", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz", + "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==", + "dependencies": { + "@react-navigation/elements": "^1.3.30", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/routers": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz", + "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==", + "dependencies": { + "nanoid": "^3.1.23" + } + }, + "node_modules/@remix-run/node": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.14.0.tgz", + "integrity": "sha512-ou16LMJYv0ElIToZ6dDqaLjv1T3iBEwuJTBahveEA8NkkACIWODJ2fgUYf1UKLMKHVdHjNImLzS37HdSZY0Q6g==", + "dependencies": { + "@remix-run/server-runtime": "2.14.0", + "@remix-run/web-fetch": "^4.4.2", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie-signature": "^1.1.0", + "source-map-support": "^0.5.21", + "stream-slice": "^0.1.2", + "undici": "^6.11.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", + "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@remix-run/server-runtime": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.14.0.tgz", + "integrity": "sha512-9Th9UzDaoFFBD7zA5mRI1KT8JktFLN4ij9jPygrKBhG/kYmNIvhcMtq9VyjcbMvFK5natTyhOhrrKRIHtijD4w==", + "dependencies": { + "@remix-run/router": "1.21.0", + "@types/cookie": "^0.6.0", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie": "^0.6.0", + "set-cookie-parser": "^2.4.8", + "source-map": "^0.7.3", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/web-blob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz", + "integrity": "sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==", + "dependencies": { + "@remix-run/web-stream": "^1.1.0", + "web-encoding": "1.1.5" + } + }, + "node_modules/@remix-run/web-fetch": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz", + "integrity": "sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==", + "dependencies": { + "@remix-run/web-blob": "^3.1.0", + "@remix-run/web-file": "^3.1.0", + "@remix-run/web-form-data": "^3.1.0", + "@remix-run/web-stream": "^1.1.0", + "@web3-storage/multipart-parser": "^1.0.0", + "abort-controller": "^3.0.0", + "data-uri-to-buffer": "^3.0.1", + "mrmime": "^1.0.0" + }, + "engines": { + "node": "^10.17 || >=12.3" + } + }, + "node_modules/@remix-run/web-file": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz", + "integrity": "sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==", + "dependencies": { + "@remix-run/web-blob": "^3.1.0" + } + }, + "node_modules/@remix-run/web-form-data": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz", + "integrity": "sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==", + "dependencies": { + "web-encoding": "1.1.5" + } + }, + "node_modules/@remix-run/web-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz", + "integrity": "sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==", + "dependencies": { + "web-streams-polyfill": "^3.1.1" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", + "dependencies": { + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=14.15" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz", + "integrity": "sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz", + "integrity": "sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==", + "dependencies": { + "@tanstack/query-core": "4.36.1", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hammerjs": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", + "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.64", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz", + "integrity": "sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.2.79", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", + "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-native-get-random-values": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/react-native-get-random-values/-/react-native-get-random-values-1.8.2.tgz", + "integrity": "sha512-CmtnfZnHKkVupG71SI9S7DDqkV6dtxxNIAzh2r1F1/tB8vg2weBtLhHmcruMIwp9Y69IZZ3DwJ0BhRpsbj42QA==" + }, + "node_modules/@types/react-test-renderer": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz", + "integrity": "sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "dependencies": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/@web3-storage/multipart-parser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", + "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "deprecated": "this version is no longer supported, please update to at least 0.8.*", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" + }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-react-compiler": { + "version": "0.0.0-experimental-592953e-20240517", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0-experimental-592953e-20240517.tgz", + "integrity": "sha512-OjG1SVaeQZaJrqkMFJatg8W/MTow8Ak5rx2SI0ETQBO1XvOk/XZGMbltNCPdFJLKghBYoBjC+Y3Ap/Xr7B01mA==", + "dependencies": { + "@babel/generator": "7.2.0", + "@babel/types": "^7.19.0", + "chalk": "4", + "invariant": "^2.2.4", + "pretty-format": "^24", + "zod": "^3.22.4", + "zod-validation-error": "^2.1.0" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/@babel/generator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.0.tgz", + "integrity": "sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==", + "dependencies": { + "@babel/types": "^7.2.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/babel-plugin-react-compiler/node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dependencies": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-plugin-react-compiler/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.13", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz", + "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==" + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-expo": { + "version": "11.0.15", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-11.0.15.tgz", + "integrity": "sha512-rgiMTYwqIPULaO7iZdqyL7aAff9QLOX6OWUtLZBlOrOTreGY1yHah/5+l8MvI6NVc/8Zj5LY4Y5uMSnJIuzTLw==", + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "0.74.87", + "babel-plugin-react-compiler": "0.0.0-experimental-592953e-20240517", + "babel-plugin-react-native-web": "~0.19.10", + "react-refresh": "^0.14.2" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==", + "dependencies": { + "stream-buffers": "~2.2.0" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-anything": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", + "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/component-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-in-js-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "dependencies": { + "hyphenate-style-name": "^1.0.3" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true + }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==" + }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecated-react-native-prop-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz", + "integrity": "sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==", + "dependencies": { + "@react-native/normalize-color": "*", + "invariant": "*", + "prop-types": "*" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dprint-node": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.8.tgz", + "integrity": "sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.61", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.61.tgz", + "integrity": "sha512-CcRGSBCBB6L9c3PBJWYYrBo6Bzeoi+GZTKvtuRtooJGWsINk+mOInZWcssU35zDTAwreVcrMimc9aMyPpehRNw==" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-expo": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-expo/-/eslint-config-expo-7.1.2.tgz", + "integrity": "sha512-WxrDVNklN43Op0v3fglQfzL2bC7vqacUq9oVwJcGCUEDzdM7kGOR6pfEJiz3i3dQv3cFjHtct0CFEExep5c/dA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-expo": "^0.0.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0" + }, + "peerDependencies": { + "eslint": ">=8.10" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-expo": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-expo/-/eslint-plugin-expo-0.0.1.tgz", + "integrity": "sha512-dNri81vunJ3T+N1YWWxjLU6ux6KiukwZ4ECXCOPp8hG7M4kuvPAb9YQSIM63AT0pbtfYH/a6htikhaQcRPjhRA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "^7.2.0", + "@typescript-eslint/utils": "^7.2.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==" + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expo": { + "version": "51.0.39", + "resolved": "https://registry.npmjs.org/expo/-/expo-51.0.39.tgz", + "integrity": "sha512-Cs/9xopyzJrpXWbyVUZnr37rprdFJorRgfSp6cdBfvbjxZeKnw2MEu7wJwV/s626i5lZTPGjZPHUF9uQvt51cg==", + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.18.31", + "@expo/config": "9.0.4", + "@expo/config-plugins": "8.0.11", + "@expo/metro-config": "0.18.11", + "@expo/vector-icons": "^14.0.3", + "babel-preset-expo": "~11.0.15", + "expo-asset": "~10.0.10", + "expo-file-system": "~17.0.1", + "expo-font": "~12.0.10", + "expo-keep-awake": "~13.0.2", + "expo-modules-autolinking": "1.11.3", + "expo-modules-core": "1.12.26", + "fbemitter": "^3.0.0", + "whatwg-url-without-unicode": "8.0.0-3" + }, + "bin": { + "expo": "bin/cli" + } + }, + "node_modules/expo-asset": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-10.0.10.tgz", + "integrity": "sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A==", + "dependencies": { + "expo-constants": "~16.0.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-constants": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-16.0.2.tgz", + "integrity": "sha512-9tNY3OVO0jfiMzl7ngb6IOyR5VFzNoN5OOazUWoeGfmMqVB5kltTemRvKraK9JRbBKIw+SOYLEmF0sEqgFZ6OQ==", + "dependencies": { + "@expo/config": "~9.0.0", + "@expo/env": "~0.3.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-constants/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/expo-constants/node_modules/@expo/config": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/expo-constants/node_modules/@expo/config-plugins": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.11.tgz", + "integrity": "sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==", + "dependencies": { + "@expo/config-types": "^51.0.3", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/expo-constants/node_modules/@expo/config-types": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" + }, + "node_modules/expo-constants/node_modules/@expo/env": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" + } + }, + "node_modules/expo-constants/node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/expo-constants/node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/expo-constants/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/expo-constants/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/expo-constants/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-constants/node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expo-file-system": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-17.0.1.tgz", + "integrity": "sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-font": { + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-12.0.10.tgz", + "integrity": "sha512-Q1i2NuYri3jy32zdnBaHHCya1wH1yMAsI+3CCmj9zlQzlhsS9Bdwcj2W3c5eU5FvH2hsNQy4O+O1NnM6o/pDaQ==", + "dependencies": { + "fontfaceobserver": "^2.1.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-keep-awake": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz", + "integrity": "sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-linking": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.3.1.tgz", + "integrity": "sha512-xuZCntSBGWCD/95iZ+mTUGTwHdy8Sx+immCqbUBxdvZ2TN61P02kKg7SaLS8A4a/hLrSCwrg5tMMwu5wfKr35g==", + "dependencies": { + "expo-constants": "~16.0.0", + "invariant": "^2.2.4" + } + }, + "node_modules/expo-modules-autolinking": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.11.3.tgz", + "integrity": "sha512-oYh8EZEvYF5TYppxEKUTTJmbr8j7eRRnrIxzZtMvxLTXoujThVPMFS/cbnSnf2bFm1lq50TdDNABhmEi7z0ngQ==", + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/expo-modules-core": { + "version": "1.12.26", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.12.26.tgz", + "integrity": "sha512-y8yDWjOi+rQRdO+HY+LnUlz8qzHerUaw/LUjKPU/mX8PRXP4UUPEEp5fjAwBU44xjNmYSHWZDwet4IBBE+yQUA==", + "dependencies": { + "invariant": "^2.2.4" + } + }, + "node_modules/expo-router": { + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.5.24.tgz", + "integrity": "sha512-wFi+PIUrOntF5cgg0PgBMlkxEZlWedIv5dWnPFEzN6Tr3A3bpsqdDLgOEIwvwd+pxn5DLzykTmg9EkQ1pPGspw==", + "dependencies": { + "@expo/metro-runtime": "3.2.3", + "@expo/server": "^0.4.0", + "@radix-ui/react-slot": "1.0.1", + "@react-navigation/bottom-tabs": "~6.5.7", + "@react-navigation/native": "~6.1.6", + "@react-navigation/native-stack": "~6.9.12", + "expo-splash-screen": "0.27.7", + "react-native-helmet-async": "2.0.4", + "schema-utils": "^4.0.1" + }, + "peerDependencies": { + "@react-navigation/drawer": "^6.5.8", + "expo": "*", + "expo-constants": "*", + "expo-linking": "*", + "expo-status-bar": "*", + "react-native-reanimated": "*", + "react-native-safe-area-context": "*", + "react-native-screens": "*" + }, + "peerDependenciesMeta": { + "@react-navigation/drawer": { + "optional": true + }, + "@testing-library/jest-native": { + "optional": true + }, + "react-native-reanimated": { + "optional": true + } + } + }, + "node_modules/expo-splash-screen": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.27.7.tgz", + "integrity": "sha512-s+eGcG185878nixlrjhhLD6UDYrvoqBUaBkIEozBVWFg3pkdsKpONPiUAco4XR3h7I/9ODq4quN28RJLFO+s0Q==", + "dependencies": { + "@expo/prebuild-config": "7.0.9" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-status-bar": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.12.1.tgz", + "integrity": "sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA==" + }, + "node_modules/expo-system-ui": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-3.0.7.tgz", + "integrity": "sha512-KAs72F5JKhdIfPR9ZNVlRubTPK9uUuevPy5oYEp12xNEzSQcjZKvypH5NpwJuNWkXzrp3n3vZ+3pXsudA7J3KA==", + "dependencies": { + "@react-native/normalize-colors": "0.74.85", + "debug": "^4.3.2" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-web-browser": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-13.0.3.tgz", + "integrity": "sha512-HXb7y82ApVJtqk8tManyudtTrCtx8xcUnVzmJECeHCB0SsWSQ+penVLZxJkcyATWoJOsFMnfVSVdrTcpKKGszQ==", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/expo/node_modules/@expo/config": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/expo/node_modules/@expo/config-plugins": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.11.tgz", + "integrity": "sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==", + "dependencies": { + "@expo/config-types": "^51.0.3", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/expo/node_modules/@expo/config-types": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" + }, + "node_modules/expo/node_modules/@expo/env": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" + } + }, + "node_modules/expo/node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/expo/node_modules/@expo/metro-config": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.11.tgz", + "integrity": "sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~9.0.0-beta.0", + "@expo/env": "~0.3.0", + "@expo/json-file": "~8.3.0", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^7.2.3", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" + } + }, + "node_modules/expo/node_modules/@expo/metro-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/expo/node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/expo/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/expo/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/expo/node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/expo/node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/expo/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo/node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-loops": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.4.tgz", + "integrity": "sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" + }, + "node_modules/fast-xml-parser": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" + }, + "node_modules/flow-parser": { + "version": "0.253.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.253.0.tgz", + "integrity": "sha512-EbxtzRIzp8dDSzTloPhsc6uOvrEFIyu08cqQzXBWLAgxK+i2d/5qOos9ryQHRmk+RyDDXfnz/7qteh3jnAlc4w==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", + "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==" + }, + "node_modules/hermes-parser": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", + "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", + "dependencies": { + "hermes-estree": "0.19.1" + } + }, + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dependencies": { + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyphenate-style-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-in-the-middle": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz", + "integrity": "sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-prefixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz", + "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==", + "dependencies": { + "css-in-js-utils": "^3.1.0", + "fast-loops": "^1.1.3" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-expo": { + "version": "51.0.4", + "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-51.0.4.tgz", + "integrity": "sha512-WmlR4rUur1TNF/F14brKCmPdX3TWf7Bno/6A1PuxnflN79LEIXpXuPKMlMWwCCChTohGB5FRniknRibblWu1ug==", + "dev": true, + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/json-file": "^8.3.0", + "@jest/create-cache-key-function": "^29.2.1", + "babel-jest": "^29.2.1", + "find-up": "^5.0.0", + "jest-environment-jsdom": "^29.2.1", + "jest-watch-select-projects": "^2.0.0", + "jest-watch-typeahead": "2.2.1", + "json5": "^2.2.3", + "lodash": "^4.17.19", + "react-test-renderer": "18.2.0", + "stacktrace-js": "^2.0.2" + }, + "bin": { + "jest": "bin/jest.js" + } + }, + "node_modules/jest-expo/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/jest-expo/node_modules/@expo/config": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" + } + }, + "node_modules/jest-expo/node_modules/@expo/config-plugins": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.11.tgz", + "integrity": "sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==", + "dev": true, + "dependencies": { + "@expo/config-types": "^51.0.3", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/jest-expo/node_modules/@expo/config-types": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==", + "dev": true + }, + "node_modules/jest-expo/node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/jest-expo/node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/jest-expo/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-expo/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-expo/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-expo/node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-select-projects": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz", + "integrity": "sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "chalk": "^3.0.0", + "prompts": "^2.2.1" + } + }, + "node_modules/jest-watch-select-projects/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz", + "integrity": "sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^4.0.0", + "jest-regex-util": "^29.0.0", + "jest-watcher": "^29.0.0", + "slash": "^5.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==" + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-android": { + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" + }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "dependencies": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/json-schema-deref-sync/node_modules/md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/lightningcss": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz", + "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.27.0", + "lightningcss-darwin-x64": "1.27.0", + "lightningcss-freebsd-x64": "1.27.0", + "lightningcss-linux-arm-gnueabihf": "1.27.0", + "lightningcss-linux-arm64-gnu": "1.27.0", + "lightningcss-linux-arm64-musl": "1.27.0", + "lightningcss-linux-x64-gnu": "1.27.0", + "lightningcss-linux-x64-musl": "1.27.0", + "lightningcss-win32-arm64-msvc": "1.27.0", + "lightningcss-win32-x64-msvc": "1.27.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz", + "integrity": "sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz", + "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz", + "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz", + "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz", + "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz", + "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz", + "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz", + "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz", + "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz", + "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/logkitty/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/logkitty/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/logkitty/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logkitty/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/logkitty/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==" + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==" + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.12.tgz", + "integrity": "sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.23.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.80.12", + "metro-cache": "0.80.12", + "metro-cache-key": "0.80.12", + "metro-config": "0.80.12", + "metro-core": "0.80.12", + "metro-file-map": "0.80.12", + "metro-resolver": "0.80.12", + "metro-runtime": "0.80.12", + "metro-source-map": "0.80.12", + "metro-symbolicate": "0.80.12", + "metro-transform-plugins": "0.80.12", + "metro-transform-worker": "0.80.12", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.12.tgz", + "integrity": "sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==", + "dependencies": { + "@babel/core": "^7.20.0", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.23.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", + "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", + "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", + "dependencies": { + "hermes-estree": "0.23.1" + } + }, + "node_modules/metro-cache": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.12.tgz", + "integrity": "sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==", + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "metro-core": "0.80.12" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.12.tgz", + "integrity": "sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-config": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.12.tgz", + "integrity": "sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==", + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.6.3", + "metro": "0.80.12", + "metro-cache": "0.80.12", + "metro-core": "0.80.12", + "metro-runtime": "0.80.12" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-core": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.12.tgz", + "integrity": "sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.80.12" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-file-map": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.12.tgz", + "integrity": "sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==", + "dependencies": { + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/metro-minify-terser": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.12.tgz", + "integrity": "sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-resolver": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.12.tgz", + "integrity": "sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-runtime": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.12.tgz", + "integrity": "sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==", + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-source-map": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.12.tgz", + "integrity": "sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==", + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.80.12", + "nullthrows": "^1.1.1", + "ob1": "0.80.12", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.12.tgz", + "integrity": "sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.80.12", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.12.tgz", + "integrity": "sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.12.tgz", + "integrity": "sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "flow-enums-runtime": "^0.0.6", + "metro": "0.80.12", + "metro-babel-transformer": "0.80.12", + "metro-cache": "0.80.12", + "metro-cache-key": "0.80.12", + "metro-minify-terser": "0.80.12", + "metro-source-map": "0.80.12", + "metro-transform-plugins": "0.80.12", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", + "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", + "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", + "dependencies": { + "hermes-estree": "0.23.1" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "dependencies": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "node_modules/nwsapi": { + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", + "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", + "dev": true + }, + "node_modules/ob1": { + "version": "0.80.12", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.12.tgz", + "integrity": "sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/ora/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/plist/node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/psl": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.10.0.tgz", + "integrity": "sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz", + "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-freeze": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=17.0.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.53.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.2.tgz", + "integrity": "sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-native": { + "version": "0.74.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.2.tgz", + "integrity": "sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw==", + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "13.6.8", + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-platform-ios": "13.6.8", + "@react-native/assets-registry": "0.74.84", + "@react-native/codegen": "0.74.84", + "@react-native/community-cli-plugin": "0.74.84", + "@react-native/gradle-plugin": "0.74.84", + "@react-native/js-polyfills": "0.74.84", + "@react-native/normalize-colors": "0.74.84", + "@react-native/virtualized-lists": "0.74.84", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^5.0.0", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.2", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-device-info": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-11.1.0.tgz", + "integrity": "sha512-hzXJSObJdezEz0hF7MAJ3tGeoesuQWenXXt9mrQR9Mjb8kXpZ09rqSsZ/quNpJdZpQ3rYiFa3/0GFG5KNn9PBg==", + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/react-native-gesture-handler": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz", + "integrity": "sha512-vGFlrDKlmyI+BT+FemqVxmvO7nqxU33cgXVsn6IKAFishvlG3oV2Ds67D5nPkHMea8T+s1IcuMm0bF8ntZtAyg==", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-get-random-values": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", + "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/react-native-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-native-helmet-async/-/react-native-helmet-async-2.0.4.tgz", + "integrity": "sha512-m3CkXWss6B1dd6mCMleLpzDCJJGGaHOLQsUzZv8kAASJmMfmVT4d2fx375iXKTRWT25ThBfae3dECuX5cq/8hg==", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-native-reanimated": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.10.1.tgz", + "integrity": "sha512-sfxg6vYphrDc/g4jf/7iJ7NRi+26z2+BszPmvmk0Vnrz6FL7HYljJqTf531F1x6tFmsf+FEAmuCtTUIXFLVo9w==", + "dependencies": { + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-root-siblings": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-native-root-siblings/-/react-native-root-siblings-4.1.1.tgz", + "integrity": "sha512-sdmLElNs5PDWqmZmj4/aNH4anyxreaPm61c4ZkRiR8SO/GzLg6KjAbb0e17RmMdnBdD0AIQbS38h/l55YKN4ZA==" + }, + "node_modules/react-native-root-toast": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/react-native-root-toast/-/react-native-root-toast-3.6.0.tgz", + "integrity": "sha512-HgZ2OS84ZbInJGuejGghBCPmBwoSBuJFO/bAJoR/NS6rCl9eiXSRegIG/gLEo7lH9BijeA63is1noUqR8Y1DpQ==", + "dependencies": { + "deprecated-react-native-prop-types": "^2.3.0", + "prop-types": "^15.5.10", + "react-native-root-siblings": "^4.0.0" + }, + "peerDependencies": { + "react-native": ">=0.47.0" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.10.1.tgz", + "integrity": "sha512-w8tCuowDorUkPoWPXmhqosovBr33YsukkwYCDERZFHAxIkx6qBadYxfeoaJ91nCQKjkNzGrK5qhoNOeSIcYSpA==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.31.1.tgz", + "integrity": "sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ==", + "dependencies": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-toast-message": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-native-toast-message/-/react-native-toast-message-2.2.1.tgz", + "integrity": "sha512-iXFMnlxPcgKKs4bZOIl06W16m6KXMh/bAYpWLyVXlISSCdcL2+FX5WPpRP3TGQeM/u9q+j5ex48DDY+72en+Sw==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-web": { + "version": "0.19.13", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.13.tgz", + "integrity": "sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@react-native/normalize-colors": "^0.74.1", + "fbjs": "^3.0.4", + "inline-style-prefixer": "^6.0.1", + "memoize-one": "^6.0.0", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "styleq": "^0.1.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/react-native-web/node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/react-native/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/react-native/node_modules/@react-native/codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.84.tgz", + "integrity": "sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==", + "dependencies": { + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz", + "integrity": "sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==" + }, + "node_modules/react-native/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/react-native/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/react-native/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/react-native/node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/react-native/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-native/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/react-native/node_modules/scheduler": { + "version": "0.24.0-canary-efb381bbf-20230505", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-test-renderer": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz", + "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==", + "dev": true, + "dependencies": { + "react-is": "^18.2.0", + "react-shallow-renderer": "^16.15.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-test-renderer/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" + }, + "node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "dependencies": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" + }, + "node_modules/regjsparser": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", + "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dependencies": { + "path-parse": "^1.0.5" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", + "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==" + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-static/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/serve-static/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dev": true, + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dev": true, + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-slice": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz", + "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==" + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==" + }, + "node_modules/styleq": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/styleq/-/styleq-0.1.3.tgz", + "integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/traverse": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz", + "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/ts-poet": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-6.9.0.tgz", + "integrity": "sha512-roe6W6MeZmCjRmppyfOURklO5tQFQ6Sg7swURKkwYJvV7dbGCrK28um5+51iW3twdPRKtwarqFAVMU6G1mvnuQ==", + "dev": true, + "dependencies": { + "dprint-node": "^1.0.8" + } + }, + "node_modules/ts-proto": { + "version": "1.181.1", + "resolved": "https://registry.npmjs.org/ts-proto/-/ts-proto-1.181.1.tgz", + "integrity": "sha512-lNmd/KEgqWtwDG9mIM3EpcxBx+URRVHkDP/EEJBgQJaQwmZFTk6VjHg56HNQswd114yXGfF+8pKQvJ2iH9KfWw==", + "dev": true, + "dependencies": { + "case-anything": "^2.1.13", + "protobufjs": "^7.2.4", + "ts-poet": "^6.7.0", + "ts-proto-descriptors": "1.16.0" + }, + "bin": { + "protoc-gen-ts_proto": "protoc-gen-ts_proto" + } + }, + "node_modules/ts-proto-descriptors": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/ts-proto-descriptors/-/ts-proto-descriptors-1.16.0.tgz", + "integrity": "sha512-3yKuzMLpltdpcyQji1PJZRfoo4OJjNieKTYkQY8pF7xGKsYz/RHe3aEe4KiRxcinoBmnEhmuI+yJTxLb922ULA==", + "dev": true, + "dependencies": { + "long": "^5.2.3", + "protobufjs": "^7.2.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", + "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-latest-callback": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.2.3.tgz", + "integrity": "sha512-7vI3fBuyRcP91pazVboc4qu+6ZqM8izPWX9k7cRnT8hbD5svslcknsh3S9BUhaK11OmgTV4oWZZVSeQAiV53SQ==", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/warn-once": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xml2js": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-2.1.0.tgz", + "integrity": "sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.18.0" + } + } + } +} diff --git a/src/react-native-app/package.json b/src/react-native-app/package.json new file mode 100644 index 0000000000..0309320c65 --- /dev/null +++ b/src/react-native-app/package.json @@ -0,0 +1,76 @@ +{ + "name": "reactnativeapp", + "main": "expo-router/entry", + "version": "1.0.0", + "scripts": { + "start": "ENVFILE=.env expo start", + "reset-project": "node ./scripts/reset-project.js", + "android": "expo run:android", + "ios": "expo run:ios", + "web": "expo start --web", + "test": "jest --watchAll", + "lint": "expo lint" + }, + "jest": { + "preset": "jest-expo" + }, + "dependencies": { + "@expo/metro-config": "^0.19.4", + "@expo/vector-icons": "^14.0.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^1.28.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.52.0", + "@opentelemetry/instrumentation": "^0.55.0", + "@opentelemetry/instrumentation-fetch": "^0.55.0", + "@opentelemetry/instrumentation-xml-http-request": "^0.55.0", + "@opentelemetry/resources": "^1.28.0", + "@opentelemetry/sdk-trace-base": "^1.28.0", + "@opentelemetry/sdk-trace-web": "^1.28.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@react-native-async-storage/async-storage": "^2.0.0", + "@react-navigation/native": "^6.0.2", + "@tanstack/react-query": "4.36.1", + "@types/react-native-get-random-values": "^1.8.2", + "@types/uuid": "^10.0.0", + "expo": "~51.0.14", + "expo-constants": "~16.0.2", + "expo-font": "~12.0.7", + "expo-linking": "~6.3.1", + "expo-router": "~3.5.16", + "expo-splash-screen": "~0.27.5", + "expo-status-bar": "~1.12.1", + "expo-system-ui": "~3.0.6", + "expo-web-browser": "~13.0.3", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hook-form": "^7.53.2", + "react-native": "0.74.2", + "react-native-device-info": "^11.1.0", + "react-native-gesture-handler": "~2.16.1", + "react-native-get-random-values": "^1.11.0", + "react-native-reanimated": "~3.10.1", + "react-native-root-toast": "^3.6.0", + "react-native-safe-area-context": "4.10.1", + "react-native-screens": "3.31.1", + "react-native-toast-message": "^2.2.1", + "react-native-web": "~0.19.10", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@types/jest": "^29.5.12", + "@types/react": "~18.2.45", + "@types/react-test-renderer": "^18.0.7", + "eslint": "^8.57.0", + "eslint-config-expo": "~7.1.2", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "jest": "^29.2.1", + "jest-expo": "~51.0.1", + "prettier": "^3.3.3", + "react-test-renderer": "18.2.0", + "ts-proto": "1.181.1", + "typescript": "~5.3.3" + }, + "private": true +} diff --git a/src/react-native-app/protos/demo.ts b/src/react-native-app/protos/demo.ts new file mode 100644 index 0000000000..c0a2c506b3 --- /dev/null +++ b/src/react-native-app/protos/demo.ts @@ -0,0 +1,4027 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v1.181.1 +// protoc v5.28.3 +// source: demo.proto + +/* eslint-disable */ +import { + type CallOptions, + ChannelCredentials, + Client, + type ClientOptions, + type ClientUnaryCall, + type handleUnaryCall, + makeGenericClientConstructor, + Metadata, + type ServiceError, + type UntypedServiceImplementation, +} from "@grpc/grpc-js"; +import Long from "long"; +import _m0 from "protobufjs/minimal"; + +export const protobufPackage = "oteldemo"; + +export interface CartItem { + productId: string; + quantity: number; +} + +export interface AddItemRequest { + userId: string; + item: CartItem | undefined; +} + +export interface EmptyCartRequest { + userId: string; +} + +export interface GetCartRequest { + userId: string; +} + +export interface Cart { + userId: string; + items: CartItem[]; +} + +export interface Empty { +} + +export interface ListRecommendationsRequest { + userId: string; + productIds: string[]; +} + +export interface ListRecommendationsResponse { + productIds: string[]; +} + +export interface Product { + id: string; + name: string; + description: string; + picture: string; + priceUsd: + | Money + | undefined; + /** + * Categories such as "clothing" or "kitchen" that can be used to look up + * other related products. + */ + categories: string[]; +} + +export interface ListProductsResponse { + products: Product[]; +} + +export interface GetProductRequest { + id: string; +} + +export interface SearchProductsRequest { + query: string; +} + +export interface SearchProductsResponse { + results: Product[]; +} + +export interface GetQuoteRequest { + address: Address | undefined; + items: CartItem[]; +} + +export interface GetQuoteResponse { + costUsd: Money | undefined; +} + +export interface ShipOrderRequest { + address: Address | undefined; + items: CartItem[]; +} + +export interface ShipOrderResponse { + trackingId: string; +} + +export interface Address { + streetAddress: string; + city: string; + state: string; + country: string; + zipCode: string; +} + +/** Represents an amount of money with its currency type. */ +export interface Money { + /** The 3-letter currency code defined in ISO 4217. */ + currencyCode: string; + /** + * The whole units of the amount. + * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar. + */ + units: number; + /** + * Number of nano (10^-9) units of the amount. + * The value must be between -999,999,999 and +999,999,999 inclusive. + * If `units` is positive, `nanos` must be positive or zero. + * If `units` is zero, `nanos` can be positive, zero, or negative. + * If `units` is negative, `nanos` must be negative or zero. + * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000. + */ + nanos: number; +} + +export interface GetSupportedCurrenciesResponse { + /** The 3-letter currency code defined in ISO 4217. */ + currencyCodes: string[]; +} + +export interface CurrencyConversionRequest { + from: + | Money + | undefined; + /** The 3-letter currency code defined in ISO 4217. */ + toCode: string; +} + +export interface CreditCardInfo { + creditCardNumber: string; + creditCardCvv: number; + creditCardExpirationYear: number; + creditCardExpirationMonth: number; +} + +export interface ChargeRequest { + amount: Money | undefined; + creditCard: CreditCardInfo | undefined; +} + +export interface ChargeResponse { + transactionId: string; +} + +export interface OrderItem { + item: CartItem | undefined; + cost: Money | undefined; +} + +export interface OrderResult { + orderId: string; + shippingTrackingId: string; + shippingCost: Money | undefined; + shippingAddress: Address | undefined; + items: OrderItem[]; +} + +export interface SendOrderConfirmationRequest { + email: string; + order: OrderResult | undefined; +} + +export interface PlaceOrderRequest { + userId: string; + userCurrency: string; + address: Address | undefined; + email: string; + creditCard: CreditCardInfo | undefined; +} + +export interface PlaceOrderResponse { + order: OrderResult | undefined; +} + +export interface AdRequest { + /** List of important key words from the current page describing the context. */ + contextKeys: string[]; +} + +export interface AdResponse { + ads: Ad[]; +} + +export interface Ad { + /** url to redirect to when an ad is clicked. */ + redirectUrl: string; + /** short advertisement text to display. */ + text: string; +} + +export interface Flag { + name: string; + description: string; + enabled: boolean; +} + +export interface GetFlagRequest { + name: string; +} + +export interface GetFlagResponse { + flag: Flag | undefined; +} + +export interface CreateFlagRequest { + name: string; + description: string; + enabled: boolean; +} + +export interface CreateFlagResponse { + flag: Flag | undefined; +} + +export interface UpdateFlagRequest { + name: string; + enabled: boolean; +} + +export interface UpdateFlagResponse { +} + +export interface ListFlagsRequest { +} + +export interface ListFlagsResponse { + flag: Flag[]; +} + +export interface DeleteFlagRequest { + name: string; +} + +export interface DeleteFlagResponse { +} + +function createBaseCartItem(): CartItem { + return { productId: "", quantity: 0 }; +} + +export const CartItem = { + encode(message: CartItem, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.productId !== "") { + writer.uint32(10).string(message.productId); + } + if (message.quantity !== 0) { + writer.uint32(16).int32(message.quantity); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CartItem { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCartItem(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.productId = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.quantity = reader.int32(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CartItem { + return { + productId: isSet(object.productId) ? globalThis.String(object.productId) : "", + quantity: isSet(object.quantity) ? globalThis.Number(object.quantity) : 0, + }; + }, + + toJSON(message: CartItem): unknown { + const obj: any = {}; + if (message.productId !== "") { + obj.productId = message.productId; + } + if (message.quantity !== 0) { + obj.quantity = Math.round(message.quantity); + } + return obj; + }, + + create, I>>(base?: I): CartItem { + return CartItem.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): CartItem { + const message = createBaseCartItem(); + message.productId = object.productId ?? ""; + message.quantity = object.quantity ?? 0; + return message; + }, +}; + +function createBaseAddItemRequest(): AddItemRequest { + return { userId: "", item: undefined }; +} + +export const AddItemRequest = { + encode(message: AddItemRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + if (message.item !== undefined) { + CartItem.encode(message.item, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AddItemRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAddItemRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.userId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.item = CartItem.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AddItemRequest { + return { + userId: isSet(object.userId) ? globalThis.String(object.userId) : "", + item: isSet(object.item) ? CartItem.fromJSON(object.item) : undefined, + }; + }, + + toJSON(message: AddItemRequest): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + if (message.item !== undefined) { + obj.item = CartItem.toJSON(message.item); + } + return obj; + }, + + create, I>>(base?: I): AddItemRequest { + return AddItemRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): AddItemRequest { + const message = createBaseAddItemRequest(); + message.userId = object.userId ?? ""; + message.item = (object.item !== undefined && object.item !== null) ? CartItem.fromPartial(object.item) : undefined; + return message; + }, +}; + +function createBaseEmptyCartRequest(): EmptyCartRequest { + return { userId: "" }; +} + +export const EmptyCartRequest = { + encode(message: EmptyCartRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): EmptyCartRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEmptyCartRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.userId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): EmptyCartRequest { + return { userId: isSet(object.userId) ? globalThis.String(object.userId) : "" }; + }, + + toJSON(message: EmptyCartRequest): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + return obj; + }, + + create, I>>(base?: I): EmptyCartRequest { + return EmptyCartRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): EmptyCartRequest { + const message = createBaseEmptyCartRequest(); + message.userId = object.userId ?? ""; + return message; + }, +}; + +function createBaseGetCartRequest(): GetCartRequest { + return { userId: "" }; +} + +export const GetCartRequest = { + encode(message: GetCartRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetCartRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetCartRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.userId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetCartRequest { + return { userId: isSet(object.userId) ? globalThis.String(object.userId) : "" }; + }, + + toJSON(message: GetCartRequest): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + return obj; + }, + + create, I>>(base?: I): GetCartRequest { + return GetCartRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetCartRequest { + const message = createBaseGetCartRequest(); + message.userId = object.userId ?? ""; + return message; + }, +}; + +function createBaseCart(): Cart { + return { userId: "", items: [] }; +} + +export const Cart = { + encode(message: Cart, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + for (const v of message.items) { + CartItem.encode(v!, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Cart { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCart(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.userId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.items.push(CartItem.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Cart { + return { + userId: isSet(object.userId) ? globalThis.String(object.userId) : "", + items: globalThis.Array.isArray(object?.items) ? object.items.map((e: any) => CartItem.fromJSON(e)) : [], + }; + }, + + toJSON(message: Cart): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + if (message.items?.length) { + obj.items = message.items.map((e) => CartItem.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): Cart { + return Cart.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Cart { + const message = createBaseCart(); + message.userId = object.userId ?? ""; + message.items = object.items?.map((e) => CartItem.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseEmpty(): Empty { + return {}; +} + +export const Empty = { + encode(_: Empty, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Empty { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEmpty(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(_: any): Empty { + return {}; + }, + + toJSON(_: Empty): unknown { + const obj: any = {}; + return obj; + }, + + create, I>>(base?: I): Empty { + return Empty.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(_: I): Empty { + const message = createBaseEmpty(); + return message; + }, +}; + +function createBaseListRecommendationsRequest(): ListRecommendationsRequest { + return { userId: "", productIds: [] }; +} + +export const ListRecommendationsRequest = { + encode(message: ListRecommendationsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + for (const v of message.productIds) { + writer.uint32(18).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ListRecommendationsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseListRecommendationsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.userId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.productIds.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ListRecommendationsRequest { + return { + userId: isSet(object.userId) ? globalThis.String(object.userId) : "", + productIds: globalThis.Array.isArray(object?.productIds) + ? object.productIds.map((e: any) => globalThis.String(e)) + : [], + }; + }, + + toJSON(message: ListRecommendationsRequest): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + if (message.productIds?.length) { + obj.productIds = message.productIds; + } + return obj; + }, + + create, I>>(base?: I): ListRecommendationsRequest { + return ListRecommendationsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ListRecommendationsRequest { + const message = createBaseListRecommendationsRequest(); + message.userId = object.userId ?? ""; + message.productIds = object.productIds?.map((e) => e) || []; + return message; + }, +}; + +function createBaseListRecommendationsResponse(): ListRecommendationsResponse { + return { productIds: [] }; +} + +export const ListRecommendationsResponse = { + encode(message: ListRecommendationsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.productIds) { + writer.uint32(10).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ListRecommendationsResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseListRecommendationsResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.productIds.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ListRecommendationsResponse { + return { + productIds: globalThis.Array.isArray(object?.productIds) + ? object.productIds.map((e: any) => globalThis.String(e)) + : [], + }; + }, + + toJSON(message: ListRecommendationsResponse): unknown { + const obj: any = {}; + if (message.productIds?.length) { + obj.productIds = message.productIds; + } + return obj; + }, + + create, I>>(base?: I): ListRecommendationsResponse { + return ListRecommendationsResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ListRecommendationsResponse { + const message = createBaseListRecommendationsResponse(); + message.productIds = object.productIds?.map((e) => e) || []; + return message; + }, +}; + +function createBaseProduct(): Product { + return { id: "", name: "", description: "", picture: "", priceUsd: undefined, categories: [] }; +} + +export const Product = { + encode(message: Product, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.id !== "") { + writer.uint32(10).string(message.id); + } + if (message.name !== "") { + writer.uint32(18).string(message.name); + } + if (message.description !== "") { + writer.uint32(26).string(message.description); + } + if (message.picture !== "") { + writer.uint32(34).string(message.picture); + } + if (message.priceUsd !== undefined) { + Money.encode(message.priceUsd, writer.uint32(42).fork()).ldelim(); + } + for (const v of message.categories) { + writer.uint32(50).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Product { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseProduct(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.id = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.name = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.description = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.picture = reader.string(); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.priceUsd = Money.decode(reader, reader.uint32()); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.categories.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Product { + return { + id: isSet(object.id) ? globalThis.String(object.id) : "", + name: isSet(object.name) ? globalThis.String(object.name) : "", + description: isSet(object.description) ? globalThis.String(object.description) : "", + picture: isSet(object.picture) ? globalThis.String(object.picture) : "", + priceUsd: isSet(object.priceUsd) ? Money.fromJSON(object.priceUsd) : undefined, + categories: globalThis.Array.isArray(object?.categories) + ? object.categories.map((e: any) => globalThis.String(e)) + : [], + }; + }, + + toJSON(message: Product): unknown { + const obj: any = {}; + if (message.id !== "") { + obj.id = message.id; + } + if (message.name !== "") { + obj.name = message.name; + } + if (message.description !== "") { + obj.description = message.description; + } + if (message.picture !== "") { + obj.picture = message.picture; + } + if (message.priceUsd !== undefined) { + obj.priceUsd = Money.toJSON(message.priceUsd); + } + if (message.categories?.length) { + obj.categories = message.categories; + } + return obj; + }, + + create, I>>(base?: I): Product { + return Product.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Product { + const message = createBaseProduct(); + message.id = object.id ?? ""; + message.name = object.name ?? ""; + message.description = object.description ?? ""; + message.picture = object.picture ?? ""; + message.priceUsd = (object.priceUsd !== undefined && object.priceUsd !== null) + ? Money.fromPartial(object.priceUsd) + : undefined; + message.categories = object.categories?.map((e) => e) || []; + return message; + }, +}; + +function createBaseListProductsResponse(): ListProductsResponse { + return { products: [] }; +} + +export const ListProductsResponse = { + encode(message: ListProductsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.products) { + Product.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ListProductsResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseListProductsResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.products.push(Product.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ListProductsResponse { + return { + products: globalThis.Array.isArray(object?.products) ? object.products.map((e: any) => Product.fromJSON(e)) : [], + }; + }, + + toJSON(message: ListProductsResponse): unknown { + const obj: any = {}; + if (message.products?.length) { + obj.products = message.products.map((e) => Product.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): ListProductsResponse { + return ListProductsResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ListProductsResponse { + const message = createBaseListProductsResponse(); + message.products = object.products?.map((e) => Product.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseGetProductRequest(): GetProductRequest { + return { id: "" }; +} + +export const GetProductRequest = { + encode(message: GetProductRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.id !== "") { + writer.uint32(10).string(message.id); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetProductRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetProductRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.id = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetProductRequest { + return { id: isSet(object.id) ? globalThis.String(object.id) : "" }; + }, + + toJSON(message: GetProductRequest): unknown { + const obj: any = {}; + if (message.id !== "") { + obj.id = message.id; + } + return obj; + }, + + create, I>>(base?: I): GetProductRequest { + return GetProductRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetProductRequest { + const message = createBaseGetProductRequest(); + message.id = object.id ?? ""; + return message; + }, +}; + +function createBaseSearchProductsRequest(): SearchProductsRequest { + return { query: "" }; +} + +export const SearchProductsRequest = { + encode(message: SearchProductsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.query !== "") { + writer.uint32(10).string(message.query); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SearchProductsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSearchProductsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.query = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SearchProductsRequest { + return { query: isSet(object.query) ? globalThis.String(object.query) : "" }; + }, + + toJSON(message: SearchProductsRequest): unknown { + const obj: any = {}; + if (message.query !== "") { + obj.query = message.query; + } + return obj; + }, + + create, I>>(base?: I): SearchProductsRequest { + return SearchProductsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): SearchProductsRequest { + const message = createBaseSearchProductsRequest(); + message.query = object.query ?? ""; + return message; + }, +}; + +function createBaseSearchProductsResponse(): SearchProductsResponse { + return { results: [] }; +} + +export const SearchProductsResponse = { + encode(message: SearchProductsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.results) { + Product.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SearchProductsResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSearchProductsResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.results.push(Product.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SearchProductsResponse { + return { + results: globalThis.Array.isArray(object?.results) ? object.results.map((e: any) => Product.fromJSON(e)) : [], + }; + }, + + toJSON(message: SearchProductsResponse): unknown { + const obj: any = {}; + if (message.results?.length) { + obj.results = message.results.map((e) => Product.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): SearchProductsResponse { + return SearchProductsResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): SearchProductsResponse { + const message = createBaseSearchProductsResponse(); + message.results = object.results?.map((e) => Product.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseGetQuoteRequest(): GetQuoteRequest { + return { address: undefined, items: [] }; +} + +export const GetQuoteRequest = { + encode(message: GetQuoteRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.address !== undefined) { + Address.encode(message.address, writer.uint32(10).fork()).ldelim(); + } + for (const v of message.items) { + CartItem.encode(v!, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetQuoteRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetQuoteRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.address = Address.decode(reader, reader.uint32()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.items.push(CartItem.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetQuoteRequest { + return { + address: isSet(object.address) ? Address.fromJSON(object.address) : undefined, + items: globalThis.Array.isArray(object?.items) ? object.items.map((e: any) => CartItem.fromJSON(e)) : [], + }; + }, + + toJSON(message: GetQuoteRequest): unknown { + const obj: any = {}; + if (message.address !== undefined) { + obj.address = Address.toJSON(message.address); + } + if (message.items?.length) { + obj.items = message.items.map((e) => CartItem.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): GetQuoteRequest { + return GetQuoteRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetQuoteRequest { + const message = createBaseGetQuoteRequest(); + message.address = (object.address !== undefined && object.address !== null) + ? Address.fromPartial(object.address) + : undefined; + message.items = object.items?.map((e) => CartItem.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseGetQuoteResponse(): GetQuoteResponse { + return { costUsd: undefined }; +} + +export const GetQuoteResponse = { + encode(message: GetQuoteResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.costUsd !== undefined) { + Money.encode(message.costUsd, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetQuoteResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetQuoteResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.costUsd = Money.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetQuoteResponse { + return { costUsd: isSet(object.costUsd) ? Money.fromJSON(object.costUsd) : undefined }; + }, + + toJSON(message: GetQuoteResponse): unknown { + const obj: any = {}; + if (message.costUsd !== undefined) { + obj.costUsd = Money.toJSON(message.costUsd); + } + return obj; + }, + + create, I>>(base?: I): GetQuoteResponse { + return GetQuoteResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetQuoteResponse { + const message = createBaseGetQuoteResponse(); + message.costUsd = (object.costUsd !== undefined && object.costUsd !== null) + ? Money.fromPartial(object.costUsd) + : undefined; + return message; + }, +}; + +function createBaseShipOrderRequest(): ShipOrderRequest { + return { address: undefined, items: [] }; +} + +export const ShipOrderRequest = { + encode(message: ShipOrderRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.address !== undefined) { + Address.encode(message.address, writer.uint32(10).fork()).ldelim(); + } + for (const v of message.items) { + CartItem.encode(v!, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ShipOrderRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseShipOrderRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.address = Address.decode(reader, reader.uint32()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.items.push(CartItem.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ShipOrderRequest { + return { + address: isSet(object.address) ? Address.fromJSON(object.address) : undefined, + items: globalThis.Array.isArray(object?.items) ? object.items.map((e: any) => CartItem.fromJSON(e)) : [], + }; + }, + + toJSON(message: ShipOrderRequest): unknown { + const obj: any = {}; + if (message.address !== undefined) { + obj.address = Address.toJSON(message.address); + } + if (message.items?.length) { + obj.items = message.items.map((e) => CartItem.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): ShipOrderRequest { + return ShipOrderRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ShipOrderRequest { + const message = createBaseShipOrderRequest(); + message.address = (object.address !== undefined && object.address !== null) + ? Address.fromPartial(object.address) + : undefined; + message.items = object.items?.map((e) => CartItem.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseShipOrderResponse(): ShipOrderResponse { + return { trackingId: "" }; +} + +export const ShipOrderResponse = { + encode(message: ShipOrderResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.trackingId !== "") { + writer.uint32(10).string(message.trackingId); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ShipOrderResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseShipOrderResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.trackingId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ShipOrderResponse { + return { trackingId: isSet(object.trackingId) ? globalThis.String(object.trackingId) : "" }; + }, + + toJSON(message: ShipOrderResponse): unknown { + const obj: any = {}; + if (message.trackingId !== "") { + obj.trackingId = message.trackingId; + } + return obj; + }, + + create, I>>(base?: I): ShipOrderResponse { + return ShipOrderResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ShipOrderResponse { + const message = createBaseShipOrderResponse(); + message.trackingId = object.trackingId ?? ""; + return message; + }, +}; + +function createBaseAddress(): Address { + return { streetAddress: "", city: "", state: "", country: "", zipCode: "" }; +} + +export const Address = { + encode(message: Address, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.streetAddress !== "") { + writer.uint32(10).string(message.streetAddress); + } + if (message.city !== "") { + writer.uint32(18).string(message.city); + } + if (message.state !== "") { + writer.uint32(26).string(message.state); + } + if (message.country !== "") { + writer.uint32(34).string(message.country); + } + if (message.zipCode !== "") { + writer.uint32(42).string(message.zipCode); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Address { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAddress(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.streetAddress = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.city = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.state = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.country = reader.string(); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.zipCode = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Address { + return { + streetAddress: isSet(object.streetAddress) ? globalThis.String(object.streetAddress) : "", + city: isSet(object.city) ? globalThis.String(object.city) : "", + state: isSet(object.state) ? globalThis.String(object.state) : "", + country: isSet(object.country) ? globalThis.String(object.country) : "", + zipCode: isSet(object.zipCode) ? globalThis.String(object.zipCode) : "", + }; + }, + + toJSON(message: Address): unknown { + const obj: any = {}; + if (message.streetAddress !== "") { + obj.streetAddress = message.streetAddress; + } + if (message.city !== "") { + obj.city = message.city; + } + if (message.state !== "") { + obj.state = message.state; + } + if (message.country !== "") { + obj.country = message.country; + } + if (message.zipCode !== "") { + obj.zipCode = message.zipCode; + } + return obj; + }, + + create, I>>(base?: I): Address { + return Address.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Address { + const message = createBaseAddress(); + message.streetAddress = object.streetAddress ?? ""; + message.city = object.city ?? ""; + message.state = object.state ?? ""; + message.country = object.country ?? ""; + message.zipCode = object.zipCode ?? ""; + return message; + }, +}; + +function createBaseMoney(): Money { + return { currencyCode: "", units: 0, nanos: 0 }; +} + +export const Money = { + encode(message: Money, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.currencyCode !== "") { + writer.uint32(10).string(message.currencyCode); + } + if (message.units !== 0) { + writer.uint32(16).int64(message.units); + } + if (message.nanos !== 0) { + writer.uint32(24).int32(message.nanos); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Money { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMoney(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.currencyCode = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.units = longToNumber(reader.int64() as Long); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.nanos = reader.int32(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Money { + return { + currencyCode: isSet(object.currencyCode) ? globalThis.String(object.currencyCode) : "", + units: isSet(object.units) ? globalThis.Number(object.units) : 0, + nanos: isSet(object.nanos) ? globalThis.Number(object.nanos) : 0, + }; + }, + + toJSON(message: Money): unknown { + const obj: any = {}; + if (message.currencyCode !== "") { + obj.currencyCode = message.currencyCode; + } + if (message.units !== 0) { + obj.units = Math.round(message.units); + } + if (message.nanos !== 0) { + obj.nanos = Math.round(message.nanos); + } + return obj; + }, + + create, I>>(base?: I): Money { + return Money.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Money { + const message = createBaseMoney(); + message.currencyCode = object.currencyCode ?? ""; + message.units = object.units ?? 0; + message.nanos = object.nanos ?? 0; + return message; + }, +}; + +function createBaseGetSupportedCurrenciesResponse(): GetSupportedCurrenciesResponse { + return { currencyCodes: [] }; +} + +export const GetSupportedCurrenciesResponse = { + encode(message: GetSupportedCurrenciesResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.currencyCodes) { + writer.uint32(10).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetSupportedCurrenciesResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetSupportedCurrenciesResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.currencyCodes.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetSupportedCurrenciesResponse { + return { + currencyCodes: globalThis.Array.isArray(object?.currencyCodes) + ? object.currencyCodes.map((e: any) => globalThis.String(e)) + : [], + }; + }, + + toJSON(message: GetSupportedCurrenciesResponse): unknown { + const obj: any = {}; + if (message.currencyCodes?.length) { + obj.currencyCodes = message.currencyCodes; + } + return obj; + }, + + create, I>>(base?: I): GetSupportedCurrenciesResponse { + return GetSupportedCurrenciesResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>( + object: I, + ): GetSupportedCurrenciesResponse { + const message = createBaseGetSupportedCurrenciesResponse(); + message.currencyCodes = object.currencyCodes?.map((e) => e) || []; + return message; + }, +}; + +function createBaseCurrencyConversionRequest(): CurrencyConversionRequest { + return { from: undefined, toCode: "" }; +} + +export const CurrencyConversionRequest = { + encode(message: CurrencyConversionRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.from !== undefined) { + Money.encode(message.from, writer.uint32(10).fork()).ldelim(); + } + if (message.toCode !== "") { + writer.uint32(18).string(message.toCode); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CurrencyConversionRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCurrencyConversionRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.from = Money.decode(reader, reader.uint32()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.toCode = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CurrencyConversionRequest { + return { + from: isSet(object.from) ? Money.fromJSON(object.from) : undefined, + toCode: isSet(object.toCode) ? globalThis.String(object.toCode) : "", + }; + }, + + toJSON(message: CurrencyConversionRequest): unknown { + const obj: any = {}; + if (message.from !== undefined) { + obj.from = Money.toJSON(message.from); + } + if (message.toCode !== "") { + obj.toCode = message.toCode; + } + return obj; + }, + + create, I>>(base?: I): CurrencyConversionRequest { + return CurrencyConversionRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): CurrencyConversionRequest { + const message = createBaseCurrencyConversionRequest(); + message.from = (object.from !== undefined && object.from !== null) ? Money.fromPartial(object.from) : undefined; + message.toCode = object.toCode ?? ""; + return message; + }, +}; + +function createBaseCreditCardInfo(): CreditCardInfo { + return { creditCardNumber: "", creditCardCvv: 0, creditCardExpirationYear: 0, creditCardExpirationMonth: 0 }; +} + +export const CreditCardInfo = { + encode(message: CreditCardInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.creditCardNumber !== "") { + writer.uint32(10).string(message.creditCardNumber); + } + if (message.creditCardCvv !== 0) { + writer.uint32(16).int32(message.creditCardCvv); + } + if (message.creditCardExpirationYear !== 0) { + writer.uint32(24).int32(message.creditCardExpirationYear); + } + if (message.creditCardExpirationMonth !== 0) { + writer.uint32(32).int32(message.creditCardExpirationMonth); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CreditCardInfo { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCreditCardInfo(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.creditCardNumber = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.creditCardCvv = reader.int32(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.creditCardExpirationYear = reader.int32(); + continue; + case 4: + if (tag !== 32) { + break; + } + + message.creditCardExpirationMonth = reader.int32(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CreditCardInfo { + return { + creditCardNumber: isSet(object.creditCardNumber) ? globalThis.String(object.creditCardNumber) : "", + creditCardCvv: isSet(object.creditCardCvv) ? globalThis.Number(object.creditCardCvv) : 0, + creditCardExpirationYear: isSet(object.creditCardExpirationYear) + ? globalThis.Number(object.creditCardExpirationYear) + : 0, + creditCardExpirationMonth: isSet(object.creditCardExpirationMonth) + ? globalThis.Number(object.creditCardExpirationMonth) + : 0, + }; + }, + + toJSON(message: CreditCardInfo): unknown { + const obj: any = {}; + if (message.creditCardNumber !== "") { + obj.creditCardNumber = message.creditCardNumber; + } + if (message.creditCardCvv !== 0) { + obj.creditCardCvv = Math.round(message.creditCardCvv); + } + if (message.creditCardExpirationYear !== 0) { + obj.creditCardExpirationYear = Math.round(message.creditCardExpirationYear); + } + if (message.creditCardExpirationMonth !== 0) { + obj.creditCardExpirationMonth = Math.round(message.creditCardExpirationMonth); + } + return obj; + }, + + create, I>>(base?: I): CreditCardInfo { + return CreditCardInfo.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): CreditCardInfo { + const message = createBaseCreditCardInfo(); + message.creditCardNumber = object.creditCardNumber ?? ""; + message.creditCardCvv = object.creditCardCvv ?? 0; + message.creditCardExpirationYear = object.creditCardExpirationYear ?? 0; + message.creditCardExpirationMonth = object.creditCardExpirationMonth ?? 0; + return message; + }, +}; + +function createBaseChargeRequest(): ChargeRequest { + return { amount: undefined, creditCard: undefined }; +} + +export const ChargeRequest = { + encode(message: ChargeRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.amount !== undefined) { + Money.encode(message.amount, writer.uint32(10).fork()).ldelim(); + } + if (message.creditCard !== undefined) { + CreditCardInfo.encode(message.creditCard, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ChargeRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseChargeRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.amount = Money.decode(reader, reader.uint32()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.creditCard = CreditCardInfo.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ChargeRequest { + return { + amount: isSet(object.amount) ? Money.fromJSON(object.amount) : undefined, + creditCard: isSet(object.creditCard) ? CreditCardInfo.fromJSON(object.creditCard) : undefined, + }; + }, + + toJSON(message: ChargeRequest): unknown { + const obj: any = {}; + if (message.amount !== undefined) { + obj.amount = Money.toJSON(message.amount); + } + if (message.creditCard !== undefined) { + obj.creditCard = CreditCardInfo.toJSON(message.creditCard); + } + return obj; + }, + + create, I>>(base?: I): ChargeRequest { + return ChargeRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ChargeRequest { + const message = createBaseChargeRequest(); + message.amount = (object.amount !== undefined && object.amount !== null) + ? Money.fromPartial(object.amount) + : undefined; + message.creditCard = (object.creditCard !== undefined && object.creditCard !== null) + ? CreditCardInfo.fromPartial(object.creditCard) + : undefined; + return message; + }, +}; + +function createBaseChargeResponse(): ChargeResponse { + return { transactionId: "" }; +} + +export const ChargeResponse = { + encode(message: ChargeResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.transactionId !== "") { + writer.uint32(10).string(message.transactionId); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ChargeResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseChargeResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.transactionId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ChargeResponse { + return { transactionId: isSet(object.transactionId) ? globalThis.String(object.transactionId) : "" }; + }, + + toJSON(message: ChargeResponse): unknown { + const obj: any = {}; + if (message.transactionId !== "") { + obj.transactionId = message.transactionId; + } + return obj; + }, + + create, I>>(base?: I): ChargeResponse { + return ChargeResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ChargeResponse { + const message = createBaseChargeResponse(); + message.transactionId = object.transactionId ?? ""; + return message; + }, +}; + +function createBaseOrderItem(): OrderItem { + return { item: undefined, cost: undefined }; +} + +export const OrderItem = { + encode(message: OrderItem, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.item !== undefined) { + CartItem.encode(message.item, writer.uint32(10).fork()).ldelim(); + } + if (message.cost !== undefined) { + Money.encode(message.cost, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): OrderItem { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseOrderItem(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.item = CartItem.decode(reader, reader.uint32()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.cost = Money.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): OrderItem { + return { + item: isSet(object.item) ? CartItem.fromJSON(object.item) : undefined, + cost: isSet(object.cost) ? Money.fromJSON(object.cost) : undefined, + }; + }, + + toJSON(message: OrderItem): unknown { + const obj: any = {}; + if (message.item !== undefined) { + obj.item = CartItem.toJSON(message.item); + } + if (message.cost !== undefined) { + obj.cost = Money.toJSON(message.cost); + } + return obj; + }, + + create, I>>(base?: I): OrderItem { + return OrderItem.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): OrderItem { + const message = createBaseOrderItem(); + message.item = (object.item !== undefined && object.item !== null) ? CartItem.fromPartial(object.item) : undefined; + message.cost = (object.cost !== undefined && object.cost !== null) ? Money.fromPartial(object.cost) : undefined; + return message; + }, +}; + +function createBaseOrderResult(): OrderResult { + return { orderId: "", shippingTrackingId: "", shippingCost: undefined, shippingAddress: undefined, items: [] }; +} + +export const OrderResult = { + encode(message: OrderResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.orderId !== "") { + writer.uint32(10).string(message.orderId); + } + if (message.shippingTrackingId !== "") { + writer.uint32(18).string(message.shippingTrackingId); + } + if (message.shippingCost !== undefined) { + Money.encode(message.shippingCost, writer.uint32(26).fork()).ldelim(); + } + if (message.shippingAddress !== undefined) { + Address.encode(message.shippingAddress, writer.uint32(34).fork()).ldelim(); + } + for (const v of message.items) { + OrderItem.encode(v!, writer.uint32(42).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): OrderResult { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseOrderResult(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.orderId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.shippingTrackingId = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.shippingCost = Money.decode(reader, reader.uint32()); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.shippingAddress = Address.decode(reader, reader.uint32()); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.items.push(OrderItem.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): OrderResult { + return { + orderId: isSet(object.orderId) ? globalThis.String(object.orderId) : "", + shippingTrackingId: isSet(object.shippingTrackingId) ? globalThis.String(object.shippingTrackingId) : "", + shippingCost: isSet(object.shippingCost) ? Money.fromJSON(object.shippingCost) : undefined, + shippingAddress: isSet(object.shippingAddress) ? Address.fromJSON(object.shippingAddress) : undefined, + items: globalThis.Array.isArray(object?.items) ? object.items.map((e: any) => OrderItem.fromJSON(e)) : [], + }; + }, + + toJSON(message: OrderResult): unknown { + const obj: any = {}; + if (message.orderId !== "") { + obj.orderId = message.orderId; + } + if (message.shippingTrackingId !== "") { + obj.shippingTrackingId = message.shippingTrackingId; + } + if (message.shippingCost !== undefined) { + obj.shippingCost = Money.toJSON(message.shippingCost); + } + if (message.shippingAddress !== undefined) { + obj.shippingAddress = Address.toJSON(message.shippingAddress); + } + if (message.items?.length) { + obj.items = message.items.map((e) => OrderItem.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): OrderResult { + return OrderResult.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): OrderResult { + const message = createBaseOrderResult(); + message.orderId = object.orderId ?? ""; + message.shippingTrackingId = object.shippingTrackingId ?? ""; + message.shippingCost = (object.shippingCost !== undefined && object.shippingCost !== null) + ? Money.fromPartial(object.shippingCost) + : undefined; + message.shippingAddress = (object.shippingAddress !== undefined && object.shippingAddress !== null) + ? Address.fromPartial(object.shippingAddress) + : undefined; + message.items = object.items?.map((e) => OrderItem.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseSendOrderConfirmationRequest(): SendOrderConfirmationRequest { + return { email: "", order: undefined }; +} + +export const SendOrderConfirmationRequest = { + encode(message: SendOrderConfirmationRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.email !== "") { + writer.uint32(10).string(message.email); + } + if (message.order !== undefined) { + OrderResult.encode(message.order, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SendOrderConfirmationRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSendOrderConfirmationRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.email = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.order = OrderResult.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SendOrderConfirmationRequest { + return { + email: isSet(object.email) ? globalThis.String(object.email) : "", + order: isSet(object.order) ? OrderResult.fromJSON(object.order) : undefined, + }; + }, + + toJSON(message: SendOrderConfirmationRequest): unknown { + const obj: any = {}; + if (message.email !== "") { + obj.email = message.email; + } + if (message.order !== undefined) { + obj.order = OrderResult.toJSON(message.order); + } + return obj; + }, + + create, I>>(base?: I): SendOrderConfirmationRequest { + return SendOrderConfirmationRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): SendOrderConfirmationRequest { + const message = createBaseSendOrderConfirmationRequest(); + message.email = object.email ?? ""; + message.order = (object.order !== undefined && object.order !== null) + ? OrderResult.fromPartial(object.order) + : undefined; + return message; + }, +}; + +function createBasePlaceOrderRequest(): PlaceOrderRequest { + return { userId: "", userCurrency: "", address: undefined, email: "", creditCard: undefined }; +} + +export const PlaceOrderRequest = { + encode(message: PlaceOrderRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + if (message.userCurrency !== "") { + writer.uint32(18).string(message.userCurrency); + } + if (message.address !== undefined) { + Address.encode(message.address, writer.uint32(26).fork()).ldelim(); + } + if (message.email !== "") { + writer.uint32(42).string(message.email); + } + if (message.creditCard !== undefined) { + CreditCardInfo.encode(message.creditCard, writer.uint32(50).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): PlaceOrderRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePlaceOrderRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.userId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.userCurrency = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.address = Address.decode(reader, reader.uint32()); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.email = reader.string(); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.creditCard = CreditCardInfo.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): PlaceOrderRequest { + return { + userId: isSet(object.userId) ? globalThis.String(object.userId) : "", + userCurrency: isSet(object.userCurrency) ? globalThis.String(object.userCurrency) : "", + address: isSet(object.address) ? Address.fromJSON(object.address) : undefined, + email: isSet(object.email) ? globalThis.String(object.email) : "", + creditCard: isSet(object.creditCard) ? CreditCardInfo.fromJSON(object.creditCard) : undefined, + }; + }, + + toJSON(message: PlaceOrderRequest): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + if (message.userCurrency !== "") { + obj.userCurrency = message.userCurrency; + } + if (message.address !== undefined) { + obj.address = Address.toJSON(message.address); + } + if (message.email !== "") { + obj.email = message.email; + } + if (message.creditCard !== undefined) { + obj.creditCard = CreditCardInfo.toJSON(message.creditCard); + } + return obj; + }, + + create, I>>(base?: I): PlaceOrderRequest { + return PlaceOrderRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): PlaceOrderRequest { + const message = createBasePlaceOrderRequest(); + message.userId = object.userId ?? ""; + message.userCurrency = object.userCurrency ?? ""; + message.address = (object.address !== undefined && object.address !== null) + ? Address.fromPartial(object.address) + : undefined; + message.email = object.email ?? ""; + message.creditCard = (object.creditCard !== undefined && object.creditCard !== null) + ? CreditCardInfo.fromPartial(object.creditCard) + : undefined; + return message; + }, +}; + +function createBasePlaceOrderResponse(): PlaceOrderResponse { + return { order: undefined }; +} + +export const PlaceOrderResponse = { + encode(message: PlaceOrderResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.order !== undefined) { + OrderResult.encode(message.order, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): PlaceOrderResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePlaceOrderResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.order = OrderResult.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): PlaceOrderResponse { + return { order: isSet(object.order) ? OrderResult.fromJSON(object.order) : undefined }; + }, + + toJSON(message: PlaceOrderResponse): unknown { + const obj: any = {}; + if (message.order !== undefined) { + obj.order = OrderResult.toJSON(message.order); + } + return obj; + }, + + create, I>>(base?: I): PlaceOrderResponse { + return PlaceOrderResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): PlaceOrderResponse { + const message = createBasePlaceOrderResponse(); + message.order = (object.order !== undefined && object.order !== null) + ? OrderResult.fromPartial(object.order) + : undefined; + return message; + }, +}; + +function createBaseAdRequest(): AdRequest { + return { contextKeys: [] }; +} + +export const AdRequest = { + encode(message: AdRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.contextKeys) { + writer.uint32(10).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AdRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAdRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.contextKeys.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AdRequest { + return { + contextKeys: globalThis.Array.isArray(object?.contextKeys) + ? object.contextKeys.map((e: any) => globalThis.String(e)) + : [], + }; + }, + + toJSON(message: AdRequest): unknown { + const obj: any = {}; + if (message.contextKeys?.length) { + obj.contextKeys = message.contextKeys; + } + return obj; + }, + + create, I>>(base?: I): AdRequest { + return AdRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): AdRequest { + const message = createBaseAdRequest(); + message.contextKeys = object.contextKeys?.map((e) => e) || []; + return message; + }, +}; + +function createBaseAdResponse(): AdResponse { + return { ads: [] }; +} + +export const AdResponse = { + encode(message: AdResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.ads) { + Ad.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AdResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAdResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.ads.push(Ad.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AdResponse { + return { ads: globalThis.Array.isArray(object?.ads) ? object.ads.map((e: any) => Ad.fromJSON(e)) : [] }; + }, + + toJSON(message: AdResponse): unknown { + const obj: any = {}; + if (message.ads?.length) { + obj.ads = message.ads.map((e) => Ad.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): AdResponse { + return AdResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): AdResponse { + const message = createBaseAdResponse(); + message.ads = object.ads?.map((e) => Ad.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseAd(): Ad { + return { redirectUrl: "", text: "" }; +} + +export const Ad = { + encode(message: Ad, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.redirectUrl !== "") { + writer.uint32(10).string(message.redirectUrl); + } + if (message.text !== "") { + writer.uint32(18).string(message.text); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Ad { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAd(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.redirectUrl = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.text = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Ad { + return { + redirectUrl: isSet(object.redirectUrl) ? globalThis.String(object.redirectUrl) : "", + text: isSet(object.text) ? globalThis.String(object.text) : "", + }; + }, + + toJSON(message: Ad): unknown { + const obj: any = {}; + if (message.redirectUrl !== "") { + obj.redirectUrl = message.redirectUrl; + } + if (message.text !== "") { + obj.text = message.text; + } + return obj; + }, + + create, I>>(base?: I): Ad { + return Ad.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Ad { + const message = createBaseAd(); + message.redirectUrl = object.redirectUrl ?? ""; + message.text = object.text ?? ""; + return message; + }, +}; + +function createBaseFlag(): Flag { + return { name: "", description: "", enabled: false }; +} + +export const Flag = { + encode(message: Flag, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.description !== "") { + writer.uint32(18).string(message.description); + } + if (message.enabled !== false) { + writer.uint32(24).bool(message.enabled); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Flag { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseFlag(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.description = reader.string(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.enabled = reader.bool(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Flag { + return { + name: isSet(object.name) ? globalThis.String(object.name) : "", + description: isSet(object.description) ? globalThis.String(object.description) : "", + enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false, + }; + }, + + toJSON(message: Flag): unknown { + const obj: any = {}; + if (message.name !== "") { + obj.name = message.name; + } + if (message.description !== "") { + obj.description = message.description; + } + if (message.enabled !== false) { + obj.enabled = message.enabled; + } + return obj; + }, + + create, I>>(base?: I): Flag { + return Flag.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Flag { + const message = createBaseFlag(); + message.name = object.name ?? ""; + message.description = object.description ?? ""; + message.enabled = object.enabled ?? false; + return message; + }, +}; + +function createBaseGetFlagRequest(): GetFlagRequest { + return { name: "" }; +} + +export const GetFlagRequest = { + encode(message: GetFlagRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetFlagRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetFlagRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetFlagRequest { + return { name: isSet(object.name) ? globalThis.String(object.name) : "" }; + }, + + toJSON(message: GetFlagRequest): unknown { + const obj: any = {}; + if (message.name !== "") { + obj.name = message.name; + } + return obj; + }, + + create, I>>(base?: I): GetFlagRequest { + return GetFlagRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetFlagRequest { + const message = createBaseGetFlagRequest(); + message.name = object.name ?? ""; + return message; + }, +}; + +function createBaseGetFlagResponse(): GetFlagResponse { + return { flag: undefined }; +} + +export const GetFlagResponse = { + encode(message: GetFlagResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.flag !== undefined) { + Flag.encode(message.flag, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetFlagResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetFlagResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.flag = Flag.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetFlagResponse { + return { flag: isSet(object.flag) ? Flag.fromJSON(object.flag) : undefined }; + }, + + toJSON(message: GetFlagResponse): unknown { + const obj: any = {}; + if (message.flag !== undefined) { + obj.flag = Flag.toJSON(message.flag); + } + return obj; + }, + + create, I>>(base?: I): GetFlagResponse { + return GetFlagResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetFlagResponse { + const message = createBaseGetFlagResponse(); + message.flag = (object.flag !== undefined && object.flag !== null) ? Flag.fromPartial(object.flag) : undefined; + return message; + }, +}; + +function createBaseCreateFlagRequest(): CreateFlagRequest { + return { name: "", description: "", enabled: false }; +} + +export const CreateFlagRequest = { + encode(message: CreateFlagRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.description !== "") { + writer.uint32(18).string(message.description); + } + if (message.enabled !== false) { + writer.uint32(24).bool(message.enabled); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CreateFlagRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCreateFlagRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.description = reader.string(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.enabled = reader.bool(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CreateFlagRequest { + return { + name: isSet(object.name) ? globalThis.String(object.name) : "", + description: isSet(object.description) ? globalThis.String(object.description) : "", + enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false, + }; + }, + + toJSON(message: CreateFlagRequest): unknown { + const obj: any = {}; + if (message.name !== "") { + obj.name = message.name; + } + if (message.description !== "") { + obj.description = message.description; + } + if (message.enabled !== false) { + obj.enabled = message.enabled; + } + return obj; + }, + + create, I>>(base?: I): CreateFlagRequest { + return CreateFlagRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): CreateFlagRequest { + const message = createBaseCreateFlagRequest(); + message.name = object.name ?? ""; + message.description = object.description ?? ""; + message.enabled = object.enabled ?? false; + return message; + }, +}; + +function createBaseCreateFlagResponse(): CreateFlagResponse { + return { flag: undefined }; +} + +export const CreateFlagResponse = { + encode(message: CreateFlagResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.flag !== undefined) { + Flag.encode(message.flag, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CreateFlagResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCreateFlagResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.flag = Flag.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CreateFlagResponse { + return { flag: isSet(object.flag) ? Flag.fromJSON(object.flag) : undefined }; + }, + + toJSON(message: CreateFlagResponse): unknown { + const obj: any = {}; + if (message.flag !== undefined) { + obj.flag = Flag.toJSON(message.flag); + } + return obj; + }, + + create, I>>(base?: I): CreateFlagResponse { + return CreateFlagResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): CreateFlagResponse { + const message = createBaseCreateFlagResponse(); + message.flag = (object.flag !== undefined && object.flag !== null) ? Flag.fromPartial(object.flag) : undefined; + return message; + }, +}; + +function createBaseUpdateFlagRequest(): UpdateFlagRequest { + return { name: "", enabled: false }; +} + +export const UpdateFlagRequest = { + encode(message: UpdateFlagRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.enabled !== false) { + writer.uint32(16).bool(message.enabled); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateFlagRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateFlagRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.enabled = reader.bool(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateFlagRequest { + return { + name: isSet(object.name) ? globalThis.String(object.name) : "", + enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false, + }; + }, + + toJSON(message: UpdateFlagRequest): unknown { + const obj: any = {}; + if (message.name !== "") { + obj.name = message.name; + } + if (message.enabled !== false) { + obj.enabled = message.enabled; + } + return obj; + }, + + create, I>>(base?: I): UpdateFlagRequest { + return UpdateFlagRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): UpdateFlagRequest { + const message = createBaseUpdateFlagRequest(); + message.name = object.name ?? ""; + message.enabled = object.enabled ?? false; + return message; + }, +}; + +function createBaseUpdateFlagResponse(): UpdateFlagResponse { + return {}; +} + +export const UpdateFlagResponse = { + encode(_: UpdateFlagResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateFlagResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateFlagResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(_: any): UpdateFlagResponse { + return {}; + }, + + toJSON(_: UpdateFlagResponse): unknown { + const obj: any = {}; + return obj; + }, + + create, I>>(base?: I): UpdateFlagResponse { + return UpdateFlagResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(_: I): UpdateFlagResponse { + const message = createBaseUpdateFlagResponse(); + return message; + }, +}; + +function createBaseListFlagsRequest(): ListFlagsRequest { + return {}; +} + +export const ListFlagsRequest = { + encode(_: ListFlagsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ListFlagsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseListFlagsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(_: any): ListFlagsRequest { + return {}; + }, + + toJSON(_: ListFlagsRequest): unknown { + const obj: any = {}; + return obj; + }, + + create, I>>(base?: I): ListFlagsRequest { + return ListFlagsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(_: I): ListFlagsRequest { + const message = createBaseListFlagsRequest(); + return message; + }, +}; + +function createBaseListFlagsResponse(): ListFlagsResponse { + return { flag: [] }; +} + +export const ListFlagsResponse = { + encode(message: ListFlagsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.flag) { + Flag.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ListFlagsResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseListFlagsResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.flag.push(Flag.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ListFlagsResponse { + return { flag: globalThis.Array.isArray(object?.flag) ? object.flag.map((e: any) => Flag.fromJSON(e)) : [] }; + }, + + toJSON(message: ListFlagsResponse): unknown { + const obj: any = {}; + if (message.flag?.length) { + obj.flag = message.flag.map((e) => Flag.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): ListFlagsResponse { + return ListFlagsResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ListFlagsResponse { + const message = createBaseListFlagsResponse(); + message.flag = object.flag?.map((e) => Flag.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseDeleteFlagRequest(): DeleteFlagRequest { + return { name: "" }; +} + +export const DeleteFlagRequest = { + encode(message: DeleteFlagRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): DeleteFlagRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseDeleteFlagRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): DeleteFlagRequest { + return { name: isSet(object.name) ? globalThis.String(object.name) : "" }; + }, + + toJSON(message: DeleteFlagRequest): unknown { + const obj: any = {}; + if (message.name !== "") { + obj.name = message.name; + } + return obj; + }, + + create, I>>(base?: I): DeleteFlagRequest { + return DeleteFlagRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): DeleteFlagRequest { + const message = createBaseDeleteFlagRequest(); + message.name = object.name ?? ""; + return message; + }, +}; + +function createBaseDeleteFlagResponse(): DeleteFlagResponse { + return {}; +} + +export const DeleteFlagResponse = { + encode(_: DeleteFlagResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): DeleteFlagResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseDeleteFlagResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(_: any): DeleteFlagResponse { + return {}; + }, + + toJSON(_: DeleteFlagResponse): unknown { + const obj: any = {}; + return obj; + }, + + create, I>>(base?: I): DeleteFlagResponse { + return DeleteFlagResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(_: I): DeleteFlagResponse { + const message = createBaseDeleteFlagResponse(); + return message; + }, +}; + +export type CartServiceService = typeof CartServiceService; +export const CartServiceService = { + addItem: { + path: "/oteldemo.CartService/AddItem", + requestStream: false, + responseStream: false, + requestSerialize: (value: AddItemRequest) => Buffer.from(AddItemRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => AddItemRequest.decode(value), + responseSerialize: (value: Empty) => Buffer.from(Empty.encode(value).finish()), + responseDeserialize: (value: Buffer) => Empty.decode(value), + }, + getCart: { + path: "/oteldemo.CartService/GetCart", + requestStream: false, + responseStream: false, + requestSerialize: (value: GetCartRequest) => Buffer.from(GetCartRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => GetCartRequest.decode(value), + responseSerialize: (value: Cart) => Buffer.from(Cart.encode(value).finish()), + responseDeserialize: (value: Buffer) => Cart.decode(value), + }, + emptyCart: { + path: "/oteldemo.CartService/EmptyCart", + requestStream: false, + responseStream: false, + requestSerialize: (value: EmptyCartRequest) => Buffer.from(EmptyCartRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => EmptyCartRequest.decode(value), + responseSerialize: (value: Empty) => Buffer.from(Empty.encode(value).finish()), + responseDeserialize: (value: Buffer) => Empty.decode(value), + }, +} as const; + +export interface CartServiceServer extends UntypedServiceImplementation { + addItem: handleUnaryCall; + getCart: handleUnaryCall; + emptyCart: handleUnaryCall; +} + +export interface CartServiceClient extends Client { + addItem(request: AddItemRequest, callback: (error: ServiceError | null, response: Empty) => void): ClientUnaryCall; + addItem( + request: AddItemRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; + addItem( + request: AddItemRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; + getCart(request: GetCartRequest, callback: (error: ServiceError | null, response: Cart) => void): ClientUnaryCall; + getCart( + request: GetCartRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Cart) => void, + ): ClientUnaryCall; + getCart( + request: GetCartRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Cart) => void, + ): ClientUnaryCall; + emptyCart( + request: EmptyCartRequest, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; + emptyCart( + request: EmptyCartRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; + emptyCart( + request: EmptyCartRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; +} + +export const CartServiceClient = makeGenericClientConstructor( + CartServiceService, + "oteldemo.CartService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): CartServiceClient; + service: typeof CartServiceService; + serviceName: string; +}; + +export type RecommendationServiceService = typeof RecommendationServiceService; +export const RecommendationServiceService = { + listRecommendations: { + path: "/oteldemo.RecommendationService/ListRecommendations", + requestStream: false, + responseStream: false, + requestSerialize: (value: ListRecommendationsRequest) => + Buffer.from(ListRecommendationsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => ListRecommendationsRequest.decode(value), + responseSerialize: (value: ListRecommendationsResponse) => + Buffer.from(ListRecommendationsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => ListRecommendationsResponse.decode(value), + }, +} as const; + +export interface RecommendationServiceServer extends UntypedServiceImplementation { + listRecommendations: handleUnaryCall; +} + +export interface RecommendationServiceClient extends Client { + listRecommendations( + request: ListRecommendationsRequest, + callback: (error: ServiceError | null, response: ListRecommendationsResponse) => void, + ): ClientUnaryCall; + listRecommendations( + request: ListRecommendationsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: ListRecommendationsResponse) => void, + ): ClientUnaryCall; + listRecommendations( + request: ListRecommendationsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: ListRecommendationsResponse) => void, + ): ClientUnaryCall; +} + +export const RecommendationServiceClient = makeGenericClientConstructor( + RecommendationServiceService, + "oteldemo.RecommendationService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): RecommendationServiceClient; + service: typeof RecommendationServiceService; + serviceName: string; +}; + +export type ProductCatalogServiceService = typeof ProductCatalogServiceService; +export const ProductCatalogServiceService = { + listProducts: { + path: "/oteldemo.ProductCatalogService/ListProducts", + requestStream: false, + responseStream: false, + requestSerialize: (value: Empty) => Buffer.from(Empty.encode(value).finish()), + requestDeserialize: (value: Buffer) => Empty.decode(value), + responseSerialize: (value: ListProductsResponse) => Buffer.from(ListProductsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => ListProductsResponse.decode(value), + }, + getProduct: { + path: "/oteldemo.ProductCatalogService/GetProduct", + requestStream: false, + responseStream: false, + requestSerialize: (value: GetProductRequest) => Buffer.from(GetProductRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => GetProductRequest.decode(value), + responseSerialize: (value: Product) => Buffer.from(Product.encode(value).finish()), + responseDeserialize: (value: Buffer) => Product.decode(value), + }, + searchProducts: { + path: "/oteldemo.ProductCatalogService/SearchProducts", + requestStream: false, + responseStream: false, + requestSerialize: (value: SearchProductsRequest) => Buffer.from(SearchProductsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => SearchProductsRequest.decode(value), + responseSerialize: (value: SearchProductsResponse) => Buffer.from(SearchProductsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => SearchProductsResponse.decode(value), + }, +} as const; + +export interface ProductCatalogServiceServer extends UntypedServiceImplementation { + listProducts: handleUnaryCall; + getProduct: handleUnaryCall; + searchProducts: handleUnaryCall; +} + +export interface ProductCatalogServiceClient extends Client { + listProducts( + request: Empty, + callback: (error: ServiceError | null, response: ListProductsResponse) => void, + ): ClientUnaryCall; + listProducts( + request: Empty, + metadata: Metadata, + callback: (error: ServiceError | null, response: ListProductsResponse) => void, + ): ClientUnaryCall; + listProducts( + request: Empty, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: ListProductsResponse) => void, + ): ClientUnaryCall; + getProduct( + request: GetProductRequest, + callback: (error: ServiceError | null, response: Product) => void, + ): ClientUnaryCall; + getProduct( + request: GetProductRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Product) => void, + ): ClientUnaryCall; + getProduct( + request: GetProductRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Product) => void, + ): ClientUnaryCall; + searchProducts( + request: SearchProductsRequest, + callback: (error: ServiceError | null, response: SearchProductsResponse) => void, + ): ClientUnaryCall; + searchProducts( + request: SearchProductsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: SearchProductsResponse) => void, + ): ClientUnaryCall; + searchProducts( + request: SearchProductsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: SearchProductsResponse) => void, + ): ClientUnaryCall; +} + +export const ProductCatalogServiceClient = makeGenericClientConstructor( + ProductCatalogServiceService, + "oteldemo.ProductCatalogService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): ProductCatalogServiceClient; + service: typeof ProductCatalogServiceService; + serviceName: string; +}; + +export type ShippingServiceService = typeof ShippingServiceService; +export const ShippingServiceService = { + getQuote: { + path: "/oteldemo.ShippingService/GetQuote", + requestStream: false, + responseStream: false, + requestSerialize: (value: GetQuoteRequest) => Buffer.from(GetQuoteRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => GetQuoteRequest.decode(value), + responseSerialize: (value: GetQuoteResponse) => Buffer.from(GetQuoteResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => GetQuoteResponse.decode(value), + }, + shipOrder: { + path: "/oteldemo.ShippingService/ShipOrder", + requestStream: false, + responseStream: false, + requestSerialize: (value: ShipOrderRequest) => Buffer.from(ShipOrderRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => ShipOrderRequest.decode(value), + responseSerialize: (value: ShipOrderResponse) => Buffer.from(ShipOrderResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => ShipOrderResponse.decode(value), + }, +} as const; + +export interface ShippingServiceServer extends UntypedServiceImplementation { + getQuote: handleUnaryCall; + shipOrder: handleUnaryCall; +} + +export interface ShippingServiceClient extends Client { + getQuote( + request: GetQuoteRequest, + callback: (error: ServiceError | null, response: GetQuoteResponse) => void, + ): ClientUnaryCall; + getQuote( + request: GetQuoteRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: GetQuoteResponse) => void, + ): ClientUnaryCall; + getQuote( + request: GetQuoteRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: GetQuoteResponse) => void, + ): ClientUnaryCall; + shipOrder( + request: ShipOrderRequest, + callback: (error: ServiceError | null, response: ShipOrderResponse) => void, + ): ClientUnaryCall; + shipOrder( + request: ShipOrderRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: ShipOrderResponse) => void, + ): ClientUnaryCall; + shipOrder( + request: ShipOrderRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: ShipOrderResponse) => void, + ): ClientUnaryCall; +} + +export const ShippingServiceClient = makeGenericClientConstructor( + ShippingServiceService, + "oteldemo.ShippingService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): ShippingServiceClient; + service: typeof ShippingServiceService; + serviceName: string; +}; + +export type CurrencyServiceService = typeof CurrencyServiceService; +export const CurrencyServiceService = { + getSupportedCurrencies: { + path: "/oteldemo.CurrencyService/GetSupportedCurrencies", + requestStream: false, + responseStream: false, + requestSerialize: (value: Empty) => Buffer.from(Empty.encode(value).finish()), + requestDeserialize: (value: Buffer) => Empty.decode(value), + responseSerialize: (value: GetSupportedCurrenciesResponse) => + Buffer.from(GetSupportedCurrenciesResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => GetSupportedCurrenciesResponse.decode(value), + }, + convert: { + path: "/oteldemo.CurrencyService/Convert", + requestStream: false, + responseStream: false, + requestSerialize: (value: CurrencyConversionRequest) => + Buffer.from(CurrencyConversionRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => CurrencyConversionRequest.decode(value), + responseSerialize: (value: Money) => Buffer.from(Money.encode(value).finish()), + responseDeserialize: (value: Buffer) => Money.decode(value), + }, +} as const; + +export interface CurrencyServiceServer extends UntypedServiceImplementation { + getSupportedCurrencies: handleUnaryCall; + convert: handleUnaryCall; +} + +export interface CurrencyServiceClient extends Client { + getSupportedCurrencies( + request: Empty, + callback: (error: ServiceError | null, response: GetSupportedCurrenciesResponse) => void, + ): ClientUnaryCall; + getSupportedCurrencies( + request: Empty, + metadata: Metadata, + callback: (error: ServiceError | null, response: GetSupportedCurrenciesResponse) => void, + ): ClientUnaryCall; + getSupportedCurrencies( + request: Empty, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: GetSupportedCurrenciesResponse) => void, + ): ClientUnaryCall; + convert( + request: CurrencyConversionRequest, + callback: (error: ServiceError | null, response: Money) => void, + ): ClientUnaryCall; + convert( + request: CurrencyConversionRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Money) => void, + ): ClientUnaryCall; + convert( + request: CurrencyConversionRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Money) => void, + ): ClientUnaryCall; +} + +export const CurrencyServiceClient = makeGenericClientConstructor( + CurrencyServiceService, + "oteldemo.CurrencyService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): CurrencyServiceClient; + service: typeof CurrencyServiceService; + serviceName: string; +}; + +export type PaymentServiceService = typeof PaymentServiceService; +export const PaymentServiceService = { + charge: { + path: "/oteldemo.PaymentService/Charge", + requestStream: false, + responseStream: false, + requestSerialize: (value: ChargeRequest) => Buffer.from(ChargeRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => ChargeRequest.decode(value), + responseSerialize: (value: ChargeResponse) => Buffer.from(ChargeResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => ChargeResponse.decode(value), + }, +} as const; + +export interface PaymentServiceServer extends UntypedServiceImplementation { + charge: handleUnaryCall; +} + +export interface PaymentServiceClient extends Client { + charge( + request: ChargeRequest, + callback: (error: ServiceError | null, response: ChargeResponse) => void, + ): ClientUnaryCall; + charge( + request: ChargeRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: ChargeResponse) => void, + ): ClientUnaryCall; + charge( + request: ChargeRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: ChargeResponse) => void, + ): ClientUnaryCall; +} + +export const PaymentServiceClient = makeGenericClientConstructor( + PaymentServiceService, + "oteldemo.PaymentService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): PaymentServiceClient; + service: typeof PaymentServiceService; + serviceName: string; +}; + +export type EmailServiceService = typeof EmailServiceService; +export const EmailServiceService = { + sendOrderConfirmation: { + path: "/oteldemo.EmailService/SendOrderConfirmation", + requestStream: false, + responseStream: false, + requestSerialize: (value: SendOrderConfirmationRequest) => + Buffer.from(SendOrderConfirmationRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => SendOrderConfirmationRequest.decode(value), + responseSerialize: (value: Empty) => Buffer.from(Empty.encode(value).finish()), + responseDeserialize: (value: Buffer) => Empty.decode(value), + }, +} as const; + +export interface EmailServiceServer extends UntypedServiceImplementation { + sendOrderConfirmation: handleUnaryCall; +} + +export interface EmailServiceClient extends Client { + sendOrderConfirmation( + request: SendOrderConfirmationRequest, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; + sendOrderConfirmation( + request: SendOrderConfirmationRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; + sendOrderConfirmation( + request: SendOrderConfirmationRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Empty) => void, + ): ClientUnaryCall; +} + +export const EmailServiceClient = makeGenericClientConstructor( + EmailServiceService, + "oteldemo.EmailService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): EmailServiceClient; + service: typeof EmailServiceService; + serviceName: string; +}; + +export type CheckoutServiceService = typeof CheckoutServiceService; +export const CheckoutServiceService = { + placeOrder: { + path: "/oteldemo.CheckoutService/PlaceOrder", + requestStream: false, + responseStream: false, + requestSerialize: (value: PlaceOrderRequest) => Buffer.from(PlaceOrderRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => PlaceOrderRequest.decode(value), + responseSerialize: (value: PlaceOrderResponse) => Buffer.from(PlaceOrderResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => PlaceOrderResponse.decode(value), + }, +} as const; + +export interface CheckoutServiceServer extends UntypedServiceImplementation { + placeOrder: handleUnaryCall; +} + +export interface CheckoutServiceClient extends Client { + placeOrder( + request: PlaceOrderRequest, + callback: (error: ServiceError | null, response: PlaceOrderResponse) => void, + ): ClientUnaryCall; + placeOrder( + request: PlaceOrderRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: PlaceOrderResponse) => void, + ): ClientUnaryCall; + placeOrder( + request: PlaceOrderRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: PlaceOrderResponse) => void, + ): ClientUnaryCall; +} + +export const CheckoutServiceClient = makeGenericClientConstructor( + CheckoutServiceService, + "oteldemo.CheckoutService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): CheckoutServiceClient; + service: typeof CheckoutServiceService; + serviceName: string; +}; + +export type AdServiceService = typeof AdServiceService; +export const AdServiceService = { + getAds: { + path: "/oteldemo.AdService/GetAds", + requestStream: false, + responseStream: false, + requestSerialize: (value: AdRequest) => Buffer.from(AdRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => AdRequest.decode(value), + responseSerialize: (value: AdResponse) => Buffer.from(AdResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => AdResponse.decode(value), + }, +} as const; + +export interface AdServiceServer extends UntypedServiceImplementation { + getAds: handleUnaryCall; +} + +export interface AdServiceClient extends Client { + getAds(request: AdRequest, callback: (error: ServiceError | null, response: AdResponse) => void): ClientUnaryCall; + getAds( + request: AdRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: AdResponse) => void, + ): ClientUnaryCall; + getAds( + request: AdRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: AdResponse) => void, + ): ClientUnaryCall; +} + +export const AdServiceClient = makeGenericClientConstructor(AdServiceService, "oteldemo.AdService") as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): AdServiceClient; + service: typeof AdServiceService; + serviceName: string; +}; + +export type FeatureFlagServiceService = typeof FeatureFlagServiceService; +export const FeatureFlagServiceService = { + getFlag: { + path: "/oteldemo.FeatureFlagService/GetFlag", + requestStream: false, + responseStream: false, + requestSerialize: (value: GetFlagRequest) => Buffer.from(GetFlagRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => GetFlagRequest.decode(value), + responseSerialize: (value: GetFlagResponse) => Buffer.from(GetFlagResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => GetFlagResponse.decode(value), + }, + createFlag: { + path: "/oteldemo.FeatureFlagService/CreateFlag", + requestStream: false, + responseStream: false, + requestSerialize: (value: CreateFlagRequest) => Buffer.from(CreateFlagRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => CreateFlagRequest.decode(value), + responseSerialize: (value: CreateFlagResponse) => Buffer.from(CreateFlagResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => CreateFlagResponse.decode(value), + }, + updateFlag: { + path: "/oteldemo.FeatureFlagService/UpdateFlag", + requestStream: false, + responseStream: false, + requestSerialize: (value: UpdateFlagRequest) => Buffer.from(UpdateFlagRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => UpdateFlagRequest.decode(value), + responseSerialize: (value: UpdateFlagResponse) => Buffer.from(UpdateFlagResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => UpdateFlagResponse.decode(value), + }, + listFlags: { + path: "/oteldemo.FeatureFlagService/ListFlags", + requestStream: false, + responseStream: false, + requestSerialize: (value: ListFlagsRequest) => Buffer.from(ListFlagsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => ListFlagsRequest.decode(value), + responseSerialize: (value: ListFlagsResponse) => Buffer.from(ListFlagsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => ListFlagsResponse.decode(value), + }, + deleteFlag: { + path: "/oteldemo.FeatureFlagService/DeleteFlag", + requestStream: false, + responseStream: false, + requestSerialize: (value: DeleteFlagRequest) => Buffer.from(DeleteFlagRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => DeleteFlagRequest.decode(value), + responseSerialize: (value: DeleteFlagResponse) => Buffer.from(DeleteFlagResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => DeleteFlagResponse.decode(value), + }, +} as const; + +export interface FeatureFlagServiceServer extends UntypedServiceImplementation { + getFlag: handleUnaryCall; + createFlag: handleUnaryCall; + updateFlag: handleUnaryCall; + listFlags: handleUnaryCall; + deleteFlag: handleUnaryCall; +} + +export interface FeatureFlagServiceClient extends Client { + getFlag( + request: GetFlagRequest, + callback: (error: ServiceError | null, response: GetFlagResponse) => void, + ): ClientUnaryCall; + getFlag( + request: GetFlagRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: GetFlagResponse) => void, + ): ClientUnaryCall; + getFlag( + request: GetFlagRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: GetFlagResponse) => void, + ): ClientUnaryCall; + createFlag( + request: CreateFlagRequest, + callback: (error: ServiceError | null, response: CreateFlagResponse) => void, + ): ClientUnaryCall; + createFlag( + request: CreateFlagRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: CreateFlagResponse) => void, + ): ClientUnaryCall; + createFlag( + request: CreateFlagRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: CreateFlagResponse) => void, + ): ClientUnaryCall; + updateFlag( + request: UpdateFlagRequest, + callback: (error: ServiceError | null, response: UpdateFlagResponse) => void, + ): ClientUnaryCall; + updateFlag( + request: UpdateFlagRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: UpdateFlagResponse) => void, + ): ClientUnaryCall; + updateFlag( + request: UpdateFlagRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: UpdateFlagResponse) => void, + ): ClientUnaryCall; + listFlags( + request: ListFlagsRequest, + callback: (error: ServiceError | null, response: ListFlagsResponse) => void, + ): ClientUnaryCall; + listFlags( + request: ListFlagsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: ListFlagsResponse) => void, + ): ClientUnaryCall; + listFlags( + request: ListFlagsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: ListFlagsResponse) => void, + ): ClientUnaryCall; + deleteFlag( + request: DeleteFlagRequest, + callback: (error: ServiceError | null, response: DeleteFlagResponse) => void, + ): ClientUnaryCall; + deleteFlag( + request: DeleteFlagRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: DeleteFlagResponse) => void, + ): ClientUnaryCall; + deleteFlag( + request: DeleteFlagRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: DeleteFlagResponse) => void, + ): ClientUnaryCall; +} + +export const FeatureFlagServiceClient = makeGenericClientConstructor( + FeatureFlagServiceService, + "oteldemo.FeatureFlagService", +) as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): FeatureFlagServiceClient; + service: typeof FeatureFlagServiceService; + serviceName: string; +}; + +type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; + +export type DeepPartial = T extends Builtin ? T + : T extends globalThis.Array ? globalThis.Array> + : T extends ReadonlyArray ? ReadonlyArray> + : T extends {} ? { [K in keyof T]?: DeepPartial } + : Partial; + +type KeysOfUnion = T extends T ? keyof T : never; +export type Exact = P extends Builtin ? P + : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; + +function longToNumber(long: Long): number { + if (long.gt(globalThis.Number.MAX_SAFE_INTEGER)) { + throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); + } + if (long.lt(globalThis.Number.MIN_SAFE_INTEGER)) { + throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER"); + } + return long.toNumber(); +} + +if (_m0.util.Long !== Long) { + _m0.util.Long = Long as any; + _m0.configure(); +} + +function isSet(value: any): boolean { + return value !== null && value !== undefined; +} diff --git a/src/react-native-app/providers/Cart.provider.tsx b/src/react-native-app/providers/Cart.provider.tsx new file mode 100644 index 0000000000..d7212fb165 --- /dev/null +++ b/src/react-native-app/providers/Cart.provider.tsx @@ -0,0 +1,82 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/providers/Cart.provider.tsx + */ +import React, { createContext, useCallback, useContext, useMemo } from "react"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import ApiGateway from "@/gateways/Api.gateway"; +import { CartItem, OrderResult, PlaceOrderRequest } from "@/protos/demo"; +import { IProductCart } from "@/types/Cart"; + +interface IContext { + cart: IProductCart; + addItem(item: CartItem): void; + emptyCart(): void; + placeOrder(order: PlaceOrderRequest): Promise; +} + +export const Context = createContext({ + cart: { userId: "", items: [] }, + addItem: () => {}, + emptyCart: () => {}, + placeOrder: () => Promise.resolve({} as OrderResult), +}); + +interface IProps { + children: React.ReactNode; +} + +export const useCart = () => useContext(Context); + +const CartProvider = ({ children }: IProps) => { + // TODO simplify react native demo for now by hard-coding the selected currency + const selectedCurrency = "USD"; + const queryClient = useQueryClient(); + const mutationOptions = useMemo( + () => ({ + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["cart"] }); + }, + }), + [queryClient], + ); + + const { data: cart = { userId: "", items: [] } } = useQuery( + ["cart", selectedCurrency], + () => ApiGateway.getCart(selectedCurrency), + ); + const addCartMutation = useMutation(ApiGateway.addCartItem, mutationOptions); + const emptyCartMutation = useMutation(ApiGateway.emptyCart, mutationOptions); + const placeOrderMutation = useMutation( + ApiGateway.placeOrder, + mutationOptions, + ); + + const addItem = useCallback( + (item: CartItem) => + addCartMutation.mutateAsync({ ...item, currencyCode: selectedCurrency }), + [addCartMutation, selectedCurrency], + ); + const emptyCart = useCallback( + () => emptyCartMutation.mutateAsync(), + [emptyCartMutation], + ); + const placeOrder = useCallback( + (order: PlaceOrderRequest) => + placeOrderMutation.mutateAsync({ + ...order, + currencyCode: selectedCurrency, + }), + [placeOrderMutation, selectedCurrency], + ); + + const value = useMemo( + () => ({ cart, addItem, emptyCart, placeOrder }), + [cart, addItem, emptyCart, placeOrder], + ); + + return {children}; +}; + +export default CartProvider; diff --git a/src/react-native-app/tsconfig.json b/src/react-native-app/tsconfig.json new file mode 100644 index 0000000000..909e901086 --- /dev/null +++ b/src/react-native-app/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true, + "paths": { + "@/*": [ + "./*" + ] + } + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ".expo/types/**/*.ts", + "expo-env.d.ts" + ] +} diff --git a/src/react-native-app/types/Cart.ts b/src/react-native-app/types/Cart.ts new file mode 100644 index 0000000000..8baeacc467 --- /dev/null +++ b/src/react-native-app/types/Cart.ts @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/types/Cart.ts + */ +import { Address, Cart, OrderItem, OrderResult, Product } from "@/protos/demo"; + +export interface IProductCartItem { + productId: string; + quantity: number; + product: Product; +} + +export interface IProductCheckoutItem extends OrderItem { + item: IProductCartItem; +} + +export interface IProductCheckout extends OrderResult { + items: IProductCheckoutItem[]; + shippingAddress: Address; +} + +export interface IProductCart extends Cart { + items: IProductCartItem[]; +} diff --git a/src/react-native-app/utils/Localhost.ts b/src/react-native-app/utils/Localhost.ts new file mode 100644 index 0000000000..8b3eaef178 --- /dev/null +++ b/src/react-native-app/utils/Localhost.ts @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import DeviceInfo from "react-native-device-info"; +import { Platform } from "react-native"; + +const getLocalhost = async (): Promise => { + const isEmulator = await DeviceInfo.isEmulator(); + + // The Android emulator has a special loopback for localhost + // https://developer.android.com/studio/run/emulator-networking#networkaddresses + return Platform.OS === "android" && isEmulator ? "10.0.2.2" : "localhost"; +}; + +export default getLocalhost; diff --git a/src/react-native-app/utils/Request.ts b/src/react-native-app/utils/Request.ts new file mode 100644 index 0000000000..3f22faa272 --- /dev/null +++ b/src/react-native-app/utils/Request.ts @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/utils/Request.ts + */ +import getLocalhost from "@/utils/Localhost"; + +interface IRequestParams { + url: string; + body?: object; + method?: "GET" | "POST" | "PUT" | "DELETE"; + queryParams?: Record; + headers?: Record; +} + +const request = async ({ + url = "", + method = "GET", + body, + queryParams = {}, + headers = { + "content-type": "application/json", + }, +}: IRequestParams): Promise => { + const localhost = await getLocalhost(); + const API_URL = `http://${localhost}:${process.env.EXPO_PUBLIC_FRONTEND_PROXY_PORT}`; + const requestURL = `${API_URL}${url}?${new URLSearchParams(queryParams).toString()}`; + const requestBody = body ? JSON.stringify(body) : undefined; + const response = await fetch(requestURL, { + method, + body: requestBody, + headers, + }); + + const responseText = await response.text(); + + if (!!responseText) return JSON.parse(responseText); + + return undefined as unknown as T; +}; + +export default request; diff --git a/src/react-native-app/utils/SessionIdProcessor.ts b/src/react-native-app/utils/SessionIdProcessor.ts new file mode 100644 index 0000000000..217ff42fa2 --- /dev/null +++ b/src/react-native-app/utils/SessionIdProcessor.ts @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +/** + * Copied with modification from src/frontend/utils/telemetry/SessionIdProcessor.ts + */ +import { Context } from "@opentelemetry/api"; +import { + ReadableSpan, + Span, + SpanProcessor, +} from "@opentelemetry/sdk-trace-web"; +import SessionGateway from "@/gateways/Session.gateway"; + +export class SessionIdProcessor implements SpanProcessor { + forceFlush(): Promise { + return Promise.resolve(); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onStart(span: Span, parentContext: Context): void { + SessionGateway.getSession().then(({ userId }) => { + span.setAttribute("session.id", userId); + }); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function + onEnd(span: ReadableSpan): void {} + + shutdown(): Promise { + return Promise.resolve(); + } +} From d2caef6694e4909f28f4fccf42d92f1332833772 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Sat, 21 Dec 2024 06:10:12 -0500 Subject: [PATCH 14/24] [chore] - update demo dependencies (#1855) --- .env | 16 ++++++++-------- CHANGELOG.md | 2 ++ docker-compose.minimal.yml | 2 +- docker-compose.yml | 2 +- src/prometheus/prometheus-config.yaml | 25 +++++++++++++++++++------ 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/.env b/.env index f55b2216d8..8dfa5e35ce 100644 --- a/.env +++ b/.env @@ -7,18 +7,18 @@ DEMO_VERSION=latest # Build Args TRACETEST_IMAGE_VERSION=v1.7.1 -OTEL_JAVA_AGENT_VERSION=2.9.0 -OPENTELEMETRY_CPP_VERSION=1.17.0 +OTEL_JAVA_AGENT_VERSION=2.10.0 +OPENTELEMETRY_CPP_VERSION=1.18.0 # Dependent images -COLLECTOR_CONTRIB_IMAGE=otel/opentelemetry-collector-contrib:0.113.0 -FLAGD_IMAGE=ghcr.io/open-feature/flagd:v0.11.4 -GRAFANA_IMAGE=grafana/grafana:11.3.0 -JAEGERTRACING_IMAGE=jaegertracing/all-in-one:1.62.0 +COLLECTOR_CONTRIB_IMAGE=ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.116.1 +FLAGD_IMAGE=ghcr.io/open-feature/flagd:v0.11.5 +GRAFANA_IMAGE=grafana/grafana:11.4.0 +JAEGERTRACING_IMAGE=jaegertracing/all-in-one:1.64.0 # must also update version field in src/grafana/provisioning/datasources/opensearch.yaml OPENSEARCH_IMAGE=opensearchproject/opensearch:2.18.0 -POSTGRES_IMAGE=postgres:17.0 -PROMETHEUS_IMAGE=quay.io/prometheus/prometheus:v2.55.1 +POSTGRES_IMAGE=postgres:17.2 +PROMETHEUS_IMAGE=quay.io/prometheus/prometheus:v3.0.1 VALKEY_IMAGE=valkey/valkey:8.0-alpine TRACETEST_IMAGE=kubeshop/tracetest:${TRACETEST_IMAGE_VERSION} diff --git a/CHANGELOG.md b/CHANGELOG.md index fb2d647ffc..d294214c67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,8 @@ the release. ([#1842](https://github.com/open-telemetry/opentelemetry-demo/pull/1842)) * [react-native-app] Add React Native example app ([#1781](https://github.com/open-telemetry/opentelemetry-demo/pull/1781)) +* [chore] Update demo Dependencies (Collector, Grafana, FlagD, Jaeger, Prometheus) + ([#1855](https://github.com/open-telemetry/opentelemetry-demo/pull/1855)) ## 1.12.0 diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 01ef2d74f6..44f40f1a65 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -624,8 +624,8 @@ services: - --storage.tsdb.path=/prometheus - --web.enable-lifecycle - --web.route-prefix=/ + - --web.enable-otlp-receiver - --enable-feature=exemplar-storage - - --enable-feature=otlp-write-receiver volumes: - ./src/prometheus/prometheus-config.yaml:/etc/prometheus/prometheus-config.yaml deploy: diff --git a/docker-compose.yml b/docker-compose.yml index 1c6614936c..b79744eadf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -768,8 +768,8 @@ services: - --storage.tsdb.path=/prometheus - --web.enable-lifecycle - --web.route-prefix=/ + - --web.enable-otlp-receiver - --enable-feature=exemplar-storage - - --enable-feature=otlp-write-receiver volumes: - ./src/prometheus/prometheus-config.yaml:/etc/prometheus/prometheus-config.yaml deploy: diff --git a/src/prometheus/prometheus-config.yaml b/src/prometheus/prometheus-config.yaml index ecc0d1090c..736212af42 100644 --- a/src/prometheus/prometheus-config.yaml +++ b/src/prometheus/prometheus-config.yaml @@ -2,13 +2,26 @@ # SPDX-License-Identifier: Apache-2.0 global: - evaluation_interval: 30s scrape_interval: 5s + scrape_timeout: 3s + evaluation_interval: 30s + +otlp: + promote_resource_attributes: + - service.instance.id + - service.name + - service.namespace + - cloud.availability_zone + - cloud.region + - container.name + - deployment.environment.name + +scrape_configs: + - job_name: otel-collector + static_configs: + - targets: + - 'otel-collector:8888' + storage: tsdb: out_of_order_time_window: 30m -scrape_configs: -- job_name: otel-collector - static_configs: - - targets: - - 'otel-collector:8888' From d75a68d2142fa2a33603c4c398f90d4c2eb3e048 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Sun, 22 Dec 2024 07:07:56 -0500 Subject: [PATCH 15/24] [load-generator] rename loadgenerator to load-generator (#1856) * rename loadgenerator to load-generator * rename loadgenerator to load-generator --------- Co-authored-by: Juliano Costa --- .env | 4 ++-- .github/workflows/component-build-images.yml | 4 ++-- CHANGELOG.md | 14 ++++++++------ docker-compose.minimal.yml | 10 +++++----- docker-compose.yml | 10 +++++----- renovate.json5 | 4 ++-- src/flagd/demo.flagd.json | 2 +- src/{loadgenerator => load-generator}/Dockerfile | 6 +++--- src/{loadgenerator => load-generator}/README.md | 0 .../locustfile.py | 4 ++-- src/{loadgenerator => load-generator}/people.json | 0 .../requirements.txt | 0 12 files changed, 30 insertions(+), 28 deletions(-) rename src/{loadgenerator => load-generator}/Dockerfile (80%) rename src/{loadgenerator => load-generator}/README.md (100%) rename src/{loadgenerator => load-generator}/locustfile.py (98%) rename src/{loadgenerator => load-generator}/people.json (100%) rename src/{loadgenerator => load-generator}/requirements.txt (100%) diff --git a/.env b/.env index 8dfa5e35ce..c906d51b7c 100644 --- a/.env +++ b/.env @@ -96,10 +96,10 @@ IMAGE_PROVIDER_DOCKERFILE=./src/imageprovider/Dockerfile LOCUST_WEB_PORT=8089 LOCUST_USERS=5 LOCUST_HOST=http://${FRONTEND_PROXY_ADDR} -LOCUST_WEB_HOST=loadgenerator +LOCUST_WEB_HOST=load-generator LOCUST_AUTOSTART=true LOCUST_HEADLESS=false -LOAD_GENERATOR_DOCKERFILE=./src/loadgenerator/Dockerfile +LOAD_GENERATOR_DOCKERFILE=./src/load-generator/Dockerfile # Payment Service PAYMENT_SERVICE_PORT=50051 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index a36b8fbbac..3681a71eea 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -99,8 +99,8 @@ jobs: tag_suffix: kafka context: ./ setup-qemu: true - - file: ./src/loadgenerator/Dockerfile - tag_suffix: loadgenerator + - file: ./src/load-generator/Dockerfile + tag_suffix: load-generator context: ./ setup-qemu: true - file: ./src/paymentservice/Dockerfile diff --git a/CHANGELOG.md b/CHANGELOG.md index d294214c67..394d549146 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,10 +17,12 @@ the release. ([#1779](https://github.com/open-telemetry/opentelemetry-demo/pull/1779)) * [accountingservice] bump OpenTelemetry .NET Automatic Instrumentation to 1.9.0 ([#1780](https://github.com/open-telemetry/opentelemetry-demo/pull/1780)) -* [chore] update memory limits for flagd, flagdui, and loadgenerator - ([#1786](https://github.com/open-telemetry/opentelemetry-demo/pull/1786)) +* [react-native-app] Add React Native example app + ([#1781](https://github.com/open-telemetry/opentelemetry-demo/pull/1781)) * [chore] Add multi-platform build support ([#1785](https://github.com/open-telemetry/opentelemetry-demo/pull/1785)) +* [chore] update memory limits for flagd, flagdui, and loadgenerator + ([#1786](https://github.com/open-telemetry/opentelemetry-demo/pull/1786)) * [chore] Generate protobuf code for Go and Python services ([#1794](https://github.com/open-telemetry/opentelemetry-demo/pull/1784)) * [paymentservice] Add nodejs instrumentation for runtime metrics @@ -38,18 +40,18 @@ the release. ([#1836](https://github.com/open-telemetry/opentelemetry-demo/pull/1836)) * [quote] rename quoteservice to quote ([#1838](https://github.com/open-telemetry/opentelemetry-demo/pull/1838)) +* [cart] rename cartservice to cart + ([#1839](https://github.com/open-telemetry/opentelemetry-demo/pull/1839)) * [flagd-ui] rename flagdui to flagd-ui ([#1840](https://github.com/open-telemetry/opentelemetry-demo/pull/1840)) * [otel-collector] rename otelcol to otel-collector ([#1841](https://github.com/open-telemetry/opentelemetry-demo/pull/1841)) -* [cart] rename cartservice to cart - ([#1839](https://github.com/open-telemetry/opentelemetry-demo/pull/1839)) * [shipping] rename shippingservice to shipping ([#1842](https://github.com/open-telemetry/opentelemetry-demo/pull/1842)) -* [react-native-app] Add React Native example app - ([#1781](https://github.com/open-telemetry/opentelemetry-demo/pull/1781)) * [chore] Update demo Dependencies (Collector, Grafana, FlagD, Jaeger, Prometheus) ([#1855](https://github.com/open-telemetry/opentelemetry-demo/pull/1855)) +* [load-generator] rename loadgenerator to load-generator + ([#1856](https://github.com/open-telemetry/opentelemetry-demo/pull/1856)) ## 1.12.0 diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 44f40f1a65..168fbf6c53 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -278,7 +278,7 @@ services: depends_on: frontend: condition: service_started - loadgenerator: + load-generator: condition: service_started jaeger: condition: service_started @@ -313,14 +313,14 @@ services: logging: *logging # Load Generator - loadgenerator: - image: ${IMAGE_NAME}:${DEMO_VERSION}-loadgenerator + load-generator: + image: ${IMAGE_NAME}:${DEMO_VERSION}-load-generator container_name: load-generator build: context: ./ dockerfile: ${LOAD_GENERATOR_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator + - ${IMAGE_NAME}:${IMAGE_VERSION}-load-generator deploy: resources: limits: @@ -338,7 +338,7 @@ services: - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=loadgenerator + - OTEL_SERVICE_NAME=load-generator - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python - LOCUST_WEB_HOST=0.0.0.0 - FLAGD_HOST diff --git a/docker-compose.yml b/docker-compose.yml index b79744eadf..c46cc86e4a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -352,7 +352,7 @@ services: depends_on: frontend: condition: service_started - loadgenerator: + load-generator: condition: service_started jaeger: condition: service_started @@ -389,14 +389,14 @@ services: logging: *logging # Load Generator - loadgenerator: - image: ${IMAGE_NAME}:${DEMO_VERSION}-loadgenerator + load-generator: + image: ${IMAGE_NAME}:${DEMO_VERSION}-load-generator container_name: load-generator build: context: ./ dockerfile: ${LOAD_GENERATOR_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator + - ${IMAGE_NAME}:${IMAGE_VERSION}-load-generator deploy: resources: limits: @@ -414,7 +414,7 @@ services: - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=loadgenerator + - OTEL_SERVICE_NAME=load-generator - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python - LOCUST_WEB_HOST=0.0.0.0 - FLAGD_HOST diff --git a/renovate.json5 b/renovate.json5 index e261118a44..09e30fd03e 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -63,8 +63,8 @@ "groupName": "kafka", }, { - "matchFileNames": ["src/loadgenerator/**"], - "groupName": "loadgenerator", + "matchFileNames": ["src/load-generator/**"], + "groupName": "load-generator", }, { "matchFileNames": ["src/otel-collector/**"], diff --git a/src/flagd/demo.flagd.json b/src/flagd/demo.flagd.json index 452e334418..74fb5fcf1d 100644 --- a/src/flagd/demo.flagd.json +++ b/src/flagd/demo.flagd.json @@ -87,7 +87,7 @@ }, "defaultVariant": "off" }, - "loadgeneratorFloodHomepage": { + "loadGeneratorFloodHomepage": { "description": "Flood the frontend with a large amount of requests.", "state": "ENABLED", "variants": { diff --git a/src/loadgenerator/Dockerfile b/src/load-generator/Dockerfile similarity index 80% rename from src/loadgenerator/Dockerfile rename to src/load-generator/Dockerfile index 92d09977b8..5a7ff9fa70 100644 --- a/src/loadgenerator/Dockerfile +++ b/src/load-generator/Dockerfile @@ -9,14 +9,14 @@ RUN apt-get -qq update \ && apt-get install -y --no-install-recommends g++ \ && rm -rf /var/lib/apt/lists/* -COPY ./src/loadgenerator/requirements.txt . +COPY ./src/load-generator/requirements.txt . RUN pip install --prefix="/reqs" -r requirements.txt FROM base WORKDIR /usr/src/app/ COPY --from=builder /reqs /usr/local -COPY ./src/loadgenerator/locustfile.py . -COPY ./src/loadgenerator/people.json . +COPY ./src/load-generator/locustfile.py . +COPY ./src/load-generator/people.json . ENV LOCUST_PLAYWRIGHT=1 ENV PLAYWRIGHT_BROWSERS_PATH=/opt/pw-browsers RUN playwright install --with-deps chromium diff --git a/src/loadgenerator/README.md b/src/load-generator/README.md similarity index 100% rename from src/loadgenerator/README.md rename to src/load-generator/README.md diff --git a/src/loadgenerator/locustfile.py b/src/load-generator/locustfile.py similarity index 98% rename from src/loadgenerator/locustfile.py rename to src/load-generator/locustfile.py index 64abe8f8c2..387ae5d152 100644 --- a/src/loadgenerator/locustfile.py +++ b/src/load-generator/locustfile.py @@ -41,7 +41,7 @@ logger_provider = LoggerProvider(resource=Resource.create( { - "service.name": "loadgenerator", + "service.name": "load-generator", } ),) set_logger_provider(logger_provider) @@ -168,7 +168,7 @@ def checkout_multi(self): @task(5) def flood_home(self): - for _ in range(0, get_flagd_value("loadgeneratorFloodHomepage")): + for _ in range(0, get_flagd_value("loadGeneratorFloodHomepage")): self.client.get("/") def on_start(self): diff --git a/src/loadgenerator/people.json b/src/load-generator/people.json similarity index 100% rename from src/loadgenerator/people.json rename to src/load-generator/people.json diff --git a/src/loadgenerator/requirements.txt b/src/load-generator/requirements.txt similarity index 100% rename from src/loadgenerator/requirements.txt rename to src/load-generator/requirements.txt From d5c0efecec0de0e3dc2827e88b6082a9652883a3 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Sun, 22 Dec 2024 07:18:09 -0500 Subject: [PATCH 16/24] [image-provider] rename imageprovider to image-provider (#1857) * rename imageprovider to image-provider * rename imageprovider to image-provider --------- Co-authored-by: Juliano Costa --- .env | 4 ++-- .github/workflows/component-build-images.yml | 4 ++-- CHANGELOG.md | 2 ++ docker-compose.minimal.yml | 14 +++++++------- docker-compose.yml | 14 +++++++------- src/frontend/utils/imageLoader.js | 4 ++-- src/frontendproxy/envoy.tmpl.yaml | 6 +++--- src/{imageprovider => image-provider}/Dockerfile | 4 ++-- .../nginx.conf.template | 2 +- .../static/Banner.png | Bin .../static/opentelemetry-demo-logo.png | Bin .../EclipsmartTravelRefractorTelescope.jpg | Bin .../static/products/LensCleaningKit.jpg | Bin .../NationalParkFoundationExplorascope.jpg | Bin .../static/products/OpticalTubeAssembly.jpg | Bin .../static/products/RedFlashlight.jpg | Bin .../static/products/RoofBinoculars.jpg | Bin .../static/products/SolarFilter.jpg | Bin .../static/products/SolarSystemColorImager.jpg | Bin .../static/products/StarsenseExplorer.jpg | Bin .../static/products/TheCometBook.jpg | Bin 21 files changed, 28 insertions(+), 26 deletions(-) rename src/{imageprovider => image-provider}/Dockerfile (89%) rename src/{imageprovider => image-provider}/nginx.conf.template (94%) rename src/{imageprovider => image-provider}/static/Banner.png (100%) rename src/{imageprovider => image-provider}/static/opentelemetry-demo-logo.png (100%) rename src/{imageprovider => image-provider}/static/products/EclipsmartTravelRefractorTelescope.jpg (100%) rename src/{imageprovider => image-provider}/static/products/LensCleaningKit.jpg (100%) rename src/{imageprovider => image-provider}/static/products/NationalParkFoundationExplorascope.jpg (100%) rename src/{imageprovider => image-provider}/static/products/OpticalTubeAssembly.jpg (100%) rename src/{imageprovider => image-provider}/static/products/RedFlashlight.jpg (100%) rename src/{imageprovider => image-provider}/static/products/RoofBinoculars.jpg (100%) rename src/{imageprovider => image-provider}/static/products/SolarFilter.jpg (100%) rename src/{imageprovider => image-provider}/static/products/SolarSystemColorImager.jpg (100%) rename src/{imageprovider => image-provider}/static/products/StarsenseExplorer.jpg (100%) rename src/{imageprovider => image-provider}/static/products/TheCometBook.jpg (100%) diff --git a/.env b/.env index c906d51b7c..5ca58172e7 100644 --- a/.env +++ b/.env @@ -88,9 +88,9 @@ FRONTEND_PROXY_ADDR=frontend-proxy:${ENVOY_PORT} FRONTEND_PROXY_DOCKERFILE=./src/frontendproxy/Dockerfile # Image Provider -IMAGE_PROVIDER_HOST=imageprovider +IMAGE_PROVIDER_HOST=image-provider IMAGE_PROVIDER_PORT=8081 -IMAGE_PROVIDER_DOCKERFILE=./src/imageprovider/Dockerfile +IMAGE_PROVIDER_DOCKERFILE=./src/image-provider/Dockerfile # Load Generator LOCUST_WEB_PORT=8089 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 3681a71eea..e0cbb1a9f5 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -91,8 +91,8 @@ jobs: tag_suffix: frontend-tests context: ./ setup-qemu: true - - file: ./src/imageprovider/Dockerfile - tag_suffix: imageprovider + - file: ./src/image-provider/Dockerfile + tag_suffix: image-provider context: ./ setup-qemu: true - file: ./src/kafka/Dockerfile diff --git a/CHANGELOG.md b/CHANGELOG.md index 394d549146..2220bf9197 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,8 @@ the release. ([#1855](https://github.com/open-telemetry/opentelemetry-demo/pull/1855)) * [load-generator] rename loadgenerator to load-generator ([#1856](https://github.com/open-telemetry/opentelemetry-demo/pull/1856)) +* [image-provider] rename imageprovider to image-provider + ([#1857](https://github.com/open-telemetry/opentelemetry-demo/pull/1857)) ## 1.12.0 diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 168fbf6c53..663de96c17 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -235,7 +235,7 @@ services: condition: service_started otel-collector: condition: service_started - imageprovider: + image-provider: condition: service_started logging: *logging @@ -285,15 +285,15 @@ services: grafana: condition: service_started - # Imageprovider - imageprovider: - image: ${IMAGE_NAME}:${DEMO_VERSION}-imageprovider - container_name: imageprovider + # image-provider + image-provider: + image: ${IMAGE_NAME}:${DEMO_VERSION}-image-provider + container_name: image-provider build: context: ./ dockerfile: ${IMAGE_PROVIDER_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-imageprovider + - ${IMAGE_NAME}:${IMAGE_VERSION}-image-provider deploy: resources: limits: @@ -305,7 +305,7 @@ services: - IMAGE_PROVIDER_PORT - OTEL_COLLECTOR_HOST - OTEL_COLLECTOR_PORT_GRPC - - OTEL_SERVICE_NAME=imageprovider + - OTEL_SERVICE_NAME=image-provider - OTEL_RESOURCE_ATTRIBUTES depends_on: otel-collector: diff --git a/docker-compose.yml b/docker-compose.yml index c46cc86e4a..1b40749026 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -307,7 +307,7 @@ services: condition: service_started otel-collector: condition: service_started - imageprovider: + image-provider: condition: service_started flagd: condition: service_started @@ -361,15 +361,15 @@ services: flagd-ui: condition: service_started - # Imageprovider - imageprovider: - image: ${IMAGE_NAME}:${DEMO_VERSION}-imageprovider - container_name: imageprovider + # image-provider + image-provider: + image: ${IMAGE_NAME}:${DEMO_VERSION}-image-provider + container_name: image-provider build: context: ./ dockerfile: ${IMAGE_PROVIDER_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-imageprovider + - ${IMAGE_NAME}:${IMAGE_VERSION}-image-provider deploy: resources: limits: @@ -381,7 +381,7 @@ services: - IMAGE_PROVIDER_PORT - OTEL_COLLECTOR_HOST - OTEL_COLLECTOR_PORT_GRPC - - OTEL_SERVICE_NAME=imageprovider + - OTEL_SERVICE_NAME=image-provider - OTEL_RESOURCE_ATTRIBUTES depends_on: otel-collector: diff --git a/src/frontend/utils/imageLoader.js b/src/frontend/utils/imageLoader.js index c6d2bf0f51..3718b0a667 100644 --- a/src/frontend/utils/imageLoader.js +++ b/src/frontend/utils/imageLoader.js @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 /* - * We connect to imageprovider through the envoy proxy, straight from the browser, for this we need to know the current hostname and port. + * We connect to image-provider through the envoy proxy, straight from the browser, for this we need to know the current hostname and port. * During building and serverside rendering, these are undefined so we use some conditionals and default values. */ let hostname = "localhost"; @@ -15,6 +15,6 @@ if (typeof window !== "undefined" && window.location) { } export default function imageLoader({ src, width, quality }) { - // We pass down the optimisation request to the imageprovider service here, without this, nextJs would try to use internal optimiser which is not working with the external imageprovider. + // We pass down the optimisation request to the image-provider service here, without this, nextJs would try to use internal optimiser which is not working with the external image-provider. return `${protocol}://${hostname}:${port}/${src}?w=${width}&q=${quality || 75}` } diff --git a/src/frontendproxy/envoy.tmpl.yaml b/src/frontendproxy/envoy.tmpl.yaml index 9666396818..dbb539fc68 100644 --- a/src/frontendproxy/envoy.tmpl.yaml +++ b/src/frontendproxy/envoy.tmpl.yaml @@ -46,7 +46,7 @@ static_resources: - match: { prefix: "/grafana" } route: { cluster: grafana } - match: { prefix: "/images/" } - route: { cluster: imageprovider, prefix_rewrite: "/" } + route: { cluster: image-provider, prefix_rewrite: "/" } - match: { prefix: "/flagservice/" } route: { cluster: flagservice, prefix_rewrite: "/", timeout: 0s } - match: { prefix: "/feature" } @@ -200,11 +200,11 @@ static_resources: socket_address: address: ${FRONTEND_HOST} port_value: ${FRONTEND_PORT} - - name: imageprovider + - name: image-provider type: STRICT_DNS lb_policy: ROUND_ROBIN load_assignment: - cluster_name: imageprovider + cluster_name: image-provider endpoints: - lb_endpoints: - endpoint: diff --git a/src/imageprovider/Dockerfile b/src/image-provider/Dockerfile similarity index 89% rename from src/imageprovider/Dockerfile rename to src/image-provider/Dockerfile index 914a0ba6c5..6d6cd15185 100644 --- a/src/imageprovider/Dockerfile +++ b/src/image-provider/Dockerfile @@ -11,13 +11,13 @@ RUN echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://n RUN apt-get update ; apt-get install nginx-module-otel --no-install-recommends --no-install-suggests -y RUN mkdir /static -COPY src/imageprovider/static /static +COPY src/image-provider/static /static EXPOSE ${IMAGE_PROVIDER_PORT} STOPSIGNAL SIGQUIT -COPY src/imageprovider/nginx.conf.template /nginx.conf.template +COPY src/image-provider/nginx.conf.template /nginx.conf.template # Start nginx CMD ["/bin/sh" , "-c" , "envsubst '$OTEL_COLLECTOR_HOST $IMAGE_PROVIDER_PORT $OTEL_COLLECTOR_PORT_GRPC $OTEL_SERVICE_NAME' < /nginx.conf.template > /etc/nginx/nginx.conf && cat /etc/nginx/nginx.conf && exec nginx -g 'daemon off;'"] diff --git a/src/imageprovider/nginx.conf.template b/src/image-provider/nginx.conf.template similarity index 94% rename from src/imageprovider/nginx.conf.template rename to src/image-provider/nginx.conf.template index 775b44a8c8..144acb8210 100644 --- a/src/imageprovider/nginx.conf.template +++ b/src/image-provider/nginx.conf.template @@ -11,7 +11,7 @@ http { otel_trace on; otel_trace_context propagate; otel_service_name ${OTEL_SERVICE_NAME}; - otel_span_name imageprovider; + otel_span_name image-provider; include mime.types; diff --git a/src/imageprovider/static/Banner.png b/src/image-provider/static/Banner.png similarity index 100% rename from src/imageprovider/static/Banner.png rename to src/image-provider/static/Banner.png diff --git a/src/imageprovider/static/opentelemetry-demo-logo.png b/src/image-provider/static/opentelemetry-demo-logo.png similarity index 100% rename from src/imageprovider/static/opentelemetry-demo-logo.png rename to src/image-provider/static/opentelemetry-demo-logo.png diff --git a/src/imageprovider/static/products/EclipsmartTravelRefractorTelescope.jpg b/src/image-provider/static/products/EclipsmartTravelRefractorTelescope.jpg similarity index 100% rename from src/imageprovider/static/products/EclipsmartTravelRefractorTelescope.jpg rename to src/image-provider/static/products/EclipsmartTravelRefractorTelescope.jpg diff --git a/src/imageprovider/static/products/LensCleaningKit.jpg b/src/image-provider/static/products/LensCleaningKit.jpg similarity index 100% rename from src/imageprovider/static/products/LensCleaningKit.jpg rename to src/image-provider/static/products/LensCleaningKit.jpg diff --git a/src/imageprovider/static/products/NationalParkFoundationExplorascope.jpg b/src/image-provider/static/products/NationalParkFoundationExplorascope.jpg similarity index 100% rename from src/imageprovider/static/products/NationalParkFoundationExplorascope.jpg rename to src/image-provider/static/products/NationalParkFoundationExplorascope.jpg diff --git a/src/imageprovider/static/products/OpticalTubeAssembly.jpg b/src/image-provider/static/products/OpticalTubeAssembly.jpg similarity index 100% rename from src/imageprovider/static/products/OpticalTubeAssembly.jpg rename to src/image-provider/static/products/OpticalTubeAssembly.jpg diff --git a/src/imageprovider/static/products/RedFlashlight.jpg b/src/image-provider/static/products/RedFlashlight.jpg similarity index 100% rename from src/imageprovider/static/products/RedFlashlight.jpg rename to src/image-provider/static/products/RedFlashlight.jpg diff --git a/src/imageprovider/static/products/RoofBinoculars.jpg b/src/image-provider/static/products/RoofBinoculars.jpg similarity index 100% rename from src/imageprovider/static/products/RoofBinoculars.jpg rename to src/image-provider/static/products/RoofBinoculars.jpg diff --git a/src/imageprovider/static/products/SolarFilter.jpg b/src/image-provider/static/products/SolarFilter.jpg similarity index 100% rename from src/imageprovider/static/products/SolarFilter.jpg rename to src/image-provider/static/products/SolarFilter.jpg diff --git a/src/imageprovider/static/products/SolarSystemColorImager.jpg b/src/image-provider/static/products/SolarSystemColorImager.jpg similarity index 100% rename from src/imageprovider/static/products/SolarSystemColorImager.jpg rename to src/image-provider/static/products/SolarSystemColorImager.jpg diff --git a/src/imageprovider/static/products/StarsenseExplorer.jpg b/src/image-provider/static/products/StarsenseExplorer.jpg similarity index 100% rename from src/imageprovider/static/products/StarsenseExplorer.jpg rename to src/image-provider/static/products/StarsenseExplorer.jpg diff --git a/src/imageprovider/static/products/TheCometBook.jpg b/src/image-provider/static/products/TheCometBook.jpg similarity index 100% rename from src/imageprovider/static/products/TheCometBook.jpg rename to src/image-provider/static/products/TheCometBook.jpg From e3548c621744514f48e71d7ada96632edd345545 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Sun, 22 Dec 2024 08:49:02 -0500 Subject: [PATCH 17/24] [currency] Rename currencyservice to currency (#1858) --- .dockerignore | 6 ++--- .env | 6 ++--- .github/workflows/component-build-images.yml | 4 ++-- .gitignore | 2 +- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 4 ++-- docker-compose.minimal.yml | 22 +++++++++---------- docker-compose.yml | 22 +++++++++---------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- src/checkoutservice/main.go | 2 +- .../.dockerignore | 0 .../CMakeLists.txt | 8 +++---- src/{currencyservice => currency}/Dockerfile | 10 ++++----- src/{currencyservice => currency}/README.md | 6 ++--- .../data/currency_conversion.json | 0 .../proto/grpc/health/v1/health.proto | 0 .../src/logger_common.h | 0 .../src/meter_common.h | 0 .../src/server.cpp | 16 +++++++------- .../src/tracer_common.h | 0 src/frontend/gateways/rpc/Currency.gateway.ts | 4 ++-- src/frontend/next.config.js | 4 ++-- .../{currencyservice => currency}/all.yaml | 0 .../convert.yaml | 4 ++-- .../supported.yaml | 8 +++---- test/tracetesting/run.bash | 6 ++--- 28 files changed, 73 insertions(+), 71 deletions(-) rename src/{currencyservice => currency}/.dockerignore (100%) rename src/{currencyservice => currency}/CMakeLists.txt (93%) rename src/{currencyservice => currency}/Dockerfile (86%) rename src/{currencyservice => currency}/README.md (81%) rename src/{currencyservice => currency}/data/currency_conversion.json (100%) rename src/{currencyservice => currency}/proto/grpc/health/v1/health.proto (100%) rename src/{currencyservice => currency}/src/logger_common.h (100%) rename src/{currencyservice => currency}/src/meter_common.h (100%) rename src/{currencyservice => currency}/src/server.cpp (94%) rename src/{currencyservice => currency}/src/tracer_common.h (100%) rename test/tracetesting/{currencyservice => currency}/all.yaml (100%) rename test/tracetesting/{currencyservice => currency}/convert.yaml (87%) rename test/tracetesting/{currencyservice => currency}/supported.yaml (73%) diff --git a/.dockerignore b/.dockerignore index 95710cb92a..5610276644 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,9 +8,9 @@ src/*/Dockerfile src/*/*/Dockerfile ################################### -# currencyservice -./src/currencyservice/client.js -./src/currencyservice/node_modules/ +# currency +./src/currency/client.js +./src/currency/node_modules/ ################################### ################################### diff --git a/.env b/.env index 5ca58172e7..b011c764dc 100644 --- a/.env +++ b/.env @@ -64,9 +64,9 @@ CHECKOUT_SERVICE_ADDR=checkoutservice:${CHECKOUT_SERVICE_PORT} CHECKOUT_SERVICE_DOCKERFILE=./src/checkoutservice/Dockerfile # Currency Service -CURRENCY_SERVICE_PORT=7001 -CURRENCY_SERVICE_ADDR=currencyservice:${CURRENCY_SERVICE_PORT} -CURRENCY_SERVICE_DOCKERFILE=./src/currencyservice/Dockerfile +CURRENCY_PORT=7001 +CURRENCY_ADDR=currency:${CURRENCY_PORT} +CURRENCY_DOCKERFILE=./src/currency/Dockerfile # Email Service EMAIL_SERVICE_PORT=6060 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index e0cbb1a9f5..1ebd177346 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -67,8 +67,8 @@ jobs: tag_suffix: checkoutservice context: ./ setup-qemu: true - - file: ./src/currencyservice/Dockerfile - tag_suffix: currencyservice + - file: ./src/currency/Dockerfile + tag_suffix: currency context: ./ setup-qemu: true - file: ./src/emailservice/Dockerfile diff --git a/.gitignore b/.gitignore index ce60ae8696..0e791dd5dd 100644 --- a/.gitignore +++ b/.gitignore @@ -54,7 +54,7 @@ test/tracetesting/tracetesting-vars.yaml /src/frontend/protos/ /src/paymentservice/demo.proto /src/shipping/proto/ -/src/currencyservice/proto +/src/currency/proto # Android *.apk diff --git a/CHANGELOG.md b/CHANGELOG.md index 2220bf9197..886de03eea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,8 @@ the release. ([#1856](https://github.com/open-telemetry/opentelemetry-demo/pull/1856)) * [image-provider] rename imageprovider to image-provider ([#1857](https://github.com/open-telemetry/opentelemetry-demo/pull/1857)) +* [currency] rename currencyservice to currency + ([#1858](https://github.com/open-telemetry/opentelemetry-demo/pull/1858)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index ef1269a2c1..31fd9a80ab 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -40,7 +40,7 @@ services: - AD_ADDR - CART_ADDR - CHECKOUT_SERVICE_ADDR - - CURRENCY_SERVICE_ADDR + - CURRENCY_ADDR - EMAIL_SERVICE_ADDR - FRONTEND_ADDR - PAYMENT_SERVICE_ADDR @@ -65,7 +65,7 @@ services: condition: service_started checkoutservice: condition: service_started - currencyservice: + currency: condition: service_started emailservice: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 663de96c17..0c0b868462 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -99,7 +99,7 @@ services: environment: - CHECKOUT_SERVICE_PORT - CART_ADDR - - CURRENCY_SERVICE_ADDR + - CURRENCY_ADDR - EMAIL_SERVICE_ADDR - FLAGD_HOST - PAYMENT_SERVICE_ADDR @@ -112,7 +112,7 @@ services: depends_on: cart: condition: service_started - currencyservice: + currency: condition: service_started emailservice: condition: service_started @@ -127,14 +127,14 @@ services: logging: *logging # Currency service - currencyservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-currencyservice + currency: + image: ${IMAGE_NAME}:${DEMO_VERSION}-currency container_name: currency-service build: context: ./ - dockerfile: ${CURRENCY_SERVICE_DOCKERFILE} + dockerfile: ${CURRENCY_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-currency args: OPENTELEMETRY_CPP_VERSION: ${OPENTELEMETRY_CPP_VERSION} deploy: @@ -143,12 +143,12 @@ services: memory: 20M restart: unless-stopped ports: - - "${CURRENCY_SERVICE_PORT}" + - "${CURRENCY_PORT}" environment: - - CURRENCY_SERVICE_PORT + - CURRENCY_PORT - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME + - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currency # The C++ SDK does not support OTEL_SERVICE_NAME depends_on: otel-collector: condition: service_started @@ -202,7 +202,7 @@ services: - AD_ADDR - CART_ADDR - CHECKOUT_SERVICE_ADDR - - CURRENCY_SERVICE_ADDR + - CURRENCY_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - SHIPPING_ADDR @@ -223,7 +223,7 @@ services: condition: service_started checkoutservice: condition: service_started - currencyservice: + currency: condition: service_started productcatalogservice: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index 1b40749026..722afe90dc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -133,7 +133,7 @@ services: - FLAGD_PORT - CHECKOUT_SERVICE_PORT - CART_ADDR - - CURRENCY_SERVICE_ADDR + - CURRENCY_ADDR - EMAIL_SERVICE_ADDR - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR @@ -146,7 +146,7 @@ services: depends_on: cart: condition: service_started - currencyservice: + currency: condition: service_started emailservice: condition: service_started @@ -165,14 +165,14 @@ services: logging: *logging # Currency service - currencyservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-currencyservice + currency: + image: ${IMAGE_NAME}:${DEMO_VERSION}-currency container_name: currency-service build: context: ./ - dockerfile: ${CURRENCY_SERVICE_DOCKERFILE} + dockerfile: ${CURRENCY_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-currency args: OPENTELEMETRY_CPP_VERSION: ${OPENTELEMETRY_CPP_VERSION} deploy: @@ -181,12 +181,12 @@ services: memory: 20M restart: unless-stopped ports: - - "${CURRENCY_SERVICE_PORT}" + - "${CURRENCY_PORT}" environment: - - CURRENCY_SERVICE_PORT + - CURRENCY_PORT - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME + - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currency # The C++ SDK does not support OTEL_SERVICE_NAME depends_on: otel-collector: condition: service_started @@ -274,7 +274,7 @@ services: - AD_ADDR - CART_ADDR - CHECKOUT_SERVICE_ADDR - - CURRENCY_SERVICE_ADDR + - CURRENCY_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - SHIPPING_ADDR @@ -295,7 +295,7 @@ services: condition: service_started checkoutservice: condition: service_started - currencyservice: + currency: condition: service_started productcatalogservice: condition: service_started diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index a1600f71e4..80fa1f8634 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -25,7 +25,7 @@ gen_proto_python() { #gen_proto_java ad #gen_proto_dotnet cart gen_proto_go checkoutservice -#gen_proto_cpp currencyservice +#gen_proto_cpp currency #gen_proto_ruby emailservice #gen_proto_ts frontend #gen_proto_js paymentservice diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index 52fa222f4b..14649b8517 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -69,7 +69,7 @@ gen_proto_dotnet accounting # gen_proto_java ad gen_proto_dotnet cart gen_proto_go checkoutservice -# gen_proto_cpp currencyservice +# gen_proto_cpp currency # gen_proto_ruby emailservice gen_proto_ts frontend gen_proto_ts react-native-app diff --git a/renovate.json5 b/renovate.json5 index 09e30fd03e..de6ac5c52a 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -31,8 +31,8 @@ "groupName": "checkoutservice", }, { - "matchFileNames": ["src/currencyservice/**"], - "groupName": "currencyservice", + "matchFileNames": ["src/currency/**"], + "groupName": "currency", }, { "matchFileNames": ["src/emailservice/**"], diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index b3f84cacac..d4c7bfadc9 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -182,7 +182,7 @@ func main() { svc.cartSvcClient = pb.NewCartServiceClient(c) defer c.Close() - mustMapEnv(&svc.currencySvcAddr, "CURRENCY_SERVICE_ADDR") + mustMapEnv(&svc.currencySvcAddr, "CURRENCY_ADDR") c = mustCreateClient(svc.currencySvcAddr) svc.currencySvcClient = pb.NewCurrencyServiceClient(c) defer c.Close() diff --git a/src/currencyservice/.dockerignore b/src/currency/.dockerignore similarity index 100% rename from src/currencyservice/.dockerignore rename to src/currency/.dockerignore diff --git a/src/currencyservice/CMakeLists.txt b/src/currency/CMakeLists.txt similarity index 93% rename from src/currencyservice/CMakeLists.txt rename to src/currency/CMakeLists.txt index 5b672559f8..7b249e80f0 100644 --- a/src/currencyservice/CMakeLists.txt +++ b/src/currency/CMakeLists.txt @@ -59,13 +59,13 @@ add_library(demo-proto ${DEMO_PB_H_FILE} target_link_libraries(demo-proto gRPC::grpc++ protobuf::libprotobuf) include_directories("${GENERATED_PROTOBUF_PATH}" "${OPENTELEMETRY_CPP_INCLUDE_DIRS}") -add_executable(currencyservice src/server.cpp) -add_dependencies(currencyservice demo-proto) +add_executable(currency src/server.cpp) +add_dependencies(currency demo-proto) target_link_libraries( - currencyservice demo-proto protobuf::libprotobuf + currency demo-proto protobuf::libprotobuf ${OPENTELEMETRY_CPP_LIBRARIES} opentelemetry_trace opentelemetry_common opentelemetry_exporter_otlp_grpc opentelemetry_exporter_otlp_grpc_client opentelemetry_proto opentelemetry_otlp_recordable opentelemetry_resources opentelemetry_metrics opentelemetry_exporter_otlp_grpc_metrics gRPC::grpc++) -install(TARGETS currencyservice DESTINATION bin) +install(TARGETS currency DESTINATION bin) diff --git a/src/currencyservice/Dockerfile b/src/currency/Dockerfile similarity index 86% rename from src/currencyservice/Dockerfile rename to src/currency/Dockerfile index e84057f3d1..5a5da589c7 100644 --- a/src/currencyservice/Dockerfile +++ b/src/currency/Dockerfile @@ -30,10 +30,10 @@ RUN git clone https://github.com/open-telemetry/opentelemetry-cpp \ -DWITH_EXAMPLES=OFF -DWITH_OTLP_GRPC=ON -DWITH_ABSEIL=ON \ && make -j$(nproc || sysctl -n hw.ncpu || echo 1) install && cd ../.. -COPY ./src/currencyservice /currencyservice -COPY ./pb/demo.proto /currencyservice/proto/demo.proto +COPY ./src/currency /currency +COPY ./pb/demo.proto /currency/proto/demo.proto -RUN cd /currencyservice \ +RUN cd /currency \ && mkdir -p build && cd build \ && cmake .. \ && make -j$(nproc || sysctl -n hw.ncpu || echo 1) install @@ -44,5 +44,5 @@ FROM alpine:3.18 AS release RUN apk update && apk add grpc-dev protobuf-dev COPY --from=builder /usr/local /usr/local -EXPOSE ${CURRENCY_SERVICE_PORT} -ENTRYPOINT ["sh", "-c", "./usr/local/bin/currencyservice ${CURRENCY_SERVICE_PORT}"] +EXPOSE ${CURRENCY_PORT} +ENTRYPOINT ["sh", "-c", "./usr/local/bin/currency ${CURRENCY_PORT}"] diff --git a/src/currencyservice/README.md b/src/currency/README.md similarity index 81% rename from src/currencyservice/README.md rename to src/currency/README.md index 27a23f397f..e8ab7453ac 100644 --- a/src/currencyservice/README.md +++ b/src/currency/README.md @@ -9,7 +9,7 @@ To build the currency service, run the following from root directory of opentelemetry-demo ```sh -docker-compose build currencyservice +docker-compose build currency ``` ## Run the service @@ -17,7 +17,7 @@ docker-compose build currencyservice Execute the below command to run the service. ```sh -docker-compose up currencyservice +docker-compose up currency ``` ## Run the client @@ -29,4 +29,4 @@ service. To run the client, execute the below command. docker exec -it currencyclient 7000 ``` -'7000' is port where currencyservice listens to. +'7000' is port where currency listens to. diff --git a/src/currencyservice/data/currency_conversion.json b/src/currency/data/currency_conversion.json similarity index 100% rename from src/currencyservice/data/currency_conversion.json rename to src/currency/data/currency_conversion.json diff --git a/src/currencyservice/proto/grpc/health/v1/health.proto b/src/currency/proto/grpc/health/v1/health.proto similarity index 100% rename from src/currencyservice/proto/grpc/health/v1/health.proto rename to src/currency/proto/grpc/health/v1/health.proto diff --git a/src/currencyservice/src/logger_common.h b/src/currency/src/logger_common.h similarity index 100% rename from src/currencyservice/src/logger_common.h rename to src/currency/src/logger_common.h diff --git a/src/currencyservice/src/meter_common.h b/src/currency/src/meter_common.h similarity index 100% rename from src/currencyservice/src/meter_common.h rename to src/currency/src/meter_common.h diff --git a/src/currencyservice/src/server.cpp b/src/currency/src/server.cpp similarity index 94% rename from src/currencyservice/src/server.cpp rename to src/currency/src/server.cpp index ff194edd77..26d17b8c72 100644 --- a/src/currencyservice/src/server.cpp +++ b/src/currency/src/server.cpp @@ -83,7 +83,7 @@ namespace }; std::string version = std::getenv("VERSION"); - std::string name{ "currencyservice" }; + std::string name{ "currency" }; nostd::unique_ptr> currency_counter; nostd::shared_ptr logger; @@ -115,15 +115,15 @@ class CurrencyService final : public oteldemo::CurrencyService::Service auto new_context = prop->Extract(carrier, current_ctx); options.parent = GetSpan(new_context)->GetContext(); - std::string span_name = "CurrencyService/GetSupportedCurrencies"; + std::string span_name = "Currency/GetSupportedCurrencies"; auto span = - get_tracer("currencyservice")->StartSpan(span_name, + get_tracer("currency")->StartSpan(span_name, {{SemanticConventions::kRpcSystem, "grpc"}, {SemanticConventions::kRpcService, "oteldemo.CurrencyService"}, {SemanticConventions::kRpcMethod, "GetSupportedCurrencies"}, {SemanticConventions::kRpcGrpcStatusCode, 0}}, options); - auto scope = get_tracer("currencyservice")->WithActiveSpan(span); + auto scope = get_tracer("currency")->WithActiveSpan(span); span->AddEvent("Processing supported currencies request"); @@ -176,15 +176,15 @@ class CurrencyService final : public oteldemo::CurrencyService::Service auto new_context = prop->Extract(carrier, current_ctx); options.parent = GetSpan(new_context)->GetContext(); - std::string span_name = "CurrencyService/Convert"; + std::string span_name = "Currency/Convert"; auto span = - get_tracer("currencyservice")->StartSpan(span_name, + get_tracer("currency")->StartSpan(span_name, {{SemanticConventions::kRpcSystem, "grpc"}, {SemanticConventions::kRpcService, "oteldemo.CurrencyService"}, {SemanticConventions::kRpcMethod, "Convert"}, {SemanticConventions::kRpcGrpcStatusCode, 0}}, options); - auto scope = get_tracer("currencyservice")->WithActiveSpan(span); + auto scope = get_tracer("currency")->WithActiveSpan(span); span->AddEvent("Processing currency conversion request"); @@ -257,7 +257,7 @@ void RunServer(uint16_t port) int main(int argc, char **argv) { if (argc < 2) { - std::cout << "Usage: currencyservice "; + std::cout << "Usage: currency "; return 0; } diff --git a/src/currencyservice/src/tracer_common.h b/src/currency/src/tracer_common.h similarity index 100% rename from src/currencyservice/src/tracer_common.h rename to src/currency/src/tracer_common.h diff --git a/src/frontend/gateways/rpc/Currency.gateway.ts b/src/frontend/gateways/rpc/Currency.gateway.ts index e41d67c8a1..ac25719d5e 100644 --- a/src/frontend/gateways/rpc/Currency.gateway.ts +++ b/src/frontend/gateways/rpc/Currency.gateway.ts @@ -4,9 +4,9 @@ import { ChannelCredentials } from '@grpc/grpc-js'; import { GetSupportedCurrenciesResponse, CurrencyServiceClient, Money } from '../../protos/demo'; -const { CURRENCY_SERVICE_ADDR = '' } = process.env; +const { CURRENCY_ADDR = '' } = process.env; -const client = new CurrencyServiceClient(CURRENCY_SERVICE_ADDR, ChannelCredentials.createInsecure()); +const client = new CurrencyServiceClient(CURRENCY_ADDR, ChannelCredentials.createInsecure()); const CurrencyGateway = () => ({ convert(from: Money, toCode: string) { diff --git a/src/frontend/next.config.js b/src/frontend/next.config.js index 4c680c1fe3..eac4615be9 100755 --- a/src/frontend/next.config.js +++ b/src/frontend/next.config.js @@ -16,7 +16,7 @@ const { AD_ADDR = '', CART_ADDR = '', CHECKOUT_SERVICE_ADDR = '', - CURRENCY_SERVICE_ADDR = '', + CURRENCY_ADDR = '', PRODUCT_CATALOG_SERVICE_ADDR = '', RECOMMENDATION_SERVICE_ADDR = '', SHIPPING_ADDR = '', @@ -48,7 +48,7 @@ const nextConfig = { AD_ADDR, CART_ADDR, CHECKOUT_SERVICE_ADDR, - CURRENCY_SERVICE_ADDR, + CURRENCY_ADDR, PRODUCT_CATALOG_SERVICE_ADDR, RECOMMENDATION_SERVICE_ADDR, SHIPPING_ADDR, diff --git a/test/tracetesting/currencyservice/all.yaml b/test/tracetesting/currency/all.yaml similarity index 100% rename from test/tracetesting/currencyservice/all.yaml rename to test/tracetesting/currency/all.yaml diff --git a/test/tracetesting/currencyservice/convert.yaml b/test/tracetesting/currency/convert.yaml similarity index 87% rename from test/tracetesting/currencyservice/convert.yaml rename to test/tracetesting/currency/convert.yaml index 4a4c9756d7..ddae749e36 100644 --- a/test/tracetesting/currencyservice/convert.yaml +++ b/test/tracetesting/currency/convert.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:CURRENCY_SERVICE_ADDR} + address: ${var:CURRENCY_ADDR} method: oteldemo.CurrencyService.Convert request: |- { @@ -23,7 +23,7 @@ spec: } specs: - name: It converts from USD to CAD - selector: span[tracetest.span.type="rpc" name="CurrencyService/Convert" rpc.system="grpc" + selector: span[tracetest.span.type="rpc" name="Currency/Convert" rpc.system="grpc" rpc.method="Convert" rpc.service="oteldemo.CurrencyService"] assertions: - attr:app.currency.conversion.from = "USD" diff --git a/test/tracetesting/currencyservice/supported.yaml b/test/tracetesting/currency/supported.yaml similarity index 73% rename from test/tracetesting/currencyservice/supported.yaml rename to test/tracetesting/currency/supported.yaml index 4bea9ed24b..9959e49679 100644 --- a/test/tracetesting/currencyservice/supported.yaml +++ b/test/tracetesting/currency/supported.yaml @@ -10,14 +10,14 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:CURRENCY_SERVICE_ADDR} + address: ${var:CURRENCY_ADDR} method: oteldemo.CurrencyService.GetSupportedCurrencies specs: - - name: It has a span called "CurrencyService/GetSupportedCurrencies" - selector: span[tracetest.span.type="rpc" name="CurrencyService/GetSupportedCurrencies" + - name: It has a span called "Currency/GetSupportedCurrencies" + selector: span[tracetest.span.type="rpc" name="Currency/GetSupportedCurrencies" rpc.system="grpc" rpc.method="GetSupportedCurrencies" rpc.service="oteldemo.CurrencyService"] assertions: - - attr:name = "CurrencyService/GetSupportedCurrencies" + - attr:name = "Currency/GetSupportedCurrencies" - name: It returns the expected currency codes selector: span[tracetest.span.type="general" name="Tracetest trigger"] assertions: diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index 3e043a86e5..865de274e0 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("ad" "cart" "currencyservice" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shipping") +ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shipping") ## Script variables # Will contain the list of services to test @@ -40,8 +40,8 @@ spec: value: $CART_ADDR - key: CHECKOUT_SERVICE_ADDR value: $CHECKOUT_SERVICE_ADDR - - key: CURRENCY_SERVICE_ADDR - value: $CURRENCY_SERVICE_ADDR + - key: CURRENCY_ADDR + value: $CURRENCY_ADDR - key: EMAIL_SERVICE_ADDR value: $EMAIL_SERVICE_ADDR - key: FRONTEND_ADDR From 969fe3bb0165a6f9e4684a0c69abb7d156fef230 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Mon, 23 Dec 2024 08:25:56 -0500 Subject: [PATCH 18/24] [email] rename emailservice to email (#1861) --- .env | 6 +++--- .github/workflows/component-build-images.yml | 4 ++-- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 4 ++-- docker-compose.minimal.yml | 18 +++++++++--------- docker-compose.yml | 18 +++++++++--------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- src/checkoutservice/main.go | 6 +++--- src/{emailservice => email}/.dockerignore | 0 src/{emailservice => email}/.ruby-version | 0 src/{emailservice => email}/Dockerfile | 6 +++--- src/{emailservice => email}/Gemfile | 0 src/{emailservice => email}/Gemfile.lock | 0 src/{emailservice => email}/README.md | 2 +- src/{emailservice => email}/email_server.rb | 4 ++-- .../views/confirmation.erb | 0 .../{emailservice => email}/all.yaml | 6 +++--- .../{emailservice => email}/confirmation.yaml | 2 +- test/tracetesting/run.bash | 6 +++--- 21 files changed, 47 insertions(+), 45 deletions(-) rename src/{emailservice => email}/.dockerignore (100%) rename src/{emailservice => email}/.ruby-version (100%) rename src/{emailservice => email}/Dockerfile (79%) rename src/{emailservice => email}/Gemfile (100%) rename src/{emailservice => email}/Gemfile.lock (100%) rename src/{emailservice => email}/README.md (91%) rename src/{emailservice => email}/email_server.rb (93%) rename src/{emailservice => email}/views/confirmation.erb (100%) rename test/tracetesting/{emailservice => email}/all.yaml (54%) rename test/tracetesting/{emailservice => email}/confirmation.yaml (96%) diff --git a/.env b/.env index b011c764dc..a95b84de56 100644 --- a/.env +++ b/.env @@ -69,9 +69,9 @@ CURRENCY_ADDR=currency:${CURRENCY_PORT} CURRENCY_DOCKERFILE=./src/currency/Dockerfile # Email Service -EMAIL_SERVICE_PORT=6060 -EMAIL_SERVICE_ADDR=http://emailservice:${EMAIL_SERVICE_PORT} -EMAIL_SERVICE_DOCKERFILE=./src/emailservice/Dockerfile +EMAIL_PORT=6060 +EMAIL_ADDR=http://email:${EMAIL_PORT} +EMAIL_DOCKERFILE=./src/email/Dockerfile # Fraud Service FRAUD_SERVICE_DOCKERFILE=./src/frauddetectionservice/Dockerfile diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 1ebd177346..1e159b54fc 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -71,8 +71,8 @@ jobs: tag_suffix: currency context: ./ setup-qemu: true - - file: ./src/emailservice/Dockerfile - tag_suffix: emailservice + - file: ./src/email/Dockerfile + tag_suffix: email context: ./ setup-qemu: true - file: ./src/frauddetectionservice/Dockerfile diff --git a/CHANGELOG.md b/CHANGELOG.md index 886de03eea..9333ed153f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,8 @@ the release. ([#1857](https://github.com/open-telemetry/opentelemetry-demo/pull/1857)) * [currency] rename currencyservice to currency ([#1858](https://github.com/open-telemetry/opentelemetry-demo/pull/1858)) +* [email] rename emailservice to email + ([#1861](https://github.com/open-telemetry/opentelemetry-demo/pull/1861)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 31fd9a80ab..4e50b6aead 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -41,7 +41,7 @@ services: - CART_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_ADDR - - EMAIL_SERVICE_ADDR + - EMAIL_ADDR - FRONTEND_ADDR - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR @@ -67,7 +67,7 @@ services: condition: service_started currency: condition: service_started - emailservice: + email: condition: service_started frauddetectionservice: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 0c0b868462..8fe5d0b3c3 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -100,7 +100,7 @@ services: - CHECKOUT_SERVICE_PORT - CART_ADDR - CURRENCY_ADDR - - EMAIL_SERVICE_ADDR + - EMAIL_ADDR - FLAGD_HOST - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR @@ -114,7 +114,7 @@ services: condition: service_started currency: condition: service_started - emailservice: + email: condition: service_started paymentservice: condition: service_started @@ -155,26 +155,26 @@ services: logging: *logging # Email service - emailservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-emailservice + email: + image: ${IMAGE_NAME}:${DEMO_VERSION}-email container_name: email-service build: - context: ./src/emailservice + context: ./src/email cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-emailservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-email deploy: resources: limits: memory: 100M restart: unless-stopped ports: - - "${EMAIL_SERVICE_PORT}" + - "${EMAIL_PORT}" environment: - APP_ENV=production - - EMAIL_SERVICE_PORT + - EMAIL_PORT - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP}/v1/traces - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=emailservice + - OTEL_SERVICE_NAME=email depends_on: otel-collector: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index 722afe90dc..bac8491189 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -134,7 +134,7 @@ services: - CHECKOUT_SERVICE_PORT - CART_ADDR - CURRENCY_ADDR - - EMAIL_SERVICE_ADDR + - EMAIL_ADDR - PAYMENT_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - SHIPPING_ADDR @@ -148,7 +148,7 @@ services: condition: service_started currency: condition: service_started - emailservice: + email: condition: service_started paymentservice: condition: service_started @@ -193,27 +193,27 @@ services: logging: *logging # Email service - emailservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-emailservice + email: + image: ${IMAGE_NAME}:${DEMO_VERSION}-email container_name: email-service build: context: ./ - dockerfile: ${EMAIL_SERVICE_DOCKERFILE} + dockerfile: ${EMAIL_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-emailservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-email deploy: resources: limits: memory: 100M restart: unless-stopped ports: - - "${EMAIL_SERVICE_PORT}" + - "${EMAIL_PORT}" environment: - APP_ENV=production - - EMAIL_SERVICE_PORT + - EMAIL_PORT - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP}/v1/traces - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=emailservice + - OTEL_SERVICE_NAME=email depends_on: otel-collector: condition: service_started diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index 80fa1f8634..dfd16526e5 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -26,7 +26,7 @@ gen_proto_python() { #gen_proto_dotnet cart gen_proto_go checkoutservice #gen_proto_cpp currency -#gen_proto_ruby emailservice +#gen_proto_ruby email #gen_proto_ts frontend #gen_proto_js paymentservice gen_proto_go productcatalogservice diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index 14649b8517..76ad0f1980 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -70,7 +70,7 @@ gen_proto_dotnet accounting gen_proto_dotnet cart gen_proto_go checkoutservice # gen_proto_cpp currency -# gen_proto_ruby emailservice +# gen_proto_ruby email gen_proto_ts frontend gen_proto_ts react-native-app gen_proto_js paymentservice diff --git a/renovate.json5 b/renovate.json5 index de6ac5c52a..9524045bde 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -35,8 +35,8 @@ "groupName": "currency", }, { - "matchFileNames": ["src/emailservice/**"], - "groupName": "emailservice", + "matchFileNames": ["src/email/**"], + "groupName": "email", }, { "matchFileNames": ["src/featureflagservice/**"], diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index d4c7bfadc9..5ad3afa8ba 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -187,7 +187,7 @@ func main() { svc.currencySvcClient = pb.NewCurrencyServiceClient(c) defer c.Close() - mustMapEnv(&svc.emailSvcAddr, "EMAIL_SERVICE_ADDR") + mustMapEnv(&svc.emailSvcAddr, "EMAIL_ADDR") c = mustCreateClient(svc.emailSvcAddr) svc.emailSvcClient = pb.NewEmailServiceClient(c) defer c.Close() @@ -458,7 +458,7 @@ func (cs *checkoutService) chargeCard(ctx context.Context, amount *pb.Money, pay } func (cs *checkoutService) sendOrderConfirmation(ctx context.Context, email string, order *pb.OrderResult) error { - emailServicePayload, err := json.Marshal(map[string]interface{}{ + emailPayload, err := json.Marshal(map[string]interface{}{ "email": email, "order": order, }) @@ -466,7 +466,7 @@ func (cs *checkoutService) sendOrderConfirmation(ctx context.Context, email stri return fmt.Errorf("failed to marshal order to JSON: %+v", err) } - resp, err := otelhttp.Post(ctx, cs.emailSvcAddr+"/send_order_confirmation", "application/json", bytes.NewBuffer(emailServicePayload)) + resp, err := otelhttp.Post(ctx, cs.emailSvcAddr+"/send_order_confirmation", "application/json", bytes.NewBuffer(emailPayload)) if err != nil { return fmt.Errorf("failed POST to email service: %+v", err) } diff --git a/src/emailservice/.dockerignore b/src/email/.dockerignore similarity index 100% rename from src/emailservice/.dockerignore rename to src/email/.dockerignore diff --git a/src/emailservice/.ruby-version b/src/email/.ruby-version similarity index 100% rename from src/emailservice/.ruby-version rename to src/email/.ruby-version diff --git a/src/emailservice/Dockerfile b/src/email/Dockerfile similarity index 79% rename from src/emailservice/Dockerfile rename to src/email/Dockerfile index d6090905e5..45da417d37 100644 --- a/src/emailservice/Dockerfile +++ b/src/email/Dockerfile @@ -8,7 +8,7 @@ FROM base AS builder WORKDIR /tmp -COPY ./src/emailservice/Gemfile ./src/emailservice/Gemfile.lock ./ +COPY ./src/email/Gemfile ./src/email/Gemfile.lock ./ #RUN apk update && apk add make gcc musl-dev gcompat && bundle install RUN apt-get update && apt-get install build-essential -y && bundle install @@ -16,12 +16,12 @@ FROM base AS release WORKDIR /email_server -COPY ./src/emailservice/ . +COPY ./src/email/ . RUN chmod 666 ./Gemfile.lock COPY --from=builder /usr/local/bundle/ /usr/local/bundle/ -EXPOSE ${EMAIL_SERVICE_PORT} +EXPOSE ${EMAIL_PORT} ENTRYPOINT ["bundle", "exec", "ruby", "email_server.rb"] diff --git a/src/emailservice/Gemfile b/src/email/Gemfile similarity index 100% rename from src/emailservice/Gemfile rename to src/email/Gemfile diff --git a/src/emailservice/Gemfile.lock b/src/email/Gemfile.lock similarity index 100% rename from src/emailservice/Gemfile.lock rename to src/email/Gemfile.lock diff --git a/src/emailservice/README.md b/src/email/README.md similarity index 91% rename from src/emailservice/README.md rename to src/email/README.md index e46b89404a..13533d83ee 100644 --- a/src/emailservice/README.md +++ b/src/email/README.md @@ -20,4 +20,4 @@ You may run this service locally with `bundle exec ruby email_server.rb`. ## Docker Build -From `src/emailservice`, run `docker build .` +From `src/email`, run `docker build .` diff --git a/src/emailservice/email_server.rb b/src/email/email_server.rb similarity index 93% rename from src/emailservice/email_server.rb rename to src/email/email_server.rb index ae0291d466..fcd494a07d 100644 --- a/src/emailservice/email_server.rb +++ b/src/email/email_server.rb @@ -9,7 +9,7 @@ require "opentelemetry/exporter/otlp" require "opentelemetry/instrumentation/sinatra" -set :port, ENV["EMAIL_SERVICE_PORT"] +set :port, ENV["EMAIL_PORT"] OpenTelemetry::SDK.configure do |c| c.use "OpenTelemetry::Instrumentation::Sinatra" @@ -34,7 +34,7 @@ def send_email(data) # create and start a manual span - tracer = OpenTelemetry.tracer_provider.tracer('emailservice') + tracer = OpenTelemetry.tracer_provider.tracer('email') tracer.in_span("send_email") do |span| Pony.mail( to: data.email, diff --git a/src/emailservice/views/confirmation.erb b/src/email/views/confirmation.erb similarity index 100% rename from src/emailservice/views/confirmation.erb rename to src/email/views/confirmation.erb diff --git a/test/tracetesting/emailservice/all.yaml b/test/tracetesting/email/all.yaml similarity index 54% rename from test/tracetesting/emailservice/all.yaml rename to test/tracetesting/email/all.yaml index 0a2f79aaad..517ca65e69 100644 --- a/test/tracetesting/emailservice/all.yaml +++ b/test/tracetesting/email/all.yaml @@ -3,8 +3,8 @@ type: TestSuite spec: - id: email-service-all - name: 'Email Service' - description: Run all Email Service tests enabled in sequence + id: email-all + name: 'Email' + description: Run all Email tests enabled in sequence steps: - ./confirmation.yaml diff --git a/test/tracetesting/emailservice/confirmation.yaml b/test/tracetesting/email/confirmation.yaml similarity index 96% rename from test/tracetesting/emailservice/confirmation.yaml rename to test/tracetesting/email/confirmation.yaml index 6aff590e31..96c561efbc 100644 --- a/test/tracetesting/emailservice/confirmation.yaml +++ b/test/tracetesting/email/confirmation.yaml @@ -9,7 +9,7 @@ spec: trigger: type: http httpRequest: - url: ${var:EMAIL_SERVICE_ADDR}/send_order_confirmation + url: ${var:EMAIL_ADDR}/send_order_confirmation method: POST headers: - key: Content-Type diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index 865de274e0..aba367b86f 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "emailservice" "paymentservice" "productcatalogservice" "recommendationservice" "shipping") +ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "email" "paymentservice" "productcatalogservice" "recommendationservice" "shipping") ## Script variables # Will contain the list of services to test @@ -42,8 +42,8 @@ spec: value: $CHECKOUT_SERVICE_ADDR - key: CURRENCY_ADDR value: $CURRENCY_ADDR - - key: EMAIL_SERVICE_ADDR - value: $EMAIL_SERVICE_ADDR + - key: EMAIL_ADDR + value: $EMAIL_ADDR - key: FRONTEND_ADDR value: $FRONTEND_ADDR - key: PAYMENT_SERVICE_ADDR From 3868f0e4c212fbe3f215de020e79322f4d7b6867 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Mon, 23 Dec 2024 09:15:54 -0500 Subject: [PATCH 19/24] [fraud-detection] rename frauddetectionservice to fraud-detection (#1862) * rename frauddetectionservice to fraud-detection * rename frauddetectionservice to fraud-detection --------- Co-authored-by: Juliano Costa --- .env | 2 +- .github/workflows/component-build-images.yml | 4 ++-- .gitignore | 2 +- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 2 +- docker-compose.yml | 12 ++++++------ renovate.json5 | 4 ++-- .../.dockerignore | 0 .../Dockerfile | 6 +++--- .../README.md | 2 +- .../build.gradle.kts | 4 ++-- .../gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../gradlew | 0 .../gradlew.bat | 0 src/fraud-detection/settings.gradle.kts | 3 +++ .../src/main/kotlin/frauddetection}/main.kt | 4 ++-- .../src/main/resources/log4j2.xml | 0 src/frauddetectionservice/settings.gradle.kts | 3 --- 20 files changed, 26 insertions(+), 24 deletions(-) rename src/{frauddetectionservice => fraud-detection}/.dockerignore (100%) rename src/{frauddetectionservice => fraud-detection}/Dockerfile (77%) rename src/{frauddetectionservice => fraud-detection}/README.md (85%) rename src/{frauddetectionservice => fraud-detection}/build.gradle.kts (95%) rename src/{frauddetectionservice => fraud-detection}/gradle.properties (100%) rename src/{frauddetectionservice => fraud-detection}/gradle/wrapper/gradle-wrapper.jar (100%) rename src/{frauddetectionservice => fraud-detection}/gradle/wrapper/gradle-wrapper.properties (100%) rename src/{frauddetectionservice => fraud-detection}/gradlew (100%) rename src/{frauddetectionservice => fraud-detection}/gradlew.bat (100%) create mode 100644 src/fraud-detection/settings.gradle.kts rename src/{frauddetectionservice/src/main/kotlin/frauddetectionservice => fraud-detection/src/main/kotlin/frauddetection}/main.kt (97%) rename src/{frauddetectionservice => fraud-detection}/src/main/resources/log4j2.xml (100%) delete mode 100644 src/frauddetectionservice/settings.gradle.kts diff --git a/.env b/.env index a95b84de56..b43ba66093 100644 --- a/.env +++ b/.env @@ -74,7 +74,7 @@ EMAIL_ADDR=http://email:${EMAIL_PORT} EMAIL_DOCKERFILE=./src/email/Dockerfile # Fraud Service -FRAUD_SERVICE_DOCKERFILE=./src/frauddetectionservice/Dockerfile +FRAUD_DOCKERFILE=./src/fraud-detection/Dockerfile # Frontend FRONTEND_PORT=8080 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 1e159b54fc..76b006908b 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -75,8 +75,8 @@ jobs: tag_suffix: email context: ./ setup-qemu: true - - file: ./src/frauddetectionservice/Dockerfile - tag_suffix: frauddetectionservice + - file: ./src/fraud-detection/Dockerfile + tag_suffix: fraud-detection context: ./ setup-qemu: true - file: ./src/frontend/Dockerfile diff --git a/.gitignore b/.gitignore index 0e791dd5dd..a7c2a831f9 100644 --- a/.gitignore +++ b/.gitignore @@ -49,7 +49,7 @@ test/tracetesting/tracetesting-vars.yaml /src/featureflagservice/src/ffs_demo_pb.erl /src/featureflagservice/src/ffs_service_*.erl /src/featureflagservice/src/oteldemo_*.erl -/src/frauddetectionservice/src/main/proto +/src/fraud-detection/src/main/proto /src/frontend/pb/ /src/frontend/protos/ /src/paymentservice/demo.proto diff --git a/CHANGELOG.md b/CHANGELOG.md index 9333ed153f..627c3de848 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,8 @@ the release. ([#1858](https://github.com/open-telemetry/opentelemetry-demo/pull/1858)) * [email] rename emailservice to email ([#1861](https://github.com/open-telemetry/opentelemetry-demo/pull/1861)) +* [fraud-detection] rename frauddetectionservice to fraud-detection + ([#1862](https://github.com/open-telemetry/opentelemetry-demo/pull/1862)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 4e50b6aead..c2a8810adb 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -69,7 +69,7 @@ services: condition: service_started email: condition: service_started - frauddetectionservice: + fraud-detection: condition: service_started frontend: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index bac8491189..9d392cc4a8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -220,14 +220,14 @@ services: logging: *logging # Fraud Detection service - frauddetectionservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-frauddetectionservice - container_name: frauddetection-service + fraud-detection: + image: ${IMAGE_NAME}:${DEMO_VERSION}-fraud-detection + container_name: fraud-detection build: context: ./ - dockerfile: ${FRAUD_SERVICE_DOCKERFILE} + dockerfile: ${FRAUD_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-frauddetectionservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-fraud-detection args: OTEL_JAVA_AGENT_VERSION: ${OTEL_JAVA_AGENT_VERSION} deploy: @@ -244,7 +244,7 @@ services: - OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES=true - OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED=true - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=frauddetectionservice + - OTEL_SERVICE_NAME=fraud-detection depends_on: otel-collector: condition: service_started diff --git a/renovate.json5 b/renovate.json5 index 9524045bde..38203138f1 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -43,8 +43,8 @@ "groupName": "featureflagservice", }, { - "matchFileNames": ["src/frauddetectionservice/**"], - "groupName": "frauddetectionservice", + "matchFileNames": ["src/fraud-detection/**"], + "groupName": "fraud-detection", }, { "matchFileNames": ["src/frontend/**"], diff --git a/src/frauddetectionservice/.dockerignore b/src/fraud-detection/.dockerignore similarity index 100% rename from src/frauddetectionservice/.dockerignore rename to src/fraud-detection/.dockerignore diff --git a/src/frauddetectionservice/Dockerfile b/src/fraud-detection/Dockerfile similarity index 77% rename from src/frauddetectionservice/Dockerfile rename to src/fraud-detection/Dockerfile index 1d2a9b58da..abf2029459 100644 --- a/src/frauddetectionservice/Dockerfile +++ b/src/fraud-detection/Dockerfile @@ -6,7 +6,7 @@ FROM --platform=${BUILDPLATFORM} gradle:8-jdk17 AS builder WORKDIR /usr/src/app/ -COPY ./src/frauddetectionservice/ ./ +COPY ./src/fraud-detection/ ./ COPY ./pb/ ./src/main/proto/ RUN gradle shadowJar @@ -17,8 +17,8 @@ FROM gcr.io/distroless/java17-debian11 ARG OTEL_JAVA_AGENT_VERSION WORKDIR /usr/src/app/ -COPY --from=builder /usr/src/app/build/libs/frauddetectionservice-1.0-all.jar ./ +COPY --from=builder /usr/src/app/build/libs/fraud-detection-1.0-all.jar ./ ADD --chmod=644 https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v$OTEL_JAVA_AGENT_VERSION/opentelemetry-javaagent.jar /app/opentelemetry-javaagent.jar ENV JAVA_TOOL_OPTIONS=-javaagent:/app/opentelemetry-javaagent.jar -ENTRYPOINT [ "java", "-jar", "frauddetectionservice-1.0-all.jar" ] +ENTRYPOINT [ "java", "-jar", "fraud-detection-1.0-all.jar" ] diff --git a/src/frauddetectionservice/README.md b/src/fraud-detection/README.md similarity index 85% rename from src/frauddetectionservice/README.md rename to src/fraud-detection/README.md index d618203669..c844776c2e 100644 --- a/src/frauddetectionservice/README.md +++ b/src/fraud-detection/README.md @@ -17,5 +17,5 @@ cp -r ../../pb/ src/main/proto/ To build using Docker run from the repo root: ```sh -docker build -f ./src/frauddetectionservice/Dockerfile . +docker build -f ./src/fraud-detection/Dockerfile . ``` diff --git a/src/frauddetectionservice/build.gradle.kts b/src/fraud-detection/build.gradle.kts similarity index 95% rename from src/frauddetectionservice/build.gradle.kts rename to src/fraud-detection/build.gradle.kts index a9495fbd7c..d1dcc07a6b 100644 --- a/src/frauddetectionservice/build.gradle.kts +++ b/src/fraud-detection/build.gradle.kts @@ -90,9 +90,9 @@ protobuf { } application { - mainClass.set("frauddetectionservice.MainKt") + mainClass.set("frauddetection.MainKt") } tasks.jar { - manifest.attributes["Main-Class"] = "frauddetectionservice.MainKt" + manifest.attributes["Main-Class"] = "frauddetection.MainKt" } diff --git a/src/frauddetectionservice/gradle.properties b/src/fraud-detection/gradle.properties similarity index 100% rename from src/frauddetectionservice/gradle.properties rename to src/fraud-detection/gradle.properties diff --git a/src/frauddetectionservice/gradle/wrapper/gradle-wrapper.jar b/src/fraud-detection/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from src/frauddetectionservice/gradle/wrapper/gradle-wrapper.jar rename to src/fraud-detection/gradle/wrapper/gradle-wrapper.jar diff --git a/src/frauddetectionservice/gradle/wrapper/gradle-wrapper.properties b/src/fraud-detection/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from src/frauddetectionservice/gradle/wrapper/gradle-wrapper.properties rename to src/fraud-detection/gradle/wrapper/gradle-wrapper.properties diff --git a/src/frauddetectionservice/gradlew b/src/fraud-detection/gradlew similarity index 100% rename from src/frauddetectionservice/gradlew rename to src/fraud-detection/gradlew diff --git a/src/frauddetectionservice/gradlew.bat b/src/fraud-detection/gradlew.bat similarity index 100% rename from src/frauddetectionservice/gradlew.bat rename to src/fraud-detection/gradlew.bat diff --git a/src/fraud-detection/settings.gradle.kts b/src/fraud-detection/settings.gradle.kts new file mode 100644 index 0000000000..d9c4193dd3 --- /dev/null +++ b/src/fraud-detection/settings.gradle.kts @@ -0,0 +1,3 @@ + +rootProject.name = "fraud-detection" + diff --git a/src/frauddetectionservice/src/main/kotlin/frauddetectionservice/main.kt b/src/fraud-detection/src/main/kotlin/frauddetection/main.kt similarity index 97% rename from src/frauddetectionservice/src/main/kotlin/frauddetectionservice/main.kt rename to src/fraud-detection/src/main/kotlin/frauddetection/main.kt index 8f8223f518..ac36b66d44 100644 --- a/src/frauddetectionservice/src/main/kotlin/frauddetectionservice/main.kt +++ b/src/fraud-detection/src/main/kotlin/frauddetection/main.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package frauddetectionservice +package frauddetection import org.apache.kafka.clients.consumer.ConsumerConfig.* import org.apache.kafka.clients.consumer.KafkaConsumer @@ -24,7 +24,7 @@ import dev.openfeature.sdk.Value import dev.openfeature.sdk.OpenFeatureAPI const val topic = "orders" -const val groupID = "frauddetectionservice" +const val groupID = "fraud-detection" private val logger: Logger = LogManager.getLogger(groupID) diff --git a/src/frauddetectionservice/src/main/resources/log4j2.xml b/src/fraud-detection/src/main/resources/log4j2.xml similarity index 100% rename from src/frauddetectionservice/src/main/resources/log4j2.xml rename to src/fraud-detection/src/main/resources/log4j2.xml diff --git a/src/frauddetectionservice/settings.gradle.kts b/src/frauddetectionservice/settings.gradle.kts deleted file mode 100644 index 1c98d2e2cf..0000000000 --- a/src/frauddetectionservice/settings.gradle.kts +++ /dev/null @@ -1,3 +0,0 @@ - -rootProject.name = "frauddetectionservice" - From e965205876339680b347d13b1d1556a598e5c7d7 Mon Sep 17 00:00:00 2001 From: Roger Coll Date: Mon, 23 Dec 2024 16:12:26 +0100 Subject: [PATCH 20/24] fix: services reference name --- .env.override | 6 ++-- .../component_build-images-elastic.yml | 32 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.env.override b/.env.override index 83771825eb..789a3f16c4 100644 --- a/.env.override +++ b/.env.override @@ -8,7 +8,7 @@ IMAGE_NAME=ghcr.io/elastic/opentelemetry-demo # ********************* # Elastic Demo Services # ********************* -AD_SERVICE_DOCKERFILE=./src/adservice/Dockerfile.elastic +AD_DOCKERFILE=./src/adservice/Dockerfile.elastic FRAUD_SERVICE_DOCKERFILE=./src/frauddetectionservice/Dockerfile.elastic KAFKA_SERVICE_DOCKERFILE=./src/kafka/Dockerfile.elastic @@ -16,6 +16,6 @@ KAFKA_SERVICE_DOCKERFILE=./src/kafka/Dockerfile.elastic # Elastic Collector # ********************* COLLECTOR_CONTRIB_IMAGE=docker.elastic.co/beats/elastic-agent:8.16.0 -OTEL_COLLECTOR_CONFIG=./src/otelcollector/otelcol-elastic-config.yaml -OTEL_COLLECTOR_CONFIG_EXTRAS=./src/otelcollector/otelcol-elastic-config-extras.yaml +OTEL_COLLECTOR_CONFIG=./src/otel-collector/otelcol-elastic-config.yaml +OTEL_COLLECTOR_CONFIG_EXTRAS=./src/otel-collector/otelcol-elastic-config-extras.yaml ELASTIC_AGENT_OTEL=true diff --git a/.github/workflows/component_build-images-elastic.yml b/.github/workflows/component_build-images-elastic.yml index 7c0d2633a6..a8accc92df 100644 --- a/.github/workflows/component_build-images-elastic.yml +++ b/.github/workflows/component_build-images-elastic.yml @@ -28,24 +28,24 @@ jobs: fail-fast: false matrix: file_tag: - - file: ./src/accountingservice/Dockerfile - tag_suffix: accountingservice + - file: ./src/accounting/Dockerfile + tag_suffix: accounting context: ./ setup-qemu: true - - file: ./src/adservice/Dockerfile.elastic - tag_suffix: adservice + - file: ./src/ad/Dockerfile.elastic + tag_suffix: ad context: ./ setup-qemu: true - - file: ./src/cartservice/src/Dockerfile - tag_suffix: cartservice + - file: ./src/cart/src/Dockerfile + tag_suffix: cart context: ./ setup-qemu: false - file: ./src/checkoutservice/Dockerfile tag_suffix: checkoutservice context: ./ setup-qemu: true - - file: ./src/currencyservice/Dockerfile - tag_suffix: currencyservice + - file: ./src/currency/Dockerfile + tag_suffix: currency context: ./ setup-qemu: true - file: ./src/emailservice/Dockerfile @@ -72,16 +72,16 @@ jobs: tag_suffix: frontend-tests context: ./ setup-qemu: true - - file: ./src/imageprovider/Dockerfile - tag_suffix: imageprovider + - file: ./src/image-provider/Dockerfile + tag_suffix: image-provider context: ./ setup-qemu: true - file: ./src/kafka/Dockerfile.elastic tag_suffix: kafka context: ./ setup-qemu: true - - file: ./src/loadgenerator/Dockerfile - tag_suffix: loadgenerator + - file: ./src/load-generator/Dockerfile + tag_suffix: load-generator context: ./ setup-qemu: true - file: ./src/paymentservice/Dockerfile @@ -92,16 +92,16 @@ jobs: tag_suffix: productcatalogservice context: ./ setup-qemu: true - - file: ./src/quoteservice/Dockerfile - tag_suffix: quoteservice + - file: ./src/quote/Dockerfile + tag_suffix: quote context: ./ setup-qemu: true - file: ./src/recommendationservice/Dockerfile tag_suffix: recommendationservice context: ./ setup-qemu: true - - file: ./src/shippingservice/Dockerfile - tag_suffix: shippingservice + - file: ./src/shipping/Dockerfile + tag_suffix: shipping context: ./ setup-qemu: true - file: ./test/tracetesting/Dockerfile From 4c8e43f219ae8d2c302fb9d6c78164017c3314bc Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Mon, 23 Dec 2024 13:01:46 -0500 Subject: [PATCH 21/24] [payment] rename paymentservice to payment (#1863) * rename paymentservice to payment * rename paymentservice to payment * rename paymentservice to payment --------- Co-authored-by: Juliano Costa --- .env | 6 +++--- .github/workflows/component-build-images.yml | 4 ++-- .gitignore | 2 +- CHANGELOG.md | 2 ++ docker-compose-tests.yml | 4 ++-- docker-compose.minimal.yml | 18 +++++++++--------- docker-compose.yml | 18 +++++++++--------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- src/checkoutservice/main.go | 4 ++-- src/flagd/demo.flagd.json | 4 ++-- src/{paymentservice => payment}/.dockerignore | 0 src/{paymentservice => payment}/Dockerfile | 6 +++--- src/{paymentservice => payment}/README.md | 2 +- src/{paymentservice => payment}/charge.js | 6 +++--- src/{paymentservice => payment}/index.js | 4 ++-- src/{paymentservice => payment}/logger.js | 0 .../opentelemetry.js | 0 .../package-lock.json | 4 ++-- src/{paymentservice => payment}/package.json | 2 +- .../{paymentservice => payment}/all.yaml | 6 +++--- .../amex-credit-card-not-allowed.yaml | 2 +- .../expired-credit-card.yaml | 2 +- .../invalid-credit-card.yaml | 2 +- .../valid-credit-card.yaml | 2 +- test/tracetesting/run.bash | 6 +++--- 27 files changed, 58 insertions(+), 56 deletions(-) rename src/{paymentservice => payment}/.dockerignore (100%) rename src/{paymentservice => payment}/Dockerfile (82%) rename src/{paymentservice => payment}/README.md (87%) rename src/{paymentservice => payment}/charge.js (95%) rename src/{paymentservice => payment}/index.js (88%) rename src/{paymentservice => payment}/logger.js (100%) rename src/{paymentservice => payment}/opentelemetry.js (100%) rename src/{paymentservice => payment}/package-lock.json (99%) rename src/{paymentservice => payment}/package.json (97%) rename test/tracetesting/{paymentservice => payment}/all.yaml (67%) rename test/tracetesting/{paymentservice => payment}/amex-credit-card-not-allowed.yaml (96%) rename test/tracetesting/{paymentservice => payment}/expired-credit-card.yaml (96%) rename test/tracetesting/{paymentservice => payment}/invalid-credit-card.yaml (96%) rename test/tracetesting/{paymentservice => payment}/valid-credit-card.yaml (96%) diff --git a/.env b/.env index b43ba66093..bca65c3578 100644 --- a/.env +++ b/.env @@ -102,9 +102,9 @@ LOCUST_HEADLESS=false LOAD_GENERATOR_DOCKERFILE=./src/load-generator/Dockerfile # Payment Service -PAYMENT_SERVICE_PORT=50051 -PAYMENT_SERVICE_ADDR=paymentservice:${PAYMENT_SERVICE_PORT} -PAYMENT_SERVICE_DOCKERFILE=./src/paymentservice/Dockerfile +PAYMENT_PORT=50051 +PAYMENT_ADDR=payment:${PAYMENT_PORT} +PAYMENT_DOCKERFILE=./src/payment/Dockerfile # Product Catalog Service PRODUCT_CATALOG_SERVICE_PORT=3550 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 76b006908b..599328f320 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -103,8 +103,8 @@ jobs: tag_suffix: load-generator context: ./ setup-qemu: true - - file: ./src/paymentservice/Dockerfile - tag_suffix: paymentservice + - file: ./src/payment/Dockerfile + tag_suffix: payment context: ./ setup-qemu: true - file: ./src/productcatalogservice/Dockerfile diff --git a/.gitignore b/.gitignore index a7c2a831f9..401292e0ef 100644 --- a/.gitignore +++ b/.gitignore @@ -52,7 +52,7 @@ test/tracetesting/tracetesting-vars.yaml /src/fraud-detection/src/main/proto /src/frontend/pb/ /src/frontend/protos/ -/src/paymentservice/demo.proto +/src/payment/demo.proto /src/shipping/proto/ /src/currency/proto diff --git a/CHANGELOG.md b/CHANGELOG.md index 627c3de848..9cea672f7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,8 @@ the release. ([#1861](https://github.com/open-telemetry/opentelemetry-demo/pull/1861)) * [fraud-detection] rename frauddetectionservice to fraud-detection ([#1862](https://github.com/open-telemetry/opentelemetry-demo/pull/1862)) +* [payment] rename paymentservice to payment + ([#1863](https://github.com/open-telemetry/opentelemetry-demo/pull/1863)) ## 1.12.0 diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index c2a8810adb..363bc2e37a 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -43,7 +43,7 @@ services: - CURRENCY_ADDR - EMAIL_ADDR - FRONTEND_ADDR - - PAYMENT_SERVICE_ADDR + - PAYMENT_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - SHIPPING_ADDR @@ -73,7 +73,7 @@ services: condition: service_started frontend: condition: service_started - paymentservice: + payment: condition: service_started productcatalogservice: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 8fe5d0b3c3..8fe30aa9ab 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -102,7 +102,7 @@ services: - CURRENCY_ADDR - EMAIL_ADDR - FLAGD_HOST - - PAYMENT_SERVICE_ADDR + - PAYMENT_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - SHIPPING_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT @@ -116,7 +116,7 @@ services: condition: service_started email: condition: service_started - paymentservice: + payment: condition: service_started productcatalogservice: condition: service_started @@ -351,28 +351,28 @@ services: logging: *logging # Payment service - paymentservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-paymentservice + payment: + image: ${IMAGE_NAME}:${DEMO_VERSION}-payment container_name: payment-service build: context: ./ - dockerfile: ${PAYMENT_SERVICE_DOCKERFILE} + dockerfile: ${PAYMENT_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-paymentservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-payment deploy: resources: limits: memory: 120M restart: unless-stopped ports: - - "${PAYMENT_SERVICE_PORT}" + - "${PAYMENT_PORT}" environment: - FLAGD_HOST - - PAYMENT_SERVICE_PORT + - PAYMENT_PORT - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=paymentservice + - OTEL_SERVICE_NAME=payment depends_on: otel-collector: condition: service_started diff --git a/docker-compose.yml b/docker-compose.yml index 9d392cc4a8..0d2d80aeeb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -135,7 +135,7 @@ services: - CART_ADDR - CURRENCY_ADDR - EMAIL_ADDR - - PAYMENT_SERVICE_ADDR + - PAYMENT_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - SHIPPING_ADDR - KAFKA_SERVICE_ADDR @@ -150,7 +150,7 @@ services: condition: service_started email: condition: service_started - paymentservice: + payment: condition: service_started productcatalogservice: condition: service_started @@ -427,29 +427,29 @@ services: logging: *logging # Payment service - paymentservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-paymentservice + payment: + image: ${IMAGE_NAME}:${DEMO_VERSION}-payment container_name: payment-service build: context: ./ - dockerfile: ${PAYMENT_SERVICE_DOCKERFILE} + dockerfile: ${PAYMENT_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-paymentservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-payment deploy: resources: limits: memory: 120M restart: unless-stopped ports: - - "${PAYMENT_SERVICE_PORT}" + - "${PAYMENT_PORT}" environment: - - PAYMENT_SERVICE_PORT + - PAYMENT_PORT - FLAGD_HOST - FLAGD_PORT - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=paymentservice + - OTEL_SERVICE_NAME=payment depends_on: otel-collector: condition: service_started diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index dfd16526e5..cb18f893e8 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -28,7 +28,7 @@ gen_proto_go checkoutservice #gen_proto_cpp currency #gen_proto_ruby email #gen_proto_ts frontend -#gen_proto_js paymentservice +#gen_proto_js payment gen_proto_go productcatalogservice #gen_proto_php quote gen_proto_python recommendationservice diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index 76ad0f1980..6c7f23ea72 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -73,7 +73,7 @@ gen_proto_go checkoutservice # gen_proto_ruby email gen_proto_ts frontend gen_proto_ts react-native-app -gen_proto_js paymentservice +gen_proto_js payment gen_proto_go productcatalogservice # gen_proto_php quote gen_proto_python recommendationservice diff --git a/renovate.json5 b/renovate.json5 index 38203138f1..231e8c68c5 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -71,8 +71,8 @@ "groupName": "otel-collector", }, { - "matchFileNames": ["src/paymentservice/**"], - "groupName": "paymentservice", + "matchFileNames": ["src/payment/**"], + "groupName": "payment", }, { "matchFileNames": ["src/productcatalogservice/**"], diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index 5ad3afa8ba..3f9c169199 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -192,7 +192,7 @@ func main() { svc.emailSvcClient = pb.NewEmailServiceClient(c) defer c.Close() - mustMapEnv(&svc.paymentSvcAddr, "PAYMENT_SERVICE_ADDR") + mustMapEnv(&svc.paymentSvcAddr, "PAYMENT_ADDR") c = mustCreateClient(svc.paymentSvcAddr) svc.paymentSvcClient = pb.NewPaymentServiceClient(c) defer c.Close() @@ -442,7 +442,7 @@ func (cs *checkoutService) convertCurrency(ctx context.Context, from *pb.Money, func (cs *checkoutService) chargeCard(ctx context.Context, amount *pb.Money, paymentInfo *pb.CreditCardInfo) (string, error) { paymentService := cs.paymentSvcClient - if cs.isFeatureFlagEnabled(ctx, "paymentServiceUnreachable") { + if cs.isFeatureFlagEnabled(ctx, "paymentUnreachable") { badAddress := "badAddress:50051" c := mustCreateClient(badAddress) paymentService = pb.NewPaymentServiceClient(c) diff --git a/src/flagd/demo.flagd.json b/src/flagd/demo.flagd.json index 74fb5fcf1d..07439ebf89 100644 --- a/src/flagd/demo.flagd.json +++ b/src/flagd/demo.flagd.json @@ -64,7 +64,7 @@ }, "defaultVariant": "off" }, - "paymentServiceFailure": { + "paymentFailure": { "description": "Fail payment service charge requests n%", "state": "ENABLED", "variants": { @@ -78,7 +78,7 @@ }, "defaultVariant": "off" }, - "paymentServiceUnreachable": { + "paymentUnreachable": { "description": "Payment service is unavailable", "state": "ENABLED", "variants": { diff --git a/src/paymentservice/.dockerignore b/src/payment/.dockerignore similarity index 100% rename from src/paymentservice/.dockerignore rename to src/payment/.dockerignore diff --git a/src/paymentservice/Dockerfile b/src/payment/Dockerfile similarity index 82% rename from src/paymentservice/Dockerfile rename to src/payment/Dockerfile index fb78bc3b17..e1f5e03278 100644 --- a/src/paymentservice/Dockerfile +++ b/src/payment/Dockerfile @@ -6,7 +6,7 @@ FROM node:22-alpine AS build WORKDIR /usr/src/app/ -COPY ./src/paymentservice/package*.json ./ +COPY ./src/payment/package*.json ./ RUN apk add --no-cache python3 make g++ && npm ci --omit=dev @@ -19,8 +19,8 @@ WORKDIR /usr/src/app/ ENV NODE_ENV=production COPY --chown=node:node --from=build /usr/src/app/node_modules/ ./node_modules/ -COPY ./src/paymentservice/ ./ +COPY ./src/payment/ ./ COPY ./pb/demo.proto ./ -EXPOSE ${PAYMENT_SERVICE_PORT} +EXPOSE ${PAYMENT_PORT} ENTRYPOINT [ "npm", "run", "start" ] diff --git a/src/paymentservice/README.md b/src/payment/README.md similarity index 87% rename from src/paymentservice/README.md rename to src/payment/README.md index 1f73c2d954..62194705b4 100644 --- a/src/paymentservice/README.md +++ b/src/payment/README.md @@ -12,5 +12,5 @@ Copy the `demo.proto` file to this directory and run `npm ci` From the root directory, run: ```sh -docker compose build paymentservice +docker compose build payment ``` diff --git a/src/paymentservice/charge.js b/src/payment/charge.js similarity index 95% rename from src/paymentservice/charge.js rename to src/payment/charge.js index 4d02ba24e8..588cc0754e 100644 --- a/src/paymentservice/charge.js +++ b/src/payment/charge.js @@ -9,8 +9,8 @@ const { FlagdProvider } = require('@openfeature/flagd-provider'); const flagProvider = new FlagdProvider(); const logger = require('./logger'); -const tracer = trace.getTracer('paymentservice'); -const meter = metrics.getMeter('paymentservice'); +const tracer = trace.getTracer('payment'); +const meter = metrics.getMeter('payment'); const transactionsCounter = meter.createCounter('app.payment.transactions'); const LOYALTY_LEVEL = ['platinum', 'gold', 'silver', 'bronze']; @@ -26,7 +26,7 @@ module.exports.charge = async request => { await OpenFeature.setProviderAndWait(flagProvider); - const numberVariant = await OpenFeature.getClient().getNumberValue("paymentServiceFailure", 0); + const numberVariant = await OpenFeature.getClient().getNumberValue("paymentFailure", 0); if (numberVariant > 0) { // n% chance to fail with app.loyalty.level=gold diff --git a/src/paymentservice/index.js b/src/payment/index.js similarity index 88% rename from src/paymentservice/index.js rename to src/payment/index.js index c068c31082..362059e2a6 100644 --- a/src/paymentservice/index.js +++ b/src/payment/index.js @@ -45,12 +45,12 @@ server.addService(health.service, new health.Implementation({ server.addService(otelDemoPackage.oteldemo.PaymentService.service, { charge: chargeServiceHandler }) -server.bindAsync(`0.0.0.0:${process.env['PAYMENT_SERVICE_PORT']}`, grpc.ServerCredentials.createInsecure(), (err, port) => { +server.bindAsync(`0.0.0.0:${process.env['PAYMENT_PORT']}`, grpc.ServerCredentials.createInsecure(), (err, port) => { if (err) { return logger.error({ err }) } - logger.info(`PaymentService gRPC server started on port ${port}`) + logger.info(`payment gRPC server started on port ${port}`) }) process.once('SIGINT', closeGracefully) diff --git a/src/paymentservice/logger.js b/src/payment/logger.js similarity index 100% rename from src/paymentservice/logger.js rename to src/payment/logger.js diff --git a/src/paymentservice/opentelemetry.js b/src/payment/opentelemetry.js similarity index 100% rename from src/paymentservice/opentelemetry.js rename to src/payment/opentelemetry.js diff --git a/src/paymentservice/package-lock.json b/src/payment/package-lock.json similarity index 99% rename from src/paymentservice/package-lock.json rename to src/payment/package-lock.json index 881fb4216b..8128bed3ab 100644 --- a/src/paymentservice/package-lock.json +++ b/src/payment/package-lock.json @@ -1,11 +1,11 @@ { - "name": "paymentservice", + "name": "payment", "version": "1.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "paymentservice", + "name": "payment", "version": "1.12.0", "license": "ISC", "dependencies": { diff --git a/src/paymentservice/package.json b/src/payment/package.json similarity index 97% rename from src/paymentservice/package.json rename to src/payment/package.json index 2c0365b0c1..607dcf02c9 100644 --- a/src/paymentservice/package.json +++ b/src/payment/package.json @@ -1,5 +1,5 @@ { - "name": "paymentservice", + "name": "payment", "description": "Payment Service", "repository": "https://github.com/opentelemetry/opentelemetry-demo", "main": "index.js", diff --git a/test/tracetesting/paymentservice/all.yaml b/test/tracetesting/payment/all.yaml similarity index 67% rename from test/tracetesting/paymentservice/all.yaml rename to test/tracetesting/payment/all.yaml index e295034dce..c7d08d8944 100644 --- a/test/tracetesting/paymentservice/all.yaml +++ b/test/tracetesting/payment/all.yaml @@ -3,9 +3,9 @@ type: TestSuite spec: - id: payment-service-all - name: 'Payment Service' - description: Run all Payment Service tests enabled in sequence + id: payment-all + name: 'Payment' + description: Run all Payment tests enabled in sequence steps: - ./valid-credit-card.yaml - ./invalid-credit-card.yaml diff --git a/test/tracetesting/paymentservice/amex-credit-card-not-allowed.yaml b/test/tracetesting/payment/amex-credit-card-not-allowed.yaml similarity index 96% rename from test/tracetesting/paymentservice/amex-credit-card-not-allowed.yaml rename to test/tracetesting/payment/amex-credit-card-not-allowed.yaml index ab3629df30..6ad88e7885 100644 --- a/test/tracetesting/paymentservice/amex-credit-card-not-allowed.yaml +++ b/test/tracetesting/payment/amex-credit-card-not-allowed.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:PAYMENT_SERVICE_ADDR} + address: ${var:PAYMENT_ADDR} method: oteldemo.PaymentService.Charge request: |- { diff --git a/test/tracetesting/paymentservice/expired-credit-card.yaml b/test/tracetesting/payment/expired-credit-card.yaml similarity index 96% rename from test/tracetesting/paymentservice/expired-credit-card.yaml rename to test/tracetesting/payment/expired-credit-card.yaml index 27963f28d7..c2f9d5d020 100644 --- a/test/tracetesting/paymentservice/expired-credit-card.yaml +++ b/test/tracetesting/payment/expired-credit-card.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:PAYMENT_SERVICE_ADDR} + address: ${var:PAYMENT_ADDR} method: oteldemo.PaymentService.Charge request: |- { diff --git a/test/tracetesting/paymentservice/invalid-credit-card.yaml b/test/tracetesting/payment/invalid-credit-card.yaml similarity index 96% rename from test/tracetesting/paymentservice/invalid-credit-card.yaml rename to test/tracetesting/payment/invalid-credit-card.yaml index a6028f66a2..6ab64de72a 100644 --- a/test/tracetesting/paymentservice/invalid-credit-card.yaml +++ b/test/tracetesting/payment/invalid-credit-card.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:PAYMENT_SERVICE_ADDR} + address: ${var:PAYMENT_ADDR} method: oteldemo.PaymentService.Charge request: |- { diff --git a/test/tracetesting/paymentservice/valid-credit-card.yaml b/test/tracetesting/payment/valid-credit-card.yaml similarity index 96% rename from test/tracetesting/paymentservice/valid-credit-card.yaml rename to test/tracetesting/payment/valid-credit-card.yaml index 32c1001332..3bc7a657cd 100644 --- a/test/tracetesting/paymentservice/valid-credit-card.yaml +++ b/test/tracetesting/payment/valid-credit-card.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:PAYMENT_SERVICE_ADDR} + address: ${var:PAYMENT_ADDR} method: oteldemo.PaymentService.Charge request: |- { diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index aba367b86f..ac92e25dd9 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "email" "paymentservice" "productcatalogservice" "recommendationservice" "shipping") +ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "email" "payment" "productcatalogservice" "recommendationservice" "shipping") ## Script variables # Will contain the list of services to test @@ -46,8 +46,8 @@ spec: value: $EMAIL_ADDR - key: FRONTEND_ADDR value: $FRONTEND_ADDR - - key: PAYMENT_SERVICE_ADDR - value: $PAYMENT_SERVICE_ADDR + - key: PAYMENT_ADDR + value: $PAYMENT_ADDR - key: PRODUCT_CATALOG_SERVICE_ADDR value: $PRODUCT_CATALOG_SERVICE_ADDR - key: RECOMMENDATION_SERVICE_ADDR From 2210b5bf48b18a7faf96599234b16027c5284a8a Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Mon, 23 Dec 2024 14:10:20 -0500 Subject: [PATCH 22/24] [recommendation] rename recommendationservice to recommendation (#1865) --- .env | 6 +++--- .github/workflows/component-build-images.yml | 4 ++-- .licenserc.json | 4 ++-- CHANGELOG.md | 2 ++ Makefile | 2 +- docker-compose-tests.yml | 4 ++-- docker-compose.minimal.yml | 18 +++++++++--------- docker-compose.yml | 18 +++++++++--------- docker-gen-proto.sh | 2 +- ide-gen-proto.sh | 2 +- renovate.json5 | 4 ++-- src/flagd/demo.flagd.json | 2 +- .../gateways/rpc/Recommendations.gateway.ts | 4 ++-- src/frontend/next.config.js | 4 ++-- .../Dockerfile | 6 +++--- .../README.md | 2 +- .../demo_pb2.py | 0 .../demo_pb2_grpc.py | 0 .../genproto/Dockerfile | 0 .../logger.py | 0 .../metrics.py | 0 .../recommendation_server.py | 6 +++--- .../requirements.txt | 0 .../all.yaml | 0 .../list.yaml | 2 +- test/tracetesting/run.bash | 6 +++--- 26 files changed, 50 insertions(+), 48 deletions(-) rename src/{recommendationservice => recommendation}/Dockerfile (82%) rename src/{recommendationservice => recommendation}/README.md (87%) rename src/{recommendationservice => recommendation}/demo_pb2.py (100%) rename src/{recommendationservice => recommendation}/demo_pb2_grpc.py (100%) rename src/{recommendationservice => recommendation}/genproto/Dockerfile (100%) rename src/{recommendationservice => recommendation}/logger.py (100%) rename src/{recommendationservice => recommendation}/metrics.py (100%) rename src/{recommendationservice => recommendation}/recommendation_server.py (96%) rename src/{recommendationservice => recommendation}/requirements.txt (100%) rename test/tracetesting/{recommendationservice => recommendation}/all.yaml (100%) rename test/tracetesting/{recommendationservice => recommendation}/list.yaml (94%) diff --git a/.env b/.env index bca65c3578..1779f87def 100644 --- a/.env +++ b/.env @@ -117,9 +117,9 @@ QUOTE_ADDR=http://quote:${QUOTE_PORT} QUOTE_DOCKERFILE=./src/quote/Dockerfile # Recommendation Service -RECOMMENDATION_SERVICE_PORT=9001 -RECOMMENDATION_SERVICE_ADDR=recommendationservice:${RECOMMENDATION_SERVICE_PORT} -RECOMMENDATION_SERVICE_DOCKERFILE=./src/recommendationservice/Dockerfile +RECOMMENDATION_PORT=9001 +RECOMMENDATION_ADDR=recommendation:${RECOMMENDATION_PORT} +RECOMMENDATION_DOCKERFILE=./src/recommendation/Dockerfile # Shipping Service SHIPPING_PORT=50050 diff --git a/.github/workflows/component-build-images.yml b/.github/workflows/component-build-images.yml index 599328f320..b1e5df9dc6 100644 --- a/.github/workflows/component-build-images.yml +++ b/.github/workflows/component-build-images.yml @@ -115,8 +115,8 @@ jobs: tag_suffix: quote context: ./ setup-qemu: true - - file: ./src/recommendationservice/Dockerfile - tag_suffix: recommendationservice + - file: ./src/recommendation/Dockerfile + tag_suffix: recommendation context: ./ setup-qemu: true - file: ./src/shipping/Dockerfile diff --git a/.licenserc.json b/.licenserc.json index 6c3d85a679..350f284092 100644 --- a/.licenserc.json +++ b/.licenserc.json @@ -51,8 +51,8 @@ "src/react-native-app/android/.gradle/", "src/react-native-app/.expo/", "src/react-native-app/expo-env.d.ts", - "src/recommendationservice/demo_pb2.py", - "src/recommendationservice/demo_pb2_grpc.py", + "src/recommendation/demo_pb2.py", + "src/recommendation/demo_pb2_grpc.py", "internal/tools/" ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cea672f7c..2861f1bcc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,8 @@ the release. ([#1862](https://github.com/open-telemetry/opentelemetry-demo/pull/1862)) * [payment] rename paymentservice to payment ([#1863](https://github.com/open-telemetry/opentelemetry-demo/pull/1863)) +* [recommendation] rename recommendationservice to recommendation + ([#1865](https://github.com/open-telemetry/opentelemetry-demo/pull/1865)) ## 1.12.0 diff --git a/Makefile b/Makefile index 7f6e6640b7..7bb2f27153 100644 --- a/Makefile +++ b/Makefile @@ -140,7 +140,7 @@ docker-generate-protobuf: .PHONY: clean clean: rm -rf ./src/{checkoutservice,productcatalogservice}/genproto/oteldemo/ - rm -rf ./src/recommendationservice/{demo_pb2,demo_pb2_grpc}.py + rm -rf ./src/recommendation/{demo_pb2,demo_pb2_grpc}.py .PHONY: check-clean-work-tree check-clean-work-tree: diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index 363bc2e37a..dc2714c84a 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -45,7 +45,7 @@ services: - FRONTEND_ADDR - PAYMENT_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - - RECOMMENDATION_SERVICE_ADDR + - RECOMMENDATION_ADDR - SHIPPING_ADDR - KAFKA_SERVICE_ADDR extra_hosts: @@ -79,7 +79,7 @@ services: condition: service_started quote: condition: service_started - recommendationservice: + recommendation: condition: service_started shipping: condition: service_started diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 8fe30aa9ab..2066c6b2ac 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -204,7 +204,7 @@ services: - CHECKOUT_SERVICE_ADDR - CURRENCY_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - - RECOMMENDATION_SERVICE_ADDR + - RECOMMENDATION_ADDR - SHIPPING_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES} @@ -229,7 +229,7 @@ services: condition: service_started quote: condition: service_started - recommendationservice: + recommendation: condition: service_started shipping: condition: service_started @@ -435,30 +435,30 @@ services: logging: *logging # Recommendation service - recommendationservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-recommendationservice + recommendation: + image: ${IMAGE_NAME}:${DEMO_VERSION}-recommendation container_name: recommendation-service build: context: ./ - dockerfile: ${RECOMMENDATION_SERVICE_DOCKERFILE} + dockerfile: ${RECOMMENDATION_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-recommendationservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-recommendation deploy: resources: limits: memory: 50M restart: unless-stopped ports: - - "${RECOMMENDATION_SERVICE_PORT}" + - "${RECOMMENDATION_PORT}" environment: - FLAGD_HOST - - RECOMMENDATION_SERVICE_PORT + - RECOMMENDATION_PORT - PRODUCT_CATALOG_SERVICE_ADDR - OTEL_PYTHON_LOG_CORRELATION=true - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=recommendationservice + - OTEL_SERVICE_NAME=recommendation - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python depends_on: productcatalogservice: diff --git a/docker-compose.yml b/docker-compose.yml index 0d2d80aeeb..22ee8e86ac 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -276,7 +276,7 @@ services: - CHECKOUT_SERVICE_ADDR - CURRENCY_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - - RECOMMENDATION_SERVICE_ADDR + - RECOMMENDATION_ADDR - SHIPPING_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES} @@ -301,7 +301,7 @@ services: condition: service_started quote: condition: service_started - recommendationservice: + recommendation: condition: service_started shipping: condition: service_started @@ -517,23 +517,23 @@ services: logging: *logging # Recommendation service - recommendationservice: - image: ${IMAGE_NAME}:${DEMO_VERSION}-recommendationservice + recommendation: + image: ${IMAGE_NAME}:${DEMO_VERSION}-recommendation container_name: recommendation-service build: context: ./ - dockerfile: ${RECOMMENDATION_SERVICE_DOCKERFILE} + dockerfile: ${RECOMMENDATION_DOCKERFILE} cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-recommendationservice + - ${IMAGE_NAME}:${IMAGE_VERSION}-recommendation deploy: resources: limits: memory: 500M # This is high to enable supporting the recommendationCache feature flag use case restart: unless-stopped ports: - - "${RECOMMENDATION_SERVICE_PORT}" + - "${RECOMMENDATION_PORT}" environment: - - RECOMMENDATION_SERVICE_PORT + - RECOMMENDATION_PORT - PRODUCT_CATALOG_SERVICE_ADDR - FLAGD_HOST - FLAGD_PORT @@ -541,7 +541,7 @@ services: - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - - OTEL_SERVICE_NAME=recommendationservice + - OTEL_SERVICE_NAME=recommendation - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python depends_on: productcatalogservice: diff --git a/docker-gen-proto.sh b/docker-gen-proto.sh index cb18f893e8..f29fdcfcdb 100755 --- a/docker-gen-proto.sh +++ b/docker-gen-proto.sh @@ -31,5 +31,5 @@ gen_proto_go checkoutservice #gen_proto_js payment gen_proto_go productcatalogservice #gen_proto_php quote -gen_proto_python recommendationservice +gen_proto_python recommendation #gen_proto_rust shipping diff --git a/ide-gen-proto.sh b/ide-gen-proto.sh index 6c7f23ea72..aabbdf5f38 100755 --- a/ide-gen-proto.sh +++ b/ide-gen-proto.sh @@ -76,5 +76,5 @@ gen_proto_ts react-native-app gen_proto_js payment gen_proto_go productcatalogservice # gen_proto_php quote -gen_proto_python recommendationservice +gen_proto_python recommendation gen_proto_rust shipping diff --git a/renovate.json5 b/renovate.json5 index 231e8c68c5..7155995f2a 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -87,8 +87,8 @@ "groupName": "quote", }, { - "matchFileNames": ["src/recommendationservice/**"], - "groupName": "recommendationservice", + "matchFileNames": ["src/recommendation/**"], + "groupName": "recommendation", }, { "matchFileNames": ["src/shipping/**"], diff --git a/src/flagd/demo.flagd.json b/src/flagd/demo.flagd.json index 07439ebf89..4425e72415 100644 --- a/src/flagd/demo.flagd.json +++ b/src/flagd/demo.flagd.json @@ -10,7 +10,7 @@ }, "defaultVariant": "off" }, - "recommendationServiceCacheFailure": { + "recommendationCacheFailure": { "description": "Fail recommendation service cache", "state": "ENABLED", "variants": { diff --git a/src/frontend/gateways/rpc/Recommendations.gateway.ts b/src/frontend/gateways/rpc/Recommendations.gateway.ts index 62fcd6dd5c..c58a47032b 100644 --- a/src/frontend/gateways/rpc/Recommendations.gateway.ts +++ b/src/frontend/gateways/rpc/Recommendations.gateway.ts @@ -4,9 +4,9 @@ import { ChannelCredentials } from '@grpc/grpc-js'; import { ListRecommendationsResponse, RecommendationServiceClient } from '../../protos/demo'; -const { RECOMMENDATION_SERVICE_ADDR = '' } = process.env; +const { RECOMMENDATION_ADDR = '' } = process.env; -const client = new RecommendationServiceClient(RECOMMENDATION_SERVICE_ADDR, ChannelCredentials.createInsecure()); +const client = new RecommendationServiceClient(RECOMMENDATION_ADDR, ChannelCredentials.createInsecure()); const RecommendationsGateway = () => ({ listRecommendations(userId: string, productIds: string[]) { diff --git a/src/frontend/next.config.js b/src/frontend/next.config.js index eac4615be9..98e3e53f48 100755 --- a/src/frontend/next.config.js +++ b/src/frontend/next.config.js @@ -18,7 +18,7 @@ const { CHECKOUT_SERVICE_ADDR = '', CURRENCY_ADDR = '', PRODUCT_CATALOG_SERVICE_ADDR = '', - RECOMMENDATION_SERVICE_ADDR = '', + RECOMMENDATION_ADDR = '', SHIPPING_ADDR = '', ENV_PLATFORM = '', OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = '', @@ -50,7 +50,7 @@ const nextConfig = { CHECKOUT_SERVICE_ADDR, CURRENCY_ADDR, PRODUCT_CATALOG_SERVICE_ADDR, - RECOMMENDATION_SERVICE_ADDR, + RECOMMENDATION_ADDR, SHIPPING_ADDR, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, NEXT_PUBLIC_PLATFORM: ENV_PLATFORM, diff --git a/src/recommendationservice/Dockerfile b/src/recommendation/Dockerfile similarity index 82% rename from src/recommendationservice/Dockerfile rename to src/recommendation/Dockerfile index 5a4ee45fc0..8e1d8168f5 100644 --- a/src/recommendationservice/Dockerfile +++ b/src/recommendation/Dockerfile @@ -13,7 +13,7 @@ RUN apt-get -qq update \ && rm -rf /var/lib/apt/lists/* WORKDIR /usr/src/app/ -COPY ./src/recommendationservice/requirements.txt ./ +COPY ./src/recommendation/requirements.txt ./ RUN pip install --upgrade pip RUN pip install --prefix="/reqs" -r requirements.txt @@ -24,9 +24,9 @@ RUN pip install --prefix="/reqs" -r requirements.txt FROM base AS runtime WORKDIR /usr/src/app/ COPY --from=builder /reqs /usr/local -COPY ./src/recommendationservice/ ./ +COPY ./src/recommendation/ ./ RUN opentelemetry-bootstrap -a install -EXPOSE ${RECOMMENDATION_SERVICE_PORT} +EXPOSE ${RECOMMENDATION_PORT} ENTRYPOINT [ "opentelemetry-instrument", "python", "recommendation_server.py" ] diff --git a/src/recommendationservice/README.md b/src/recommendation/README.md similarity index 87% rename from src/recommendationservice/README.md rename to src/recommendation/README.md index cf6e386aaa..ec0df489d6 100644 --- a/src/recommendationservice/README.md +++ b/src/recommendation/README.md @@ -16,5 +16,5 @@ make docker-generate-protobuf From the root directory, run: ```sh -docker compose build recommendationservice +docker compose build recommendation ``` diff --git a/src/recommendationservice/demo_pb2.py b/src/recommendation/demo_pb2.py similarity index 100% rename from src/recommendationservice/demo_pb2.py rename to src/recommendation/demo_pb2.py diff --git a/src/recommendationservice/demo_pb2_grpc.py b/src/recommendation/demo_pb2_grpc.py similarity index 100% rename from src/recommendationservice/demo_pb2_grpc.py rename to src/recommendation/demo_pb2_grpc.py diff --git a/src/recommendationservice/genproto/Dockerfile b/src/recommendation/genproto/Dockerfile similarity index 100% rename from src/recommendationservice/genproto/Dockerfile rename to src/recommendation/genproto/Dockerfile diff --git a/src/recommendationservice/logger.py b/src/recommendation/logger.py similarity index 100% rename from src/recommendationservice/logger.py rename to src/recommendation/logger.py diff --git a/src/recommendationservice/metrics.py b/src/recommendation/metrics.py similarity index 100% rename from src/recommendationservice/metrics.py rename to src/recommendation/metrics.py diff --git a/src/recommendationservice/recommendation_server.py b/src/recommendation/recommendation_server.py similarity index 96% rename from src/recommendationservice/recommendation_server.py rename to src/recommendation/recommendation_server.py index 1a6826d80d..fd25359ea9 100644 --- a/src/recommendationservice/recommendation_server.py +++ b/src/recommendation/recommendation_server.py @@ -75,7 +75,7 @@ def get_product_list(request_product_ids): request_product_ids = request_product_ids_str.split(',') # Feature flag scenario - Cache Leak - if check_feature_flag("recommendationServiceCacheFailure"): + if check_feature_flag("recommendationCacheFailure"): span.set_attribute("app.recommendation.cache_enabled", True) if random.random() < 0.5 or first_run: first_run = False @@ -123,7 +123,7 @@ def must_map_env(key: str): def check_feature_flag(flag_name: str): # Initialize OpenFeature client = api.get_client() - return client.get_boolean_value("recommendationServiceCacheFailure", False) + return client.get_boolean_value("recommendationCacheFailure", False) if __name__ == "__main__": @@ -166,7 +166,7 @@ def check_feature_flag(flag_name: str): health_pb2_grpc.add_HealthServicer_to_server(service, server) # Start server - port = must_map_env('RECOMMENDATION_SERVICE_PORT') + port = must_map_env('RECOMMENDATION_PORT') server.add_insecure_port(f'[::]:{port}') server.start() logger.info(f'Recommendation service started, listening on port {port}') diff --git a/src/recommendationservice/requirements.txt b/src/recommendation/requirements.txt similarity index 100% rename from src/recommendationservice/requirements.txt rename to src/recommendation/requirements.txt diff --git a/test/tracetesting/recommendationservice/all.yaml b/test/tracetesting/recommendation/all.yaml similarity index 100% rename from test/tracetesting/recommendationservice/all.yaml rename to test/tracetesting/recommendation/all.yaml diff --git a/test/tracetesting/recommendationservice/list.yaml b/test/tracetesting/recommendation/list.yaml similarity index 94% rename from test/tracetesting/recommendationservice/list.yaml rename to test/tracetesting/recommendation/list.yaml index 2478bd6dc0..177628ec7e 100644 --- a/test/tracetesting/recommendationservice/list.yaml +++ b/test/tracetesting/recommendation/list.yaml @@ -10,7 +10,7 @@ spec: type: grpc grpc: protobufFile: ../../../pb/demo.proto - address: ${var:RECOMMENDATION_SERVICE_ADDR} + address: ${var:RECOMMENDATION_ADDR} method: oteldemo.RecommendationService.ListRecommendations request: |- { diff --git a/test/tracetesting/run.bash b/test/tracetesting/run.bash index ac92e25dd9..15c15263c2 100755 --- a/test/tracetesting/run.bash +++ b/test/tracetesting/run.bash @@ -8,7 +8,7 @@ set -e # Availalble services to test -ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "email" "payment" "productcatalogservice" "recommendationservice" "shipping") +ALL_SERVICES=("ad" "cart" "currency" "checkoutservice" "frontend" "email" "payment" "productcatalogservice" "recommendation" "shipping") ## Script variables # Will contain the list of services to test @@ -50,8 +50,8 @@ spec: value: $PAYMENT_ADDR - key: PRODUCT_CATALOG_SERVICE_ADDR value: $PRODUCT_CATALOG_SERVICE_ADDR - - key: RECOMMENDATION_SERVICE_ADDR - value: $RECOMMENDATION_SERVICE_ADDR + - key: RECOMMENDATION_ADDR + value: $RECOMMENDATION_ADDR - key: SHIPPING_ADDR value: $SHIPPING_ADDR - key: KAFKA_SERVICE_ADDR From 19cbfeaca81d6c1a728183386721b98c52001b81 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Mon, 23 Dec 2024 14:15:34 -0500 Subject: [PATCH 23/24] [react-native-app] cleanup build instructions (#1860) * cleanup build instructions * cleanup build instructions * cleanup build instructions --------- Co-authored-by: Juliano Costa --- src/react-native-app/README.md | 143 +++++++++++++++++---------------- 1 file changed, 74 insertions(+), 69 deletions(-) diff --git a/src/react-native-app/README.md b/src/react-native-app/README.md index 88b2bd3b87..0c9eb2c1dd 100644 --- a/src/react-native-app/README.md +++ b/src/react-native-app/README.md @@ -1,6 +1,7 @@ # Example React Native app -This was created using [`npx create-expo-app@latest`](https://reactnative.dev/docs/environment-setup#start-a-new-react-native-project-with-expo) +This was created using +[`npx create-expo-app@latest`](https://reactnative.dev/docs/environment-setup#start-a-new-react-native-project-with-expo) Content was taken from the web app example in src/frontend and modified to work in a React Native environment. @@ -17,102 +18,122 @@ make start # or start-minimal ## Building the app Unlike the other components under src/ which run within containers this -app must be built and then run on a mobile simulator on your machine or a physical -device. If this is your first time running a React Native app then in order to -execute the steps under "Build on your host machine" you will need to setup your -local environment for Android or iOS development or both following -[this guide](https://reactnative.dev/docs/set-up-your-environment). Alternatively -for Android you can instead follow the steps under "Build within a container" to -leverage a container to build the app's apk for you. +app must be built and then run on a mobile simulator on your machine or a +physical device. If this is your first time running a React Native app then in +order to execute the steps under "Build on your host machine" you will need to +setup your local environment for Android or iOS development or both following +[this guide](https://reactnative.dev/docs/set-up-your-environment). +Alternatively for Android you can instead follow the steps under "Build within a +container" to leverage a container to build the app's apk for you. ### Build on your host machine -Build and run the React Native app for a given platform by navigating to this folder -and running: +Before building the app you will need to install the dependencies for the app. ```bash cd src/react-native-app npm install ``` -To run on Android: +#### Android: Build and run app + +To run on Android, the following command will compile the Android app and deploy +it to a running Android simulator or connected device. It will also start a +a server to provide the JS Bundle required by the app. ```bash npm run android ``` -Note that for the above command a server is also spun up to serve the JS bundle -to the deployed app. +#### iOS: Setup dependencies -To run on iOS you may find it cleanest to build through the XCode IDE. First spin -up the react native dev server with the following (feel free to ignore the output -commands referring to opening an iOS simulator, we'll do that directly through -XCode in a later step): +Before building for iOS you will need to setup the iOS dependency management +using CocoaPods. This command only needs to be run the first time before +building the app for iOS. ```bash -npm run start +cd ios && pod install && cd .. ``` -Then install the pods for the project: +#### iOS: Build and run with XCode -```bash -cd ios -pod install -``` - -Note that the above is the quickest way to get going but you may end up with -slightly different versions of the Pods than what has been committed to this repo, -in order to install the precise versions first setup [rbenv](https://github.com/rbenv/rbenv#installation) -followed by: +To run on iOS you may find it cleanest to build through the XCode IDE. In order +to start a server to provide the JS Bundle, run the following command (feel free +to ignore the output commands referring to opening an iOS simulator, we'll do +that directly through XCode in the next step). ```bash -rbenv install 2.7.6 # the version of ruby we've pinned for this app -bundle install -cd ios -bundle exec pod install +npm run start ``` -Then open XCode, open this as an existing project by opening `src/react-native-app/ios/react-native-app.xcworkspace` -then trigger the build by hitting the Play button or from the menu using Product->Run. +Then open XCode, open this as an existing project by opening +`src/react-native-app/ios/react-native-app.xcworkspace` then trigger the build +by hitting the Play button or from the menu using Product->Run. + +#### iOS: Build and run from the command-line -Or alternatively build and run from the command-line: +You can build and run the app using the command line with the following +command. This will compile the iOS app and deploy it to a running iOS simulator +and start a server to provide the JS Bundle. ```bash npm run ios ``` -Note that for the above command a server is also spun up to serve the JS bundle -to the deployed apps. - ### Build within a container For Android builds you can produce an apk using Docker without requiring the dev -tools to be installed on your host. From the project root run: +tools to be installed on your host. From this repository root run the +following command. ```bash make build-react-native-android ``` -Or directly from this folder using: +Or directly from this folder using. ```bash docker build -f android.Dockerfile --platform=linux/amd64 --output=. . ``` -This will produce `react-native-app.apk` in the directory where you ran the command. -If you have an Android emulator running on your machine then you can simply drag -and drop this file onto the emulator's window in order to install it following -[these steps](https://developer.android.com/studio/run/emulator-install-add-files). - -TODO: For a physical device you can install this by sending the apk file to your -device, giving the "Install unknown apps" permission to the app you will be opening -the file with, and then installing it. However this won't be able to hit the APIs -because they are hard-coded to be localhost, need those to be configurable before -this method would work. +This will create a `react-native-app.apk` file in the directory where you ran +the command. If you have an Android emulator running on your machine then you +can drag and drop this file onto the emulator's window in order to install it. ## Troubleshooting -### iOS build issues +### JS Bundle: build issues + +Try removing the `src/react-native-app/node_modules/` folder and then re-run +`npm install` from inside `src/react-native-app`. + +### Android: build app issues + +Try stopping and cleaning local services (in case there are unknown issues +related to the start of the app). + +```bash +cd src/react-native-app/android +./gradlew --stop // stop daemons +rm -rf ~/.gradle/caches/ +``` + +### iOS: pod install issues + +Note that the above is the quickest way to get going but you may end up with +slightly different versions of the Pods than what has been committed to this +repository, in order to install the precise versions first setup +[rbenv](https://github.com/rbenv/rbenv#installation) followed by the following +commands. + +```bash +rbenv install 2.7.6 # the version of ruby we've pinned for this app +bundle install +cd ios +bundle exec pod install +``` + +### iOS: build app issues If you see a build failure related to pods try forcing a clean install with and then attempt another build after: @@ -126,25 +147,9 @@ then attempt another build after: pod install --repo-update --verbose ``` -If there is an error compiling or running the app try closing any open simulators -and clearing all derived data: +If there is an error compiling or running the app try closing any open +simulators and clearing all derived data: ```bash rm -rf ~/Library/Developer/Xcode/DerivedData ``` - -### Android build issues - -Try stopping and cleaning local services (in case there are unknown issues related -to the start of the app): - -```bash - cd src/react-native-app/android - ./gradlew --stop // stop daemons - rm -rf ~/.gradle/caches/ -``` - -### JS build issues - -Try removing the `src/react-native-app/node_modules/` folder and then re-run -`npm install` from inside `src/react-native-app`. From 7543c595d9e43cda0433bf8461940022152f302f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Dec 2024 15:53:13 +0100 Subject: [PATCH 24/24] build(deps): bump the go-production-dependencies group across 2 directories with 1 update (#1869) --- src/checkoutservice/genproto/oteldemo/demo.pb.go | 2 +- src/checkoutservice/go.mod | 2 +- src/checkoutservice/go.sum | 4 ++-- src/productcatalogservice/genproto/oteldemo/demo.pb.go | 2 +- src/productcatalogservice/go.mod | 2 +- src/productcatalogservice/go.sum | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/checkoutservice/genproto/oteldemo/demo.pb.go b/src/checkoutservice/genproto/oteldemo/demo.pb.go index 3cc8230359..15b777ede0 100644 --- a/src/checkoutservice/genproto/oteldemo/demo.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.0 +// protoc-gen-go v1.36.1 // protoc v4.24.4 // source: demo.proto diff --git a/src/checkoutservice/go.mod b/src/checkoutservice/go.mod index 479cf7812f..66a4f1484c 100644 --- a/src/checkoutservice/go.mod +++ b/src/checkoutservice/go.mod @@ -22,7 +22,7 @@ require ( go.opentelemetry.io/otel/trace v1.33.0 google.golang.org/grpc v1.69.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.36.0 + google.golang.org/protobuf v1.36.1 ) require ( diff --git a/src/checkoutservice/go.sum b/src/checkoutservice/go.sum index c599cae4d7..a0ac4dffe3 100644 --- a/src/checkoutservice/go.sum +++ b/src/checkoutservice/go.sum @@ -265,8 +265,8 @@ google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= -google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= -google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/src/productcatalogservice/genproto/oteldemo/demo.pb.go b/src/productcatalogservice/genproto/oteldemo/demo.pb.go index 3cc8230359..15b777ede0 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.0 +// protoc-gen-go v1.36.1 // protoc v4.24.4 // source: demo.proto diff --git a/src/productcatalogservice/go.mod b/src/productcatalogservice/go.mod index 341dfe61e5..334fa165f1 100644 --- a/src/productcatalogservice/go.mod +++ b/src/productcatalogservice/go.mod @@ -19,7 +19,7 @@ require ( go.opentelemetry.io/otel/trace v1.33.0 google.golang.org/grpc v1.69.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.36.0 + google.golang.org/protobuf v1.36.1 ) require ( diff --git a/src/productcatalogservice/go.sum b/src/productcatalogservice/go.sum index 47ac9518b2..2c95904b8d 100644 --- a/src/productcatalogservice/go.sum +++ b/src/productcatalogservice/go.sum @@ -193,8 +193,8 @@ google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= -google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= -google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=