diff --git a/.github/actions/setup-environment/action.yml b/.github/actions/setup-environment/action.yml index 892e882..0822075 100644 --- a/.github/actions/setup-environment/action.yml +++ b/.github/actions/setup-environment/action.yml @@ -11,7 +11,7 @@ runs: using: "composite" steps: - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: ${{ inputs.node-version }} cache: 'npm' @@ -22,4 +22,8 @@ runs: - name: Build shell: bash - run: npm run build \ No newline at end of file + run: npm run build + + - name: Validate built site + shell: bash + run: npm run validate:site diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..dcc87a5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: "/" + schedule: + interval: weekly + labels: + - dependencies + - documentation + open-pull-requests-limit: 5 + + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + labels: + - dependencies + - ci diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2f518ba..11fa923 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 @@ -44,4 +44,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 3f1ff58..7a7c6c3 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Environment uses: ./.github/actions/setup-environment diff --git a/README.md b/README.md index 0c6c2c2..ebef3eb 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,13 @@ This website is built using [Docusaurus](https://docusaurus.io/), a modern stati ### Installation ``` -$ yarn +$ npm ci ``` ### Local Development ``` -$ yarn start +$ npm run start ``` This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. @@ -19,7 +19,7 @@ This command starts a local development server and opens up a browser window. Mo ### Build ``` -$ yarn build +$ npm run build ``` This command generates static content into the `build` directory and can be served using any static contents hosting service. @@ -29,13 +29,13 @@ This command generates static content into the `build` directory and can be serv Using SSH: ``` -$ USE_SSH=true yarn deploy +$ USE_SSH=true npm run deploy ``` Not using SSH: ``` -$ GIT_USER= yarn deploy +$ GIT_USER= npm run deploy ``` If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/cspell.json b/cspell.json index 70e2e01..e6f9b20 100644 --- a/cspell.json +++ b/cspell.json @@ -33,6 +33,8 @@ "millicores", "webui", "libp2p", + "llms", + "trino", "duckdb", "myvalue", "oom" diff --git a/docs/guides/compute-over-data-architecture.mdx b/docs/guides/compute-over-data-architecture.mdx new file mode 100644 index 0000000..30cbc60 --- /dev/null +++ b/docs/guides/compute-over-data-architecture.mdx @@ -0,0 +1,76 @@ +--- +title: Compute-over-data architecture across remote sites and object stores +description: Design a Bacalhau deployment that places work near data without hiding operational boundaries. +--- + +import StructuredData from '@site/src/components/StructuredData' + + + +# Compute-over-data architecture across remote sites and object stores + +Compute-over-data means choosing a compute location with practical access to the input, instead of automatically centralizing every dataset. In Bacalhau, an orchestrator receives a job and compute nodes execute Docker or WASM tasks; inputs and outputs are described as part of the job. See the [architecture overview](/docs/overview/architecture/) for component responsibilities. + +## Reference topology + +| Layer | Responsibility | Design question | +| --- | --- | --- | +| Orchestrator | Receives jobs and coordinates state | Who operates its availability, identity, and audit trail? | +| Compute nodes | Execute isolated task environments | Which sites can reach each dataset and meet runtime needs? | +| Input storage | Provides files, objects, or URLs | Which credentials and network paths are permitted? | +| Result publisher | Stores artifacts and results | Where may outputs reside and who can retrieve them? | + +Keep the network boundary explicit: object storage is not automatically mounted simply because a node is nearby, and a job constraint does not change a storage bucket policy. + +## Model the job rather than the marketing diagram + +This example uses a URL input and local publisher so the data path is visible. Substitute your controlled source and publisher only after reviewing the relevant source and result specifications. + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: summarize + Engine: + Type: docker + Params: + Image: alpine:3.21 + Parameters: [sh, -c, "wc -l /inputs/events.txt > /outputs/line-count.txt"] + InputSources: + - Alias: events + Target: /inputs/events.txt + Source: + Type: urlDownload + Params: + URL: https://example.org/events.txt + Publisher: + Type: local + ResultPaths: + - Name: outputs + Path: /outputs +``` + +Submit it with `bacalhau job run job.yaml`, then use `bacalhau job describe ` to inspect execution state. The [quick start](/docs/getting-started/quick-start/) shows the same imperative and declarative workflow. + +## Tradeoffs and controls + +| Requirement | Useful Bacalhau mechanism | Boundary outside Bacalhau | +| --- | --- | --- | +| Keep work at a site | Node labels and job constraints | Network segmentation and physical/data residency controls | +| Limit a task's inputs | Explicit input sources | Storage IAM, object ACLs, and secret distribution | +| Preserve results | Result paths and a publisher | Retention, encryption, and downstream access policy | +| Recover from a failure | Job state and operator monitoring | Site disaster recovery and capacity planning | + +Read the [constraint specification](/docs/specifications/job/constraint/), [input-source specification](/docs/specifications/job/input-source/), and [publishing results guide](/docs/guides/publishing-results/) before choosing production values. + +## Limitations + +This architecture does not eliminate data transfer: container images, inputs, logs, and results can still cross a network. Instrument those paths, test loss of a site or storage endpoint, and define whether a no-match constraint must fail closed or trigger an approved fallback. diff --git a/docs/guides/compute-over-data-comparison.mdx b/docs/guides/compute-over-data-comparison.mdx new file mode 100644 index 0000000..4570b07 --- /dev/null +++ b/docs/guides/compute-over-data-comparison.mdx @@ -0,0 +1,62 @@ +--- +title: Bacalhau compared with Kubernetes, KubeEdge, Nomad, Ray, and Trino +description: Choose a distributed-computing tool by data location, workload type, and operating model. +--- + +import StructuredData from '@site/src/components/StructuredData' + + + +# Bacalhau compared with Kubernetes, KubeEdge, Nomad, Ray, and Trino + +Bacalhau is an independent, Apache-2.0-licensed distributed compute project. It coordinates container and WASM jobs across compute nodes, with placement informed by available resources, job requirements, and data access. It is not a renamed Kubernetes distribution, a data warehouse, or a managed cloud service. + +## Start with the workload boundary + +| Tool | Primary strength | Prefer it when | Tradeoff to plan for | +| --- | --- | --- | --- | +| Bacalhau | Running arbitrary jobs close to distributed data | Batch, ops, daemon, or service workloads need data-aware placement | You operate the nodes, storage credentials, and job policy | +| Kubernetes | General-purpose container platform | You need a large ecosystem for long-lived applications | Data locality is normally modeled through your storage and scheduling design | +| KubeEdge | Kubernetes extension for edge nodes | Existing Kubernetes control-plane patterns must extend to devices | It retains Kubernetes operational complexity | +| Nomad | Simple workload scheduling | A homogeneous fleet and broad workload types are the main concern | Data-source-aware job design remains your responsibility | +| Ray | Distributed Python and AI workloads | Actors, tasks, and Python-native ML are central | It is not a general data-locality control plane | +| Trino | Federated SQL queries | The problem can be expressed in SQL over supported sources | It does not run arbitrary containerized transformations | + +The comparison is not a feature checklist. A common design is to retain Kubernetes or Nomad for application services, use a SQL engine for interactive analysis, and use Bacalhau for a bounded job that must execute where data can be accessed. + +## A small, auditable starting point + +Label nodes only with facts your operators maintain, then constrain a job to the required boundary: + +```bash +bacalhau serve --compute -c Labels="region=eu-west,data-boundary=eu" + +bacalhau docker run \ + --constraints "region=eu-west" \ + --constraints "data-boundary=eu" \ + --input https://example.org/manifest.json:/inputs/manifest.json \ + --output results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'wc -c /inputs/manifest.json > /outputs/count.txt' +``` + +This does not prove legal compliance by itself. Confirm network routes, identity, storage policy, encryption, and the actual location of every input and output with the systems that own those controls. + +## Decision checks + +1. Read the [architecture overview](/docs/overview/architecture/) and decide which process owns orchestration and compute. +2. Model inputs explicitly using the [job input-source specification](/docs/specifications/job/input-source/), rather than assuming a URL is local. +3. Use [labels and constraints](/docs/guides/labels-and-constraints/) for placement rules, and test no-match behavior before production. +4. Define result handling with [result paths](/docs/specifications/job/result-path/) and [publishing results](/docs/guides/publishing-results/). + +## Limitations + +Data proximity can reduce unnecessary transfers, but it cannot make an unavailable dataset accessible or turn labels into an enforcement system. Measure transfer volume and execution time in your environment; do not infer either from this comparison. diff --git a/docs/guides/data-locality-and-sovereignty.mdx b/docs/guides/data-locality-and-sovereignty.mdx new file mode 100644 index 0000000..b9972fb --- /dev/null +++ b/docs/guides/data-locality-and-sovereignty.mdx @@ -0,0 +1,60 @@ +--- +title: Data locality, sovereignty, bandwidth, and egress patterns +description: Use explicit job placement and storage design to evaluate data-locality requirements. +--- + +import StructuredData from '@site/src/components/StructuredData' + + + +# Data locality, sovereignty, bandwidth, and egress patterns + +Data locality is a design decision about where inputs are accessed and work runs. Data sovereignty is broader: it concerns legal, contractual, operational, and technical controls around data. Bacalhau can help express compute placement through node labels and job constraints, but it cannot certify compliance or infer the location of a remote source. + +## Choose the pattern that matches the boundary + +| Pattern | Use it when | What to verify | +| --- | --- | --- | +| Site-local processing | A site hosts the data and compute | Node labels, local access path, output location, and offline behavior | +| Region-scoped processing | Data and workers must stay within an approved region | Storage endpoint, DNS and network routes, credentials, and failover region | +| Object-store-adjacent processing | Large objects are reachable from selected workers | Actual byte transfer, IAM scope, result publisher, and cost model | +| Centralized processing | A controlled central copy is acceptable | Ingest policy, egress cost, retention, and recovery objectives | + +## Make placement explicit + +Start a compute node with operator-maintained labels, then require them in the job: + +```bash +bacalhau serve --compute -c Labels="residency=ca,site=toronto" + +bacalhau docker run \ + --constraints "residency=ca" \ + --constraints "site=toronto" \ + --input https://example.org/public-records.csv:/input/records.csv \ + --output locality-results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'sha256sum /input/records.csv > /outputs/checksum.txt' +``` + +The command is intentionally simple: it proves that a constrained job can execute and publish an output. It does not prove that an HTTPS endpoint, container registry, log system, or operator workstation stayed in the same jurisdiction. + +## Controls that belong together + +| Goal | Bacalhau configuration | Complementary control | +| --- | --- | --- | +| Direct work to suitable nodes | Labels and [constraints](/docs/guides/labels-and-constraints/) | Change control for labels and capacity | +| Describe a data path | [Input sources](/docs/specifications/job/input-source/) and [tasks](/docs/specifications/job/task/) | Storage IAM, network policy, and credential rotation | +| Retain artifacts safely | [Result paths](/docs/specifications/job/result-path/) and a publisher | Encryption, retention, and downstream authorization | +| Bound a workload lifecycle | [Job type](/docs/specifications/job/type/) and [timeouts](/docs/specifications/job/timeouts/) | Monitoring, incident response, and business continuity | + +## Limitations and audit evidence + +For each production job, retain the submitted specification, selected node, input and output endpoints, identities used, timing, and transfer measurements. Review these against your jurisdictional and contractual requirements. Bacalhau's [architecture](/docs/overview/architecture/) explains the scheduling components, while your organization remains responsible for the surrounding enforcement and evidence. diff --git a/docs/guides/edge-orchestration-buyers-guide.mdx b/docs/guides/edge-orchestration-buyers-guide.mdx new file mode 100644 index 0000000..d7c531d --- /dev/null +++ b/docs/guides/edge-orchestration-buyers-guide.mdx @@ -0,0 +1,62 @@ +--- +title: Technical buyer's guide to distributed edge orchestration +description: Evaluate edge orchestration by placement control, workload lifecycle, data access, and operability. +--- + +import StructuredData from '@site/src/components/StructuredData' + + + +# Technical buyer's guide to distributed edge orchestration + +An edge orchestrator is useful only when it makes an operating boundary clearer: where code runs, which data it can reach, how it is observed, and what happens when a site is unavailable. Bacalhau is an Apache-2.0 open-source project for orchestrating Docker and WASM workloads across compute nodes; it does not replace your device-management, identity, or storage systems. + +## Evaluation matrix + +| Evaluation area | Questions to ask | Bacalhau evidence to inspect | +| --- | --- | --- | +| Placement | Can a workload target an approved region or capability? | [Labels and constraints](/docs/guides/labels-and-constraints/) and a deliberate no-match test | +| Lifecycle | Is the workload batch, ops, daemon, or service? | [Job type specification](/docs/specifications/job/type/) | +| Inputs and outputs | Are every source and result path explicit? | [Input sources](/docs/specifications/job/input-source/) and [result paths](/docs/specifications/job/result-path/) | +| Runtime | Which images, parameters, resources, and network assumptions apply? | [Task specification](/docs/specifications/job/task/) and [network specification](/docs/specifications/job/network/) | +| Operations | Who sees job state and acts on failures? | `bacalhau job describe`, logs, and your monitoring system | + +## Pilot design + +Begin with two sites that have different data or network conditions. Give nodes factual labels, submit a small workload with explicit constraints, then compare job state and result location. Do not begin by connecting production data. + +```bash +bacalhau serve --compute -c Labels="site=plant-a,accelerator=false" + +bacalhau docker run \ + --constraints "site=plant-a" \ + --input https://example.org/telemetry.csv:/input/telemetry.csv \ + --output pilot-results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'wc -l /input/telemetry.csv > /outputs/rows.txt' +``` + +Record the node identity, job ID, input access method, result path, elapsed time, transfer measurements, and the behavior when the matching node is unavailable. This turns a pilot into reproducible evidence rather than a demo. + +## Selection tradeoffs + +| If you prioritize | Design implication | +| --- | --- | +| Strict site boundaries | Combine constraints with network, storage, and identity enforcement; constraints alone are insufficient | +| Low-touch operations | Favor a small, repeatable node configuration and a narrowly scoped pilot | +| Heterogeneous hardware | Label only verified capabilities and test each runtime image on its target architecture | +| Fast centralized analytics | A data warehouse or SQL engine may be a better primary tool than edge orchestration | + +The [quick start](/docs/getting-started/quick-start/) is a safe local starting point. Move to a multi-site design only after validating the [architecture](/docs/overview/architecture/), job timeouts, resource limits, and recovery expectations. + +## Limitations + +No orchestration tool can establish compliance or availability alone. Verify device patching, physical access, connectivity, secrets, storage policy, and incident response with the owners of those controls. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index f338115..6c89a20 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -19,11 +19,13 @@ const config: Config = { projectName: 'docs', // Usually your repo name. onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'throw', onBrokenAnchors: 'throw', onDuplicateRoutes: 'throw', markdown: { format: 'detect', + hooks: { + onBrokenMarkdownLinks: 'throw', + }, }, i18n: { defaultLocale: 'en', diff --git a/package-lock.json b/package-lock.json index 328b6be..c0f58d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,22 +8,22 @@ "name": "bacalhau-website", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.8.1", - "@docusaurus/plugin-client-redirects": "^3.8.1", - "@docusaurus/plugin-content-docs": "^3.8.1", - "@docusaurus/plugin-google-tag-manager": "^3.8.1", - "@docusaurus/preset-classic": "^3.8.1", + "@docusaurus/core": "^3.10.2", + "@docusaurus/plugin-client-redirects": "^3.10.2", + "@docusaurus/plugin-content-docs": "^3.10.2", + "@docusaurus/plugin-google-tag-manager": "^3.10.2", + "@docusaurus/preset-classic": "^3.10.2", "@mdx-js/react": "^3.1.0", "clsx": "^2.1.1", "lottie-web": "^5.13.0", "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.2.8", + "react-dom": "^19.2.8" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.8.1", - "@docusaurus/tsconfig": "^3.8.1", - "@docusaurus/types": "^3.8.1", + "@docusaurus/module-type-aliases": "^3.10.2", + "@docusaurus/tsconfig": "^3.10.2", + "@docusaurus/types": "^3.10.2", "cspell": "^8.6.0", "typescript": "~5.8.3" }, @@ -31,60 +31,62 @@ "node": ">=18.0" } }, + "node_modules/@11ty/gray-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@11ty/gray-matter/-/gray-matter-1.0.0.tgz", + "integrity": "sha512-7mJJl+wf1AByoT0PknQiQfOPnVNT4fevGrUBVWO4HXsnYn1aQPyRyrELYrNUFleUBM++KzMKN6QaxHPk0t/6/g==", + "license": "MIT", + "dependencies": { + "js-yaml": "^4.1.0", + "kind-of": "^6.0.3", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=11" + } + }, "node_modules/@algolia/abtesting": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.3.0.tgz", - "integrity": "sha512-KqPVLdVNfoJzX5BKNGM9bsW8saHeyax8kmPFXul5gejrSPN3qss7PgsFH5mMem7oR8tvjvNkia97ljEYPYCN8Q==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.22.0.tgz", + "integrity": "sha512-BFR6zNowNKcY7Ou7TaJc9QWexES4YKPbmf/OTFofpdsdhz4x6q0lbxp3duO0EHnyrN7rE4ba/TSXuY+BDGu4+g==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.9.tgz", + "integrity": "sha512-4U2JKLMWlDu0CotYyUkWakDxr8AIav3QtIUXXRpfavYN29aVWfzlwJp9T0rPKEf/dO2QCPAUc0Kq1Tj1GJxo2A==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" + "@algolia/autocomplete-plugin-algolia-insights": "1.19.9", + "@algolia/autocomplete-shared": "1.19.9" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.9.tgz", + "integrity": "sha512-6mExC6X7762s2SV3eJy3QOkB8bdMmnUhQ2agvGVDuzwoGyr3PquGSY/0vPQXCfiAiCaXUz1rXn+lwghgSi0l0w==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" + "@algolia/autocomplete-shared": "1.19.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.9.tgz", + "integrity": "sha512-YosP9Uoek6y/Ur1r1qeogk4biMe/hzkyNcgMCciw0//3XpCM7VlYLSHnyt/vOnEOGhCCc0+3v+unEiH6zz+Z1A==", "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -92,99 +94,99 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.37.0.tgz", - "integrity": "sha512-Dp2Zq+x9qQFnuiQhVe91EeaaPxWBhzwQ6QnznZQnH9C1/ei3dvtmAFfFeaTxM6FzfJXDLvVnaQagTYFTQz3R5g==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.56.0.tgz", + "integrity": "sha512-7r4Z3NC7yU1oAQVWJNA2HX7tX481F3pJvCGyLIXiTdBcthz4Q/o21jwcMYDFkuI92UWTNBQQmHYgwHo1zS5dzg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.37.0.tgz", - "integrity": "sha512-wyXODDOluKogTuZxRII6mtqhAq4+qUR3zIUJEKTiHLe8HMZFxfUEI4NO2qSu04noXZHbv/sRVdQQqzKh12SZuQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.56.0.tgz", + "integrity": "sha512-avmjXQSq+jadFO8Xl2em05/uQdQnEmHsJyOAdVbZkmVgpMfxL12aJwVVfGNwYr9nulcpuJN1X0lTaQ5wxuNGcA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.37.0.tgz", - "integrity": "sha512-GylIFlPvLy9OMgFG8JkonIagv3zF+Dx3H401Uo2KpmfMVBBJiGfAb9oYfXtplpRMZnZPxF5FnkWaI/NpVJMC+g==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.56.0.tgz", + "integrity": "sha512-v2TPStUhY//ripPjIVclZ8AWc7DEGooXULZGFlFu37zNatgHjw34oZZ+OSbbc/YHO+xZwPl62I1k8xH1m4S2eg==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.37.0.tgz", - "integrity": "sha512-T63afO2O69XHKw2+F7mfRoIbmXWGzgpZxgOFAdP3fR4laid7pWBt20P4eJ+Zn23wXS5kC9P2K7Bo3+rVjqnYiw==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.56.0.tgz", + "integrity": "sha512-P0ehROpM4Sem3Sqo5x2cKPgj67D3G3jy0rh1Amwkcvsfr6tkvIcdCmerieanqTF7NxUMPNFLkpIFeMO8Rpa50w==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.37.0.tgz", - "integrity": "sha512-1zOIXM98O9zD8bYDCJiUJRC/qNUydGHK/zRK+WbLXrW1SqLFRXECsKZa5KoG166+o5q5upk96qguOtE8FTXDWQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.56.0.tgz", + "integrity": "sha512-SXK3Vn3WVxyzbm31oePZBJkp1wpOyuWdd4B/Pv7n0aXDxmeSWhC1R1FC1517mMrFAIaPH4Rt0x6RUe7ZNjz8FA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.37.0.tgz", - "integrity": "sha512-31Nr2xOLBCYVal+OMZn1rp1H4lPs1914Tfr3a34wU/nsWJ+TB3vWjfkUUuuYhWoWBEArwuRzt3YNLn0F/KRVkg==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.56.0.tgz", + "integrity": "sha512-5+ZdX8garFnmycnZgKhtXHePEaLj5zqDxI/0lkhhluzCcvTn0/PvvTirTg8hHYetQHvn7GDyeAiqTAieMvMW4A==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.37.0.tgz", - "integrity": "sha512-DAFVUvEg+u7jUs6BZiVz9zdaUebYULPiQ4LM2R4n8Nujzyj7BZzGr2DCd85ip4p/cx7nAZWKM8pLcGtkTRTdsg==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.56.0.tgz", + "integrity": "sha512-+mKUdYvqOi0BcvpAEyCEw49vSBptufIcfibtHz2bdr1pI789M46Yt0uQEk/sxtK3teh71OQvVFHaTDzShUWewQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" @@ -197,93 +199,93 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.37.0.tgz", - "integrity": "sha512-pkCepBRRdcdd7dTLbFddnu886NyyxmhgqiRcHHaDunvX03Ij4WzvouWrQq7B7iYBjkMQrLS8wQqSP0REfA4W8g==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.56.0.tgz", + "integrity": "sha512-9g/zj+AZx5moFcdFIrYQoVrueXivjUcc3MQHtCYT8WhIuk1lUh1AyEhvJCS0XBZld09cLvd1AZ3BvDBpVpX2UA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.37.0.tgz", - "integrity": "sha512-fNw7pVdyZAAQQCJf1cc/ih4fwrRdQSgKwgor4gchsI/Q/ss9inmC6bl/69jvoRSzgZS9BX4elwHKdo0EfTli3w==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.56.0.tgz", + "integrity": "sha512-Qf3Sr6f9A9uxCZUf3MXS0d2b877uYzEB5yxqpVGXAhcJnBCQjrRRon0KvefpGkxy+BshrIJs96OUoMtGqXTFDA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.37.0.tgz", - "integrity": "sha512-U+FL5gzN2ldx3TYfQO5OAta2TBuIdabEdFwD5UVfWPsZE5nvOKkc/6BBqP54Z/adW/34c5ZrvvZhlhNTZujJXQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.56.0.tgz", + "integrity": "sha512-GXWG1rWc5wu8hY4N33Y3b6ernY6sAdAvmKWN/zHAiACOx40WnpG0TVX5YazCAr/9gOYGInSiM2A0y2jy2xbiDA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.37.0.tgz", - "integrity": "sha512-Ao8GZo8WgWFABrU7iq+JAftXV0t+UcOtCDL4mzHHZ+rQeTTf1TZssr4d0vIuoqkVNnKt9iyZ7T4lQff4ydcTrw==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.56.0.tgz", + "integrity": "sha512-7t24cBxaInS3mZb7ddEaZT/tp6q+/aR4YttsQVyP1/i+LmwPR34atO35KjaLFCcRVrlP7sYOAqkCfg6lIRB+ew==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0" + "@algolia/client-common": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.37.0.tgz", - "integrity": "sha512-H7OJOXrFg5dLcGJ22uxx8eiFId0aB9b0UBhoOi4SMSuDBe6vjJJ/LeZyY25zPaSvkXNBN3vAM+ad6M0h6ha3AA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.56.0.tgz", + "integrity": "sha512-R7ePHgVYmDFjZpvrsVAfbDz/d4RxKAYZ5/vgLfIsCVRZRryjWl/3INOxpOICzitehQ5FjNtNjcLQTrmHPTcHBQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0" + "@algolia/client-common": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.37.0.tgz", - "integrity": "sha512-npZ9aeag4SGTx677eqPL3rkSPlQrnzx/8wNrl1P7GpWq9w/eTmRbOq+wKrJ2r78idlY0MMgmY/mld2tq6dc44g==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.56.0.tgz", + "integrity": "sha512-PIOUXlSnrqM0S+WOgDRb4RzotydJH7ZoT6tOyL7tAO7qJOfvX5wsEW8Pe+PMKMwvuI4/gIyK9cg2H7lJXqnc4Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.37.0" + "@algolia/client-common": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -292,29 +294,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -340,13 +342,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -356,25 +358,25 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -393,17 +395,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", - "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.3", + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { @@ -423,13 +425,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -449,65 +451,65 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -517,35 +519,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -555,14 +557,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -572,79 +574,79 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -654,13 +656,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -670,12 +672,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -685,12 +687,28 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "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.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "version": "7.29.7", + "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.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -700,14 +718,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -717,13 +735,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", - "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -757,12 +775,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -772,12 +790,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -787,12 +805,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -802,12 +820,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -833,12 +851,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -848,14 +866,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -865,14 +883,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -882,12 +900,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -897,12 +915,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", - "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -912,13 +930,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -928,13 +946,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", - "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -944,17 +962,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -964,13 +982,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -980,13 +998,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -996,13 +1014,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1012,12 +1030,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1027,13 +1045,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1043,12 +1061,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1058,13 +1076,13 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", - "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1074,12 +1092,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1089,12 +1107,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1104,13 +1122,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1120,14 +1138,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1137,12 +1155,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1152,12 +1170,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1167,12 +1185,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1182,12 +1200,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1197,13 +1215,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1213,13 +1231,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1229,15 +1247,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.8" }, "engines": { "node": ">=6.9.0" @@ -1247,13 +1265,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1263,13 +1281,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1279,12 +1297,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1294,12 +1312,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1309,12 +1327,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1324,16 +1342,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", - "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1343,13 +1361,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1359,12 +1377,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1374,13 +1392,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1390,12 +1408,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1405,13 +1423,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1421,14 +1439,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1438,12 +1456,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1453,12 +1471,12 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.29.7.tgz", + "integrity": "sha512-J0wGhKan+rIiE2OhfhRptySLrJ6SjQYM6b6N1FMlhyhCcw1Mig8vQjWchyB+bgHGDvaWo6Diu6CLRMra2uMtmg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1468,12 +1486,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz", + "integrity": "sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1483,16 +1501,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", + "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1502,12 +1520,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", + "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" + "@babel/plugin-transform-react-jsx": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1517,13 +1535,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz", + "integrity": "sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1533,12 +1551,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", - "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1548,13 +1566,13 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1564,12 +1582,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1579,13 +1597,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", - "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.7.tgz", + "integrity": "sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1608,12 +1626,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1623,13 +1641,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1639,12 +1657,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1654,12 +1672,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1669,12 +1687,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1684,16 +1702,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", - "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz", + "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-syntax-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1703,12 +1721,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1718,13 +1736,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1734,13 +1752,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1750,13 +1768,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1766,80 +1784,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", - "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.3", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-dotall-regex": "^7.27.1", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.3", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1849,6 +1868,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1873,17 +1905,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", - "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.29.7.tgz", + "integrity": "sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.27.1", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-transform-react-display-name": "^7.29.7", + "@babel/plugin-transform-react-jsx": "^7.29.7", + "@babel/plugin-transform-react-jsx-development": "^7.29.7", + "@babel/plugin-transform-react-pure-annotations": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1893,16 +1925,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz", + "integrity": "sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1918,44 +1950,32 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", - "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.43.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -1963,13 +1983,13 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -2662,9 +2682,9 @@ } }, "node_modules/@csstools/postcss-alpha-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.0.tgz", - "integrity": "sha512-r2L8KNg5Wriq5n8IUQcjzy2Rh37J5YjzP9iOyHZL5fxdWYHB08vqykHQa4wAzN/tXwDuCHnhQDGCtxfS76xn7g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", + "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", "funding": [ { "type": "github", @@ -2680,7 +2700,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2739,9 +2759,9 @@ } }, "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2752,9 +2772,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.11.tgz", - "integrity": "sha512-AtH22zLHTLm64HLdpv5EedT/zmYTm1MtdQbQhRZXxEB6iYtS6SrS1jLX3TcmUWMFzpumK/OVylCm3HcLms4slw==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", + "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", "funding": [ { "type": "github", @@ -2770,7 +2790,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2781,9 +2801,9 @@ } }, "node_modules/@csstools/postcss-color-function-display-p3-linear": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.0.tgz", - "integrity": "sha512-7q+OuUqfowRrP84m/Jl0wv3pfCQyUTCW5MxDIux+/yty5IkUUHOTigCjrC0Fjy3OT0ncGLudHbfLWmP7E1arNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", + "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", "funding": [ { "type": "github", @@ -2799,7 +2819,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2810,9 +2830,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.11.tgz", - "integrity": "sha512-cQpXBelpTx0YhScZM5Ve0jDCA4RzwFc7oNafzZOGgCHt/GQVYiU8Vevz9QJcwy/W0Pyi/BneY+KMjz23lI9r+Q==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", + "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", "funding": [ { "type": "github", @@ -2828,7 +2848,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2839,9 +2859,9 @@ } }, "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.1.tgz", - "integrity": "sha512-c7hyBtbF+jlHIcUGVdWY06bHICgguV9ypfcELU3eU3W/9fiz2dxM8PqxQk2ndXYTzLnwPvNNqu1yCmQ++N6Dcg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", + "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", "funding": [ { "type": "github", @@ -2857,7 +2877,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2868,9 +2888,37 @@ } }, "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.7.tgz", - "integrity": "sha512-cq/zWaEkpcg3RttJ5+GdNwk26NwxY5KgqgtNL777Fdd28AVGHxuBvqmK4Jq4oKhW1NX4M2LbgYAVVN0NZ+/XYQ==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", + "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-contrast-color-function": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", + "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", "funding": [ { "type": "github", @@ -2883,9 +2931,10 @@ ], "license": "MIT-0", "dependencies": { + "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2976,9 +3025,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.11.tgz", - "integrity": "sha512-8M3mcNTL3cGIJXDnvrJ2oWEcKi3zyw7NeYheFKePUlBmLYm1gkw9Rr/BA7lFONrOPeQA3yeMPldrrws6lqHrug==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", + "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", "funding": [ { "type": "github", @@ -2994,7 +3043,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -3005,9 +3054,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.11.tgz", - "integrity": "sha512-9meZbsVWTZkWsSBazQips3cHUOT29a/UAwFz0AMEXukvpIGGDR9+GMl3nIckWO5sPImsadu4F5Zy+zjt8QgCdA==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", + "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", "funding": [ { "type": "github", @@ -3023,7 +3072,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -3034,9 +3083,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.3.tgz", - "integrity": "sha512-RtYYm2qUIu9vAaHB0cC8rQGlOCQAUgEc2tMr7ewlGXYipBQKjoWmyVArqsk7SEr8N3tErq6P6UOJT3amaVof5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", + "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", "funding": [ { "type": "github", @@ -3049,7 +3098,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -3131,9 +3180,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3144,9 +3193,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.10.tgz", - "integrity": "sha512-g7Lwb294lSoNnyrwcqoooh9fTAp47rRNo+ILg7SLRSMU3K9ePIwRt566sNx+pehiCelv4E1ICaU1EwLQuyF2qw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", + "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", "funding": [ { "type": "github", @@ -3161,7 +3210,7 @@ "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -3370,9 +3419,9 @@ } }, "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA==", "funding": [ { "type": "github", @@ -3395,9 +3444,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.11.tgz", - "integrity": "sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", + "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", "funding": [ { "type": "github", @@ -3413,7 +3462,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -3423,10 +3472,32 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-position-area-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz", + "integrity": "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.0.tgz", - "integrity": "sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", + "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", "funding": [ { "type": "github", @@ -3448,6 +3519,32 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-property-rule-prelude-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz", + "integrity": "sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-random-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", @@ -3476,9 +3573,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.11.tgz", - "integrity": "sha512-oQ5fZvkcBrWR+k6arHXk0F8FlkmD4IxM+rcGDLWrF2f31tWyEM3lSraeWAV0f7BGH6LIrqmyU3+Qo/1acfoJng==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", + "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", "funding": [ { "type": "github", @@ -3494,7 +3591,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -3530,9 +3627,9 @@ } }, "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3596,6 +3693,57 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-syntax-descriptor-syntax-production": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz", + "integrity": "sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-system-ui-font-family": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz", + "integrity": "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-text-decoration-shorthand": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", @@ -3702,22 +3850,43 @@ "node": ">=10.0.0" } }, - "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", + "node_modules/@docsearch/core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.7.0.tgz", + "integrity": "sha512-p/9xVKmPDj3FPvMfPf5naVO3Ej8SCbcUugGvx1+8GgkuBNbqxqN2Irx3WLBv8VY0jH7XpRwKWdlmjXLZsmTLsg==", + "license": "MIT", + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@docsearch/css": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.7.0.tgz", + "integrity": "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.7.0.tgz", + "integrity": "sha512-x6oedjJ8O8/pIDBsMo5Orca3/6cQCz616/CwthVe68l43mqnj2lrJ9kFQITBqy8hMsS3nWeBWFoVO5dJ1DCFKA==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" + "@algolia/autocomplete-core": "1.19.2", + "@docsearch/core": "4.7.0", + "@docsearch/css": "4.7.0" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3740,10 +3909,42 @@ } } }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", + "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", + "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", + "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, "node_modules/@docusaurus/babel": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz", - "integrity": "sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.2.tgz", + "integrity": "sha512-aJ1hpGyvfkte3dDAfNbWM4biW4yWZBVz7TIGLZP+v+tWOBgxX3e0N5ZIXHIvmfNNXTI77pcHUx3KmtOk05Ze3Q==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -3754,30 +3955,29 @@ "@babel/preset-react": "^7.25.9", "@babel/preset-typescript": "^7.25.9", "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/bundler": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz", - "integrity": "sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.2.tgz", + "integrity": "sha512-i0ZNcy0f0WhaOlYVgzLsWhIoEXO9kS3HRoKPtgE6vQtZUq7arKZaYdNBudr3mqCmd+TyOkwtwfHgs1ENj07r5g==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.8.1", - "@docusaurus/cssnano-preset": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", + "@docusaurus/babel": "3.10.2", + "@docusaurus/cssnano-preset": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", "babel-loader": "^9.2.1", "clean-css": "^5.3.3", "copy-webpack-plugin": "^11.0.0", @@ -3795,10 +3995,10 @@ "tslib": "^2.6.0", "url-loader": "^4.1.1", "webpack": "^5.95.0", - "webpackbar": "^6.0.1" + "webpackbar": "^7.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/faster": "*" @@ -3810,18 +4010,18 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz", - "integrity": "sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.8.1", - "@docusaurus/bundler": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.2.tgz", + "integrity": "sha512-EYByj6nk+aD9KeVxV6Hmo2/nAAT79P21Y82ycTBOBtrmqilloIbIEhgL2/8Xpt2Jz/pgNqHAwyusOGwmbKeJmA==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.10.2", + "@docusaurus/bundler": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3829,11 +4029,11 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", - "detect-port": "^1.5.1", + "detect-port": "^2.1.0", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", - "execa": "5.1.1", + "execa": "^5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", @@ -3844,36 +4044,42 @@ "prompts": "^2.4.2", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-loadable-ssr-addon-v5-slorber": "^1.0.3", "react-router": "^5.3.4", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.4", "semver": "^7.5.4", - "serve-handler": "^6.1.6", + "serve-handler": "^6.1.7", "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", + "webpack-dev-server": "^5.2.2", "webpack-merge": "^6.0.1" }, "bin": { "docusaurus": "bin/docusaurus.mjs" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { + "@docusaurus/faster": "*", "@mdx-js/react": "^3.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz", - "integrity": "sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.2.tgz", + "integrity": "sha512-4gCnHRbJLTloiwfvFAa92tgb2gI4KYhvjfQVYnEaiMO/EgvWfCo1LwytHXen+1oZAN0VAlS0JAPxp3MsvKDa3A==", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", @@ -3882,31 +4088,31 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/logger": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz", - "integrity": "sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.2.tgz", + "integrity": "sha512-gSEwqtPfCAnC3ZSJY6xL7tcIfgg0vFD39jbv93eakuweyvO2864xR0K+kmKwBhkTCtWRNjuGGnb5rdmkD/ndqw==", "license": "MIT", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz", - "integrity": "sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.2.tgz", + "integrity": "sha512-9Fd4V/SFjfrVQ0JH5EN0+iPWyFunvTeQE3gfyFeetqPaXMP0OylIjOw16dCuXG4NZJrYdBqwzjh18/h3gRi47w==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -3930,7 +4136,7 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3938,12 +4144,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz", - "integrity": "sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.2.tgz", + "integrity": "sha512-h/I5e4jaAhDHW4vaLENi1i2hnOEnXY1t9R+nnRTbgUl7ymVRzN/HF7dDfj8rKYGj8gfIge+Ef+iYRAMtbGvsrQ==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.8.1", + "@docusaurus/types": "3.10.2", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3957,23 +4163,23 @@ } }, "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.1.tgz", - "integrity": "sha512-F+86R7PBn6VNgy/Ux8w3ZRypJGJEzksbejQKlbTC8u6uhBUhfdXWkDp6qdOisIoW0buY5nLqucvZt1zNJzhJhA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.10.2.tgz", + "integrity": "sha512-z5I5ttCXw+8y2gHVZvqAMmUw4Rb0ZzKA5eCPk87SfM/jCKOTvE24yDpPAwwipvug96ij7mOwEHXWw8G4LlWdGA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "eta": "^2.2.0", "fs-extra": "^11.1.1", "lodash": "^4.17.21", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3981,20 +4187,21 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz", - "integrity": "sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.2.tgz", + "integrity": "sha512-0cbEnNKf0InmLkhj/+nVRmqEnWEoOE8Mh+2x1qOXI0qYpCnphq4RXknVJ8BvybKRXqYVvbmdMfiJSup+k4tm5w==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "cheerio": "1.0.0-rc.12", + "combine-promises": "^1.1.0", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", @@ -4006,7 +4213,7 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", @@ -4015,20 +4222,20 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz", - "integrity": "sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.2.tgz", + "integrity": "sha512-Sqwl4FPoZBDrlY8I2VU2H8O0M91CHp9T8ToMSkTZmjvHCif+1laqfXi6sTk8IfyVS/trN5yNjcWd1bFsGB6W5Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -4040,7 +4247,7 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4048,22 +4255,22 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz", - "integrity": "sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.2.tgz", + "integrity": "sha512-h5R12sZ/vV9EPiVjvIl9YFCOwkpwXes7dQMYt3EvP6Pphu4amHxxTqWxf08Fl5DR8h+oZMbWpFTNw5vKEYfvzQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4071,36 +4278,36 @@ } }, "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz", - "integrity": "sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.2.tgz", + "integrity": "sha512-UkdvQby5OQUKWrw3lLnSTJXQ6VETaUVTuPQX9AABtmFm5h+ifEBx1OQ+LN726Q4byuwBf2ElHkf4qU4hTxdvRg==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz", - "integrity": "sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.2.tgz", + "integrity": "sha512-8vbZNOSCpnsT57EY6CgN7sgRVmx3KTYwO8Uvo2pbxOyb8tbqAwtT9SslqaQ41HbA1v1hpn5RP7u5s2KvRwAFpQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", "fs-extra": "^11.1.1", "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4108,18 +4315,18 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz", - "integrity": "sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.2.tgz", + "integrity": "sha512-kMHMBK9j4VAtgd5owwrRLRIi0EjkrpXlX7ePj1+y68XfVZV9I1T4S+koPDm+Hfw2TtnyHvh0uNrDvjz+DjQGVA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4127,19 +4334,18 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz", - "integrity": "sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.2.tgz", + "integrity": "sha512-Vt90nNFhtAChRe9+it1hcHFgFvETdSnOkL5Bma+p6E/yU2tAYrvvyk+gv+LJGM2ZUkyKuKXLRsZ2Lb0bO7+Vog==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@types/gtag.js": "^0.0.12", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4147,18 +4353,18 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz", - "integrity": "sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.2.tgz", + "integrity": "sha512-MLCffCldysi/R0nzJQP7ZWd0xAoGNnSTiVOo6TTR6mKVGFhE+/XArGe67ZcaZv1uytgQXoXs92VJrgVDrz80rQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4166,23 +4372,23 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz", - "integrity": "sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.2.tgz", + "integrity": "sha512-PODkwg5XetLML3hU/3xpCKJUZ9cqExLaBnD/Fzzwj2VHogLeqnDisLIujae87zuze7T4mCm2A6KEqZkyiz07EQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4190,22 +4396,22 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz", - "integrity": "sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.2.tgz", + "integrity": "sha512-JgfT3jWM0TJ8Uw0cEcqxHpybngQY1vlBYpuuNO+gEh5iPh5Ar+vxq/u9CFrYsWeXy48BN7Db76Pzp2edNXUQ8A==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4213,29 +4419,29 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz", - "integrity": "sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/plugin-content-blog": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/plugin-content-pages": "3.8.1", - "@docusaurus/plugin-css-cascade-layers": "3.8.1", - "@docusaurus/plugin-debug": "3.8.1", - "@docusaurus/plugin-google-analytics": "3.8.1", - "@docusaurus/plugin-google-gtag": "3.8.1", - "@docusaurus/plugin-google-tag-manager": "3.8.1", - "@docusaurus/plugin-sitemap": "3.8.1", - "@docusaurus/plugin-svgr": "3.8.1", - "@docusaurus/theme-classic": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-search-algolia": "3.8.1", - "@docusaurus/types": "3.8.1" + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.2.tgz", + "integrity": "sha512-a4B3VczmDl99zK0EufDQYomdJ186WDingjmDXxhN2PNPS9Ty/Y2M5CLFX1KQMRKqRTLiRDKfutzG5IY1FC/ceg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/plugin-content-blog": "3.10.2", + "@docusaurus/plugin-content-docs": "3.10.2", + "@docusaurus/plugin-content-pages": "3.10.2", + "@docusaurus/plugin-css-cascade-layers": "3.10.2", + "@docusaurus/plugin-debug": "3.10.2", + "@docusaurus/plugin-google-analytics": "3.10.2", + "@docusaurus/plugin-google-gtag": "3.10.2", + "@docusaurus/plugin-google-tag-manager": "3.10.2", + "@docusaurus/plugin-sitemap": "3.10.2", + "@docusaurus/plugin-svgr": "3.10.2", + "@docusaurus/theme-classic": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/theme-search-algolia": "3.10.2", + "@docusaurus/types": "3.10.2" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4243,24 +4449,24 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz", - "integrity": "sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/plugin-content-blog": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/plugin-content-pages": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-translations": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.2.tgz", + "integrity": "sha512-JqTSLQmqmA9uKWZsD5iwBGJ4JyKB4/yTw6PsSXVPRJG/6GAm/u+add9Iip+hvwP12/AnPNztrdxsI14NJW4KeA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/plugin-content-blog": "3.10.2", + "@docusaurus/plugin-content-docs": "3.10.2", + "@docusaurus/plugin-content-pages": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/theme-translations": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -4276,7 +4482,7 @@ "utility-types": "^3.10.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4284,15 +4490,15 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz", - "integrity": "sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.2.tgz", + "integrity": "sha512-R9b/vMpK1yye6hNZTA6x/ivRv+at6GhxnXcxkpzCGzO1R1RwiquqiFg2wMFh6aqlJTpWRFKpFD2TzCDQcyOU0A==", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -4303,7 +4509,7 @@ "utility-types": "^3.10.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", @@ -4312,21 +4518,22 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz", - "integrity": "sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.9.0", - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-translations": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.2.tgz", + "integrity": "sha512-1msxllyhi/5m77JukXtp5UFnUAriwZIC1oJ7MTnpQpCwLTbclJi5BK5n28CTZuSXpQN2ewbbnqRgAhMM6c6ihg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "^1.19.2", + "@docsearch/react": "^3.9.0 || ^4.3.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/plugin-content-docs": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/theme-translations": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", + "algoliasearch": "^5.37.0", + "algoliasearch-helper": "^3.26.0", "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", @@ -4335,7 +4542,7 @@ "utility-types": "^3.10.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -4343,33 +4550,34 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz", - "integrity": "sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.10.2.tgz", + "integrity": "sha512-iv20wrxnyXkY89LM3TzRlzGlt5fIGO5UnaR6UL1ZVfB9RRFjxQFQ6awDrwAc6Km8Y5gD8pInuwYPF+6/TiCxXA==", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.8.1.tgz", - "integrity": "sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.2.tgz", + "integrity": "sha512-5GiB7h/nFsMFPO9mCqcRNE1yA5TSXXNCshNIgHPL6fCPOjcTDixs6qjQBu8ddkgPcicwCvOA7n3jeK2rGdJk6g==", "dev": true, "license": "MIT" }, "node_modules/@docusaurus/types": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", - "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", "@types/react": "*", "commander": "^5.1.0", "joi": "^17.9.2", @@ -4398,21 +4606,21 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz", - "integrity": "sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.2.tgz", + "integrity": "sha512-xx0W3eav2uW1NRIpuHJWNwLTC15xPNjU4Uxi9NSnd3swYC96BE3vFiT93SD8s24kmAAWNwgZwfZ2fghGZ01Lcw==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-common": "3.8.1", + "@11ty/gray-matter": "^1.0.0", + "@docusaurus/logger": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-common": "3.10.2", "escape-string-regexp": "^4.0.0", - "execa": "5.1.1", + "execa": "^5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", "globby": "^11.1.0", - "gray-matter": "^4.0.3", "jiti": "^1.20.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", @@ -4426,31 +4634,31 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/utils-common": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz", - "integrity": "sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.2.tgz", + "integrity": "sha512-x3Dz6jv6iQKBNjBmVTu8p57abMp/VNTUgKBMgRVXJc5444orBTsArv0+cdfrXTiz/VMmHfDRVkPbL7GH2B7T7w==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.8.1", + "@docusaurus/types": "3.10.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz", - "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.2.tgz", + "integrity": "sha512-sn8unbDfUL585NtR3cwHefPicOyaHvPaX7VD0aOg/siIxUBoKyKKaGEqzJZDS64mM43TnxurkYDtmB1wsJlZsw==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -4458,7 +4666,7 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@hapi/hoek": { @@ -4560,6 +4768,416 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.67.0.tgz", + "integrity": "sha512-+QOYAGujzm86pKcX4N0JQ1YcLEjypr/I+wmQRxwI8W7K0QXKSi8vQVC2oKQGjcfbHq02JvCQijypfvyhcTz7uw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.67.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.67.0.tgz", + "integrity": "sha512-2jCnH5ofKXb+6vcl8dQArO1Gb4FT7vLbMGVnNim0ekXkY78DPVXZvJ8DQp9WLbqP/G/gxiPVz/DOMoOCD4BqqQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.67.0", + "@jsonjoy.com/fs-node-builtins": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.67.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.67.0.tgz", + "integrity": "sha512-EZ/mSrxRYphDbyll1VuDW0mvj/USoe2M5sxT2nYqyYyvdxsIsijhJOiygBHAaj86Eqd/Kb9ukkwXjBisRTk1tg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.67.0", + "@jsonjoy.com/fs-node-builtins": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/fs-print": "4.67.0", + "@jsonjoy.com/fs-snapshot": "4.67.0", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.67.0.tgz", + "integrity": "sha512-os7Cft1EudH0xZs5Kh5/qHI72jk8DMQ1561elyHkHd9c9xaa4wOfK1iMh4JB9y+kXtpXjEnT4cjHqqc7A3X3lA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.67.0.tgz", + "integrity": "sha512-5e6WTnLhw0Q5mPEACOsA7h2BA++N1FCSmhXRX5gone8Le4fsqcpgpukqW5hWneLfzIr5AOEliu0PyokdYx3Bwg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.67.0", + "@jsonjoy.com/fs-node-builtins": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.67.0.tgz", + "integrity": "sha512-ZcCPh4jvUqYxAgu4lLe+6eQbijxEkZIrCq0Jhh669o3v3zrCn8N4YAFod3zllZtSHhwb+YbER29LUW/SdNrP7Q==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.67.0", + "glob-to-regex.js": "^1.0.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.67.0.tgz", + "integrity": "sha512-xBhay3ayVlFeScafZy+7jyH0+I6MLomaL+2nn/KWirgjwh58w8+u44j7oSvE8EQ2NLF63B1eVc65awmbs/39Iw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.67.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.67.0.tgz", + "integrity": "sha512-wn5c6Qx0iVX1dV74l5WOCIPH9lz3xU6A0QG45n0c53athmmr7Z+XTg0YOndME88g/5LjcqwiSSYD9aSr9+goYg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", @@ -4620,6 +5238,18 @@ "react": ">=16" } }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4655,6 +5285,163 @@ "node": ">= 8" } }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz", + "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-x509-attr": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz", + "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz", + "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz", + "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.8.0", + "@peculiar/asn1-pkcs8": "^2.8.0", + "@peculiar/asn1-rsa": "^2.8.0", + "@peculiar/asn1-schema": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz", + "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz", + "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.8.0", + "@peculiar/asn1-pfx": "^2.8.0", + "@peculiar/asn1-pkcs8": "^2.8.0", + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-x509-attr": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz", + "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", + "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", + "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", + "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -4724,9 +5511,9 @@ "license": "BSD-3-Clause" }, "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==", + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -5021,17 +5808,10 @@ "node": ">=14.16" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@types/body-parser": { - "version": "1.19.5", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "license": "MIT", "dependencies": { "@types/connect": "*", @@ -5067,36 +5847,18 @@ } }, "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "license": "MIT", "dependencies": { "@types/ms": "*" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.7", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -5109,31 +5871,21 @@ } }, "node_modules/@types/express": { - "version": "4.17.21", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.9", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", + "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -5142,16 +5894,10 @@ "@types/send": "*" } }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -5176,13 +5922,15 @@ "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.4", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5252,15 +6000,6 @@ "undici-types": "~6.21.0" } }, - "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==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/prismjs": { "version": "1.26.5", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", @@ -5268,7 +6007,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.18", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -5317,9 +6058,9 @@ } }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "license": "MIT" }, "node_modules/@types/sax": { @@ -5332,10 +6073,11 @@ } }, "node_modules/@types/send": { - "version": "0.17.4", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -5349,12 +6091,24 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.7", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sockjs": { @@ -5382,9 +6136,9 @@ } }, "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==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -5397,9 +6151,9 @@ "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", "license": "ISC" }, "node_modules/@webassemblyjs/ast": { @@ -5604,7 +6358,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5635,12 +6391,12 @@ } }, "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-2.0.3.tgz", + "integrity": "sha512-XNAb/a6TCqou+TufU8/u11HCu9x1gYvOoxLwtlXgIqmkrYQADVv6ljyW2zwiPhHz9R1gItAWpuDrdJMmrOBFEA==", "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 16.0.0" } }, "node_modules/aggregate-error": { @@ -5657,9 +6413,9 @@ } }, "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==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -5702,34 +6458,34 @@ } }, "node_modules/algoliasearch": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.37.0.tgz", - "integrity": "sha512-y7gau/ZOQDqoInTQp0IwTOjkrHc4Aq4R8JgpmCleFwiLl+PbN2DMWoDUWZnrK8AhNJwT++dn28Bt4NZYNLAmuA==", - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.3.0", - "@algolia/client-abtesting": "5.37.0", - "@algolia/client-analytics": "5.37.0", - "@algolia/client-common": "5.37.0", - "@algolia/client-insights": "5.37.0", - "@algolia/client-personalization": "5.37.0", - "@algolia/client-query-suggestions": "5.37.0", - "@algolia/client-search": "5.37.0", - "@algolia/ingestion": "1.37.0", - "@algolia/monitoring": "1.37.0", - "@algolia/recommend": "5.37.0", - "@algolia/requester-browser-xhr": "5.37.0", - "@algolia/requester-fetch": "5.37.0", - "@algolia/requester-node-http": "5.37.0" + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.56.0.tgz", + "integrity": "sha512-PrqppUmhT4ENdas2pH9caE7efUcxy6EcSFhWzosiVuQBzu2tQ5yLTI6jwomT/1cuBnivzGfxiJCqDNN9FRRh+Q==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.22.0", + "@algolia/client-abtesting": "5.56.0", + "@algolia/client-analytics": "5.56.0", + "@algolia/client-common": "5.56.0", + "@algolia/client-insights": "5.56.0", + "@algolia/client-personalization": "5.56.0", + "@algolia/client-query-suggestions": "5.56.0", + "@algolia/client-search": "5.56.0", + "@algolia/ingestion": "1.56.0", + "@algolia/monitoring": "1.56.0", + "@algolia/recommend": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz", - "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==", + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.2.tgz", + "integrity": "sha512-SaV+rZM3drExb0punEYYjT+sNcH74YFwN8ocjya7IDOyQvKWeQpEaSMVG3+IGTVos+feuatj7ljQ4BXlXdUp3w==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -5763,35 +6519,8 @@ "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, - "engines": { - "node": ">=8" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/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==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, "node_modules/ansi-html-community": { @@ -5830,6 +6559,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -5876,6 +6614,20 @@ "node": ">=8" } }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/astring": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", @@ -5886,9 +6638,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", + "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", "funding": [ { "type": "opencollective", @@ -5905,10 +6657,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.6", + "caniuse-lite": "^1.0.30001806", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -5949,13 +6700,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { @@ -5985,12 +6736,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6013,12 +6764,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", - "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "version": "2.11.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz", + "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/batch": { @@ -6049,23 +6803,23 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", + "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -6097,9 +6851,9 @@ "license": "MIT" }, "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.4.tgz", + "integrity": "sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6135,7 +6889,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -6155,9 +6911,9 @@ } }, "node_modules/browserslist": { - "version": "4.26.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", - "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "version": "4.28.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", "funding": [ { "type": "opencollective", @@ -6174,11 +6930,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.3", - "caniuse-lite": "^1.0.30001741", - "electron-to-chromium": "^1.5.218", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -6193,6 +6949,21 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -6202,6 +6973,15 @@ "node": ">= 0.8" } }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -6230,14 +7010,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -6320,9 +7100,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001743", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", - "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", "funding": [ { "type": "opencollective", @@ -6776,16 +7556,16 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -6895,24 +7675,24 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, "node_modules/copy-text-to-clipboard": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.1.tgz", - "integrity": "sha512-3am6cw+WOicd0+HyzhC4kYS02wHJUiVQXmAADxfUARKsHBkWl1Vl3QQEiILlSs8YcPS/C0+y/urCNEYQk+byWA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz", + "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==", "license": "MIT", "engines": { "node": ">=12" @@ -6998,29 +7778,18 @@ } }, "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "license": "MIT", "dependencies": { - "browserslist": "^4.25.3" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-pure": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz", - "integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==", - "hasInstallScript": true, - "license": "MIT", - "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", @@ -7143,18 +7912,6 @@ "node": ">=18" } }, - "node_modules/cspell-config-lib/node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/cspell-dictionary": { "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", @@ -7201,10 +7958,11 @@ } }, "node_modules/cspell-glob/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7346,9 +8104,9 @@ } }, "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -7359,9 +8117,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", - "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", + "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" @@ -7420,9 +8178,9 @@ } }, "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -7575,9 +8333,9 @@ } }, "node_modules/cssdb": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.4.0.tgz", - "integrity": "sha512-lyATYGyvXwQ8h55WeQeEHXhI+47rl52pXSYkFK/ZrCbAJSgVIaPFjYc3RM8TpRHKk7W3wsAZImmLps+P5VyN9g==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz", + "integrity": "sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw==", "funding": [ { "type": "opencollective", @@ -7762,9 +8520,9 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -7819,16 +8577,32 @@ "node": ">=0.10.0" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { @@ -7918,20 +8692,19 @@ "license": "MIT" }, "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-2.1.0.tgz", + "integrity": "sha512-epZuWb/6Q62L+nDHJc/hQAqf8pylsqgk3BpZXVBx1CDnr3nkrVNn73Uu1rXcFzkNcc+hkP3whuOg7JZYaQB65Q==", "license": "MIT", "dependencies": { - "address": "^1.0.1", - "debug": "4" + "address": "^2.0.1" }, "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "detect": "dist/commonjs/bin/detect-port.js", + "detect-port": "dist/commonjs/bin/detect-port.js" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 16.0.0" } }, "node_modules/devlop": { @@ -8102,9 +8875,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.222", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz", - "integrity": "sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==", + "version": "1.5.401", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.401.tgz", + "integrity": "sha512-H6ViHN68nGYlChEvlIU67fn8O2/tpbWQPwck98yaJmh+08LSvHiydzDQ6oXNccLU3kNRVIRS9A4mA7CG+i6fLQ==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -8148,11 +8921,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.1", + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -8210,15 +8985,15 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -8315,6 +9090,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -8423,9 +9199,9 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz", - "integrity": "sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", + "integrity": "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -8538,39 +9314,39 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.15.1", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -8611,9 +9387,9 @@ "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", "license": "MIT" }, "node_modules/express/node_modules/range-parser": { @@ -8681,9 +9457,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", "funding": [ { "type": "github", @@ -8697,9 +9473,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -8742,30 +9518,6 @@ "node": ">=0.4.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/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==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", @@ -8799,9 +9551,9 @@ } }, "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -8860,17 +9612,17 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -8947,15 +9699,16 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -8999,15 +9752,15 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -9034,17 +9787,19 @@ "node": ">=14.14" } }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "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==", - "license": "ISC" + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.2", @@ -9134,26 +9889,6 @@ "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", "license": "ISC" }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "license": "ISC", - "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/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -9166,11 +9901,21 @@ "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, "node_modules/global-directory": { "version": "4.0.1", @@ -9295,43 +10040,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/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==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -9408,9 +10116,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -9533,15 +10241,15 @@ } }, "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", - "property-information": "^6.0.0", + "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" @@ -9551,16 +10259,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-whitespace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", @@ -9671,22 +10369,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -9837,19 +10519,23 @@ "license": "MIT" }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { @@ -9873,9 +10559,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz", + "integrity": "sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==", "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", @@ -9930,6 +10616,15 @@ "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10037,16 +10732,6 @@ "node": ">=12" } }, - "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==", - "license": "ISC", - "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", @@ -10060,9 +10745,9 @@ "license": "ISC" }, "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", "license": "MIT" }, "node_modules/invariant": { @@ -10075,9 +10760,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz", + "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==", "license": "MIT", "engines": { "node": ">= 10" @@ -10138,12 +10823,12 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -10226,6 +10911,39 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -10236,7 +10954,19 @@ "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", + "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", + "license": "MIT", + "engines": { + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10431,9 +11161,9 @@ } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "17.13.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.4.tgz", + "integrity": "sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -10450,9 +11180,19 @@ "license": "MIT" }, "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==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -10558,13 +11298,13 @@ } }, "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.4" } }, "node_modules/leven": { @@ -10594,15 +11334,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -10633,9 +11364,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lodash.debounce": { @@ -10795,9 +11526,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11093,9 +11824,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -11163,13 +11894,29 @@ } }, "node_modules/memfs": { - "version": "3.5.3", - "license": "Unlicense", + "version": "4.67.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.67.0.tgz", + "integrity": "sha512-yuwPWDAs2kfwpQFuFNQI2OkiJ4ZqkGvSFq2jbgC9pFPfgh1N1lPxJaBj5rHp9R1wfJlSzUQkFnSw6WYGPwBbRg==", + "license": "Apache-2.0", "dependencies": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/fs-core": "4.67.0", + "@jsonjoy.com/fs-fsa": "4.67.0", + "@jsonjoy.com/fs-node": "4.67.0", + "@jsonjoy.com/fs-node-builtins": "4.67.0", + "@jsonjoy.com/fs-node-to-fsa": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/fs-print": "4.67.0", + "@jsonjoy.com/fs-snapshot": "4.67.0", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/merge-descriptors": { @@ -13057,9 +13804,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", - "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz", + "integrity": "sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==", "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", @@ -13083,9 +13830,9 @@ "license": "ISC" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -13103,6 +13850,95 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimizer-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/minimizer-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/minimizer-webpack-plugin/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -13132,9 +13968,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", + "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", "funding": [ { "type": "github", @@ -13189,21 +14025,15 @@ "node": ">=18" } }, - "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==", - "license": "(BSD-3-Clause OR GPL-2.0)", + "node_modules/node-releases": { + "version": "2.0.52", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.52.tgz", + "integrity": "sha512-MRlTqhAfoMx/4mhEbPo3Hi02g9LJZaJkka69V6h67Cb1gjrAG0jsTE4CZX1eptNx+VCAwJmfpnDIF4P0Nh1A7A==", + "license": "MIT", "engines": { - "node": ">= 6.13.0" + "node": ">=18" } }, - "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", - "license": "MIT" - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -13213,15 +14043,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "8.0.1", "license": "MIT", @@ -13283,9 +14104,9 @@ } }, "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -13400,23 +14221,14 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "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==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -13538,16 +14350,20 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-timeout": { @@ -13716,15 +14532,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", @@ -13771,9 +14578,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -13797,10 +14604,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "funding": [ { "type": "opencollective", @@ -13817,7 +14641,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -13851,9 +14675,9 @@ } }, "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -13895,9 +14719,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.11.tgz", - "integrity": "sha512-zfqoUSaHMko/k2PA9xnaydVTHqYv5vphq5Q2AHcG/dCdv/OkHYWcVWfVTBKZ526uzT8L7NghuvSw3C9PxlKnLg==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", + "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", "funding": [ { "type": "github", @@ -13913,7 +14737,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -14095,9 +14919,9 @@ } }, "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14133,9 +14957,9 @@ } }, "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14209,9 +15033,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.3.tgz", - "integrity": "sha512-Dl0Z9sdbMwrPslgOaGBZRGo3TASmmgTcqcUODr82MTYyJk6devXZM6MlQjpQKMJqlLJ6oL1w78U7IXFdPA5+ug==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", + "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", "funding": [ { "type": "github", @@ -14224,7 +15048,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -14261,9 +15085,9 @@ } }, "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14299,9 +15123,9 @@ } }, "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14369,9 +15193,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.11.tgz", - "integrity": "sha512-BEA4jId8uQe1gyjZZ6Bunb6ZsH2izks+v25AxQJDBtigXCjTLmCPWECwQpLTtcxH589MVxhs/9TAmRC6lUEmXQ==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", + "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", "funding": [ { "type": "github", @@ -14387,7 +15211,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -14588,9 +15412,9 @@ } }, "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14616,9 +15440,9 @@ } }, "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14715,9 +15539,9 @@ } }, "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14958,9 +15782,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.3.1.tgz", - "integrity": "sha512-8ZOOWVwQ0iMpfEYkYo+U6W7fE2dJ/tP6dtEFwPJ66eB5JjnFupfYh+y6zo+vWDO72nGhKOVdxwhTjfzcSNRg4Q==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz", + "integrity": "sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g==", "funding": [ { "type": "github", @@ -14973,22 +15797,23 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-alpha-function": "^1.0.0", + "@csstools/postcss-alpha-function": "^1.0.1", "@csstools/postcss-cascade-layers": "^5.0.2", - "@csstools/postcss-color-function": "^4.0.11", - "@csstools/postcss-color-function-display-p3-linear": "^1.0.0", - "@csstools/postcss-color-mix-function": "^3.0.11", - "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.1", - "@csstools/postcss-content-alt-text": "^2.0.7", + "@csstools/postcss-color-function": "^4.0.12", + "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", + "@csstools/postcss-color-mix-function": "^3.0.12", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", + "@csstools/postcss-content-alt-text": "^2.0.8", + "@csstools/postcss-contrast-color-function": "^2.0.12", "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", "@csstools/postcss-gamut-mapping": "^2.0.11", - "@csstools/postcss-gradients-interpolation-method": "^5.0.11", - "@csstools/postcss-hwb-function": "^4.0.11", - "@csstools/postcss-ic-unit": "^4.0.3", + "@csstools/postcss-gradients-interpolation-method": "^5.0.12", + "@csstools/postcss-hwb-function": "^4.0.12", + "@csstools/postcss-ic-unit": "^4.0.4", "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.3", - "@csstools/postcss-light-dark-function": "^2.0.10", + "@csstools/postcss-light-dark-function": "^2.0.11", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", @@ -14997,39 +15822,43 @@ "@csstools/postcss-media-minmax": "^2.0.9", "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.11", - "@csstools/postcss-progressive-custom-properties": "^4.2.0", + "@csstools/postcss-normalize-display-values": "^4.0.1", + "@csstools/postcss-oklab-function": "^4.0.12", + "@csstools/postcss-position-area-property": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/postcss-property-rule-prelude-list": "^1.0.0", "@csstools/postcss-random-function": "^2.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.11", + "@csstools/postcss-relative-color-syntax": "^3.0.12", "@csstools/postcss-scope-pseudo-class": "^4.0.1", "@csstools/postcss-sign-functions": "^1.1.4", "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-syntax-descriptor-syntax-production": "^1.0.1", + "@csstools/postcss-system-ui-font-family": "^1.0.0", "@csstools/postcss-text-decoration-shorthand": "^4.0.3", "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.21", - "browserslist": "^4.25.1", + "autoprefixer": "^10.4.23", + "browserslist": "^4.28.1", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.3", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.4.0", + "cssdb": "^8.6.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.11", + "postcss-color-functional-notation": "^7.0.12", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.3", + "postcss-double-position-gradients": "^6.0.4", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.11", + "postcss-lab-function": "^7.0.12", "postcss-logical": "^8.1.0", "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", @@ -15073,9 +15902,9 @@ } }, "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15166,9 +15995,9 @@ } }, "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15179,9 +16008,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15327,9 +16156,9 @@ } }, "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", "license": "MIT", "funding": { "type": "github", @@ -15388,13 +16217,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -15435,15 +16283,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -15454,15 +16293,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -15502,24 +16341,24 @@ } }, "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", "license": "MIT", "dependencies": { - "scheduler": "^0.26.0" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.1.0" + "react": "^19.2.8" } }, "node_modules/react-fast-compare": { @@ -15578,9 +16417,9 @@ } }, "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz", + "integrity": "sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.3" @@ -15737,6 +16576,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -15756,15 +16601,15 @@ } }, "node_modules/regexpu-core": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.3.1.tgz", - "integrity": "sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" }, @@ -15806,29 +16651,17 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/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==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/rehype-raw": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", @@ -16100,6 +16933,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10" @@ -16129,12 +16963,13 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -16203,21 +17038,6 @@ "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==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rtlcss": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", @@ -16236,6 +17056,18 @@ "node": ">=12.0.0" } }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -16286,15 +17118,18 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/schema-dts": { @@ -16304,9 +17139,9 @@ "license": "Apache-2.0" }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -16349,16 +17184,16 @@ "license": "MIT" }, "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", "license": "MIT", "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/semver": { @@ -16387,24 +17222,24 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -16425,15 +17260,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -16444,24 +17270,24 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.7.tgz", + "integrity": "sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==", "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "engines": { + "node": ">=20.0.0" } }, "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", - "minimatch": "3.1.2", + "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" @@ -16474,21 +17300,25 @@ "license": "MIT" }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { @@ -16510,38 +17340,48 @@ } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/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==", "license": "MIT", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -16552,15 +17392,15 @@ } }, "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==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -16629,7 +17469,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -16639,14 +17481,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -16658,13 +17500,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -16737,9 +17579,9 @@ "license": "MIT" }, "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.3.tgz", + "integrity": "sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==", "license": "MIT", "dependencies": { "@types/node": "^17.0.5", @@ -16889,12 +17731,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, "node_modules/srcset": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", @@ -16908,18 +17744,18 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "license": "MIT" }, "node_modules/string_decoder": { @@ -17046,21 +17882,21 @@ } }, "node_modules/style-to-js": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", - "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", "license": "MIT", "dependencies": { - "style-to-object": "1.0.9" + "style-to-object": "1.0.14" } }, "node_modules/style-to-object": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", - "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", "license": "MIT", "dependencies": { - "inline-style-parser": "0.2.4" + "inline-style-parser": "0.2.7" } }, "node_modules/stylehacks": { @@ -17110,18 +17946,18 @@ "license": "MIT" }, "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", + "integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==", "license": "MIT", "dependencies": { - "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", - "picocolors": "^1.0.0" + "picocolors": "^1.0.0", + "sax": "^1.5.0" }, "bin": { "svgo": "bin/svgo" @@ -17144,10 +17980,16 @@ } }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/terser": { @@ -17167,15 +18009,14 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -17189,12 +18030,39 @@ "webpack": "^5.1.0" }, "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, "@swc/core": { "optional": true }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, "esbuild": { "optional": true }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, "uglify-js": { "optional": true } @@ -17235,6 +18103,22 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, + "node_modules/thingies": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", + "integrity": "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==", + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -17284,10 +18168,11 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -17334,6 +18219,22 @@ "node": ">=6" } }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -17360,6 +18261,24 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -17517,9 +18436,9 @@ } }, "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -17569,9 +18488,9 @@ } }, "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17584,9 +18503,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17616,9 +18535,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -17756,9 +18675,9 @@ } }, "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -17856,12 +18775,16 @@ } }, "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==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", + "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/value-equal": { @@ -17934,10 +18857,11 @@ "dev": true }, "node_modules/watchpack": { - "version": "2.4.2", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { @@ -17964,33 +18888,31 @@ } }, "node_modules/webpack": { - "version": "5.99.7", + "version": "5.109.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.109.2.tgz", + "integrity": "sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==", "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.16.0", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.24.4", + "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", + "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "watchpack": "^2.5.2", + "webpack-sources": "^3.5.1" }, "bin": { "webpack": "bin/webpack.js" @@ -18044,107 +18966,119 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/webpack-dev-middleware/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==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-middleware/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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-middleware/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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.6.tgz", + "integrity": "sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", - "compression": "^1.7.4", + "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.22.1", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.14.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -18155,10 +19089,40 @@ } } }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.21.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.2.tgz", + "integrity": "sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -18191,109 +19155,54 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", + "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/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==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/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==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, "engines": { "node": ">= 0.6" } }, "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz", + "integrity": "sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==", "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", + "ansis": "^3.2.0", "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" + "std-env": "^3.7.0" }, "engines": { "node": ">=14.21.3" }, "peerDependencies": { + "@rspack/core": "*", "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/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==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/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==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/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==", - "license": "MIT", - "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" + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", @@ -18405,12 +19314,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "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==", - "license": "ISC" - }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -18424,9 +19327,9 @@ } }, "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", + "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -18444,6 +19347,36 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", @@ -18474,10 +19407,26 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "license": "MIT", "engines": { "node": ">=12.20" diff --git a/package.json b/package.json index 4ba8826..ffa1e41 100644 --- a/package.json +++ b/package.json @@ -5,35 +5,42 @@ "scripts": { "docusaurus": "docusaurus", "start": "docusaurus start", - "build": "docusaurus build && node scripts/copy-legacy-machine-routes.mjs", + "build": "npm run generate:llms && docusaurus build && node scripts/add-sitemap-lastmod.mjs && node scripts/copy-legacy-machine-routes.mjs", + "deploy": "docusaurus deploy", "swizzle": "docusaurus swizzle", "clear": "docusaurus clear", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", - "spell-check": "cspell --quiet --unique" + "spell-check": "cspell --quiet --unique", + "generate:llms": "node scripts/generate-llms.mjs", + "validate:site": "node scripts/validate-site.mjs" }, "dependencies": { - "@docusaurus/core": "^3.8.1", - "@docusaurus/plugin-client-redirects": "^3.8.1", - "@docusaurus/plugin-content-docs": "^3.8.1", - "@docusaurus/plugin-google-tag-manager": "^3.8.1", - "@docusaurus/preset-classic": "^3.8.1", + "@docusaurus/core": "^3.10.2", + "@docusaurus/plugin-client-redirects": "^3.10.2", + "@docusaurus/plugin-content-docs": "^3.10.2", + "@docusaurus/plugin-google-tag-manager": "^3.10.2", + "@docusaurus/preset-classic": "^3.10.2", "@mdx-js/react": "^3.1.0", "clsx": "^2.1.1", "lottie-web": "^5.13.0", "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.2.8", + "react-dom": "^19.2.8" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.8.1", - "@docusaurus/tsconfig": "^3.8.1", - "@docusaurus/types": "^3.8.1", + "@docusaurus/module-type-aliases": "^3.10.2", + "@docusaurus/tsconfig": "^3.10.2", + "@docusaurus/types": "^3.10.2", "cspell": "^8.6.0", "typescript": "~5.8.3" }, + "overrides": { + "serialize-javascript": "7.0.7", + "uuid": "11.1.1" + }, "browserslist": { "production": [ ">0.5%", diff --git a/scripts/add-sitemap-lastmod.mjs b/scripts/add-sitemap-lastmod.mjs new file mode 100644 index 0000000..8870d80 --- /dev/null +++ b/scripts/add-sitemap-lastmod.mjs @@ -0,0 +1,132 @@ +import { access, readFile, readdir, stat, writeFile } from 'node:fs/promises' +import { spawnSync } from 'node:child_process' +import { join } from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = fileURLToPath(new URL('..', import.meta.url)) +const sitemapPath = join(root, 'build', 'sitemap.xml') + +async function firstExisting(paths) { + for (const path of paths) { + try { + await access(join(root, path)) + return path + } catch { + // Try the next source-file convention. + } + } + return null +} + +async function sourceForPath(pathname) { + const path = pathname.replace(/^\/+|\/+$/g, '') + if (!path) return 'src/pages/index.tsx' + if (path === 'blog') return 'docusaurus.config.ts' + + const candidates = [] + if (path === 'docs') { + candidates.push('docs/README.md') + } else if (path.startsWith('docs/')) { + const suffix = path.slice('docs/'.length) + candidates.push( + `docs/${suffix}.md`, + `docs/${suffix}.mdx`, + `docs/${suffix}/README.md`, + `docs/${suffix}/README.mdx`, + ) + const aliases = { + 'engines': 'components/engines', + 'publishers': 'components/publishers', + 'sources': 'components/sources', + 'references/faq': 'references/help-and-faq/faqs', + 'references/glossary': 'references/help-and-faq/glossary', + 'references/troubleshooting': 'references/help-and-faq/troubleshooting', + } + const alias = aliases[suffix] + if (alias) { + candidates.push( + `docs/${alias}.md`, + `docs/${alias}.mdx`, + `docs/${alias}/README.md`, + `docs/${alias}/README.mdx`, + ) + } + for (const [routePrefix, sourcePrefix] of [ + ['engines/', 'components/engines/'], + ['publishers/', 'components/publishers/'], + ['sources/', 'components/sources/'], + ]) { + if (suffix.startsWith(routePrefix)) { + const aliasPath = `${sourcePrefix}${suffix.slice(routePrefix.length)}` + candidates.push(`docs/${aliasPath}.md`, `docs/${aliasPath}.mdx`) + } + } + } else if (path.startsWith('community/')) { + const suffix = path.slice('community/'.length) + candidates.push( + `content/community/${suffix}.md`, + `content/community/${suffix}.mdx`, + `content/community/${suffix}/README.md`, + `content/community/${suffix}/README.mdx`, + ) + if (suffix.startsWith('roadmap-and-release-notes/')) { + const slug = suffix.slice('roadmap-and-release-notes/'.length).replace(/\/$/, '') + const entries = await readdir(join(root, 'content/community/roadmap-and-release-notes')) + const releaseNote = entries.find((entry) => entry.endsWith(`-${slug}.md`)) + if (releaseNote) candidates.push(`content/community/roadmap-and-release-notes/${releaseNote}`) + } + } else if (path.startsWith('use-cases/')) { + const suffix = path.slice('use-cases/'.length) + candidates.push( + `content/use-cases/use-cases/${suffix}.md`, + `content/use-cases/use-cases/${suffix}.mdx`, + ) + } else if (path === 'use-cases') { + candidates.push('content/use-cases/use-cases/README.mdx') + } else if (path.startsWith('integrations/')) { + const suffix = path.slice('integrations/'.length) + candidates.push( + `content/use-cases/integrations/${suffix}.md`, + `content/use-cases/integrations/${suffix}.mdx`, + ) + } + + return firstExisting(candidates) +} + +async function lastModified(path) { + const result = spawnSync('git', ['log', '-1', '--format=%as', '--', path], { + cwd: root, + encoding: 'utf8', + }) + const gitDate = result.status === 0 ? result.stdout.trim() : '' + if (gitDate) return gitDate + + // New files have no Git history until the PR is committed. Their filesystem + // modification date is the best available source date during local builds. + return (await stat(join(root, path))).mtime.toISOString().slice(0, 10) +} + +const sitemap = await readFile(sitemapPath, 'utf8') +const urls = [...sitemap.matchAll(/([\s\S]*?)([^<]+)<\/loc>[\s\S]*?<\/url>/g)] +const replacements = await Promise.all( + urls.map(async (match) => { + const url = new URL(match[2]) + const source = await sourceForPath(url.pathname) + if (!source) { + throw new Error(`No source file mapped for sitemap URL: ${url.pathname}`) + } + const date = await lastModified(source) + if (!date) { + throw new Error(`No Git modification date available for: ${source}`) + } + return [match[0], match[0].replace('', `${date}`)] + }), +) + +let updated = sitemap +for (const [original, replacement] of replacements) { + updated = updated.replace(original, replacement) +} + +await writeFile(sitemapPath, updated) diff --git a/scripts/copy-legacy-machine-routes.mjs b/scripts/copy-legacy-machine-routes.mjs index 8cb7966..2216e17 100644 --- a/scripts/copy-legacy-machine-routes.mjs +++ b/scripts/copy-legacy-machine-routes.mjs @@ -3,7 +3,7 @@ import { join } from 'node:path' const buildDirectory = new URL('../build/', import.meta.url) const legacyDocsDirectory = new URL('../build/docs/', import.meta.url) -const machineFiles = ['robots.txt', 'sitemap.xml', 'llms.txt'] +const machineFiles = ['robots.txt', 'sitemap.xml', 'llms.txt', 'llms-full.txt'] await mkdir(legacyDocsDirectory, { recursive: true }) diff --git a/scripts/generate-llms.mjs b/scripts/generate-llms.mjs new file mode 100644 index 0000000..65eadf3 --- /dev/null +++ b/scripts/generate-llms.mjs @@ -0,0 +1,101 @@ +import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises' +import { join, relative } from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = fileURLToPath(new URL('..', import.meta.url)) +const outputDirectory = join(root, 'static', 'llms') + +const collections = { + 'getting-started': ['docs/getting-started'], + cli: ['docs/cli'], + api: ['docs/api'], + concepts: ['docs/README.md', 'docs/overview', 'docs/components'], + other: [ + 'docs/basics', + 'docs/guides', + 'docs/references', + 'docs/specifications', + 'content/use-cases', + ], +} + +const titles = { + 'getting-started': 'Getting Started with Bacalhau', + cli: 'Bacalhau CLI Reference', + api: 'Bacalhau API Reference', + concepts: 'Bacalhau Concepts and Architecture', + other: 'Additional Bacalhau Documentation', +} + +async function markdownFiles(path) { + const absolutePath = join(root, path) + const entries = await readdir(absolutePath, { withFileTypes: true }) + const files = [] + + for (const entry of entries) { + const entryPath = join(path, entry.name) + if (entry.isDirectory()) { + files.push(...(await markdownFiles(entryPath))) + } else if (entry.isFile() && /\.(md|mdx)$/.test(entry.name)) { + files.push(entryPath) + } + } + + return files +} + +async function filesFor(paths) { + const files = [] + for (const path of paths) { + if (/\.(md|mdx)$/.test(path)) { + files.push(path) + } else { + files.push(...(await markdownFiles(path))) + } + } + return files.sort() +} + +function renderSource(source) { + return source + .replace(/^---\s*[\s\S]*?---\s*/, '') + .replace(/^import .*$/gm, '') + .replace(/^export .*$/gm, '') + .replace(/<\/?(Tabs|TabItem)[^>]*>/g, '') + .replace(/\t/g, ' ') + .replace(/[ \t]+$/gm, '') + .replace(/\n{3,}/g, '\n\n') + .trim() +} + +async function renderCollection(name, paths) { + const files = await filesFor(paths) + const sections = await Promise.all( + files.map(async (path) => { + const source = await readFile(join(root, path), 'utf8') + const rendered = renderSource(source) + return `## ${relative(root, join(root, path))}\n\n${rendered}` + }), + ) + + return `# ${titles[name]}\n\n${sections.join('\n\n')}`.trim() + '\n' +} + +await mkdir(outputDirectory, { recursive: true }) + +const renderedCollections = {} +for (const [name, paths] of Object.entries(collections)) { + const rendered = await renderCollection(name, paths) + renderedCollections[name] = rendered + await writeFile(join(outputDirectory, `${name}.txt`), rendered) +} + +const fullDocument = [ + '# Bacalhau Documentation', + '', + '> Canonical, generated text representation of the Bacalhau documentation.', + '', + ...Object.values(renderedCollections), +].join('\n') + +await writeFile(join(root, 'static', 'llms-full.txt'), fullDocument) diff --git a/scripts/validate-site.mjs b/scripts/validate-site.mjs new file mode 100644 index 0000000..c060e37 --- /dev/null +++ b/scripts/validate-site.mjs @@ -0,0 +1,79 @@ +import { readdir, readFile, stat } from 'node:fs/promises' +import { join } from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = fileURLToPath(new URL('..', import.meta.url)) +const buildDirectory = join(root, 'build') + +async function filesRecursively(path) { + const entries = await readdir(path, { withFileTypes: true }) + const files = [] + for (const entry of entries) { + const entryPath = join(path, entry.name) + if (entry.isDirectory()) files.push(...(await filesRecursively(entryPath))) + else if (entry.isFile()) files.push(entryPath) + } + return files +} + +async function requireFile(path) { + try { + await stat(path) + } catch { + throw new Error(`Missing required site artifact: ${path}`) + } +} + +for (const path of [ + join(buildDirectory, 'llms.txt'), + join(buildDirectory, 'llms-full.txt'), + join(buildDirectory, 'sitemap.xml'), + join(buildDirectory, 'robots.txt'), + join(buildDirectory, '.well-known', 'mcp.json'), + join(buildDirectory, 'docs', 'llms.txt'), + join(buildDirectory, 'docs', 'llms-full.txt'), + join(buildDirectory, 'docs', 'sitemap.xml'), + join(buildDirectory, 'docs', 'robots.txt'), +]) { + await requireFile(path) +} + +const sitemap = await readFile(join(buildDirectory, 'sitemap.xml'), 'utf8') +const sitemapUrls = [...sitemap.matchAll(/[\s\S]*?[^<]+<\/loc>[^<]+<\/lastmod>[\s\S]*?<\/url>/g)] +if (sitemapUrls.length < 100) { + throw new Error(`Expected at least 100 sitemap URLs with lastmod; found ${sitemapUrls.length}`) +} + +const htmlFiles = (await filesRecursively(buildDirectory)).filter((path) => + path.endsWith('.html'), +) +for (const path of htmlFiles) { + const html = await readFile(path, 'utf8') + if (!html.includes('rel="canonical"')) { + throw new Error(`Missing canonical URL: ${path}`) + } + if (html.includes('docs.expanso.io')) { + throw new Error(`Unexpected Expanso canonical/reference: ${path}`) + } +} + +for (const route of [ + 'compute-over-data-comparison', + 'compute-over-data-architecture', + 'edge-orchestration-buyers-guide', + 'data-locality-and-sovereignty', +]) { + const html = await readFile(join(buildDirectory, 'docs', 'guides', route, 'index.html'), 'utf8') + for (const schema of ['TechArticle', 'FAQPage', 'BreadcrumbList']) { + if (!html.includes(`\"@type\":\"${schema}\"`)) { + throw new Error(`Missing ${schema} JSON-LD on ${route}`) + } + } +} + +const installation = await readFile(join(root, 'docs', 'getting-started', 'installation.mdx'), 'utf8') +if (!installation.includes('https://get.bacalhau.org/install.sh')) { + throw new Error('Installation guide does not use the canonical install endpoint') +} + +console.log(`Validated ${htmlFiles.length} HTML files and ${sitemapUrls.length} sitemap URLs.`) diff --git a/src/components/StructuredData/index.tsx b/src/components/StructuredData/index.tsx new file mode 100644 index 0000000..a297905 --- /dev/null +++ b/src/components/StructuredData/index.tsx @@ -0,0 +1,81 @@ +import Head from '@docusaurus/Head' + +type Faq = { + answer: string + question: string +} + +type StructuredDataProps = { + description: string + faq: Faq[] + path: string + title: string +} + +const siteUrl = 'https://bacalhau.org' + +export default function StructuredData({ + description, + faq, + path, + title, +}: StructuredDataProps) { + const url = `${siteUrl}${path}` + const data = [ + { + '@context': 'https://schema.org', + '@type': 'TechArticle', + headline: title, + description, + mainEntityOfPage: url, + author: { + '@type': 'Organization', + name: 'Bacalhau Project', + url: siteUrl, + }, + about: ['compute over data', 'distributed computing', 'data locality'], + }, + { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faq.map(({ question, answer }) => ({ + '@type': 'Question', + name: question, + acceptedAnswer: { + '@type': 'Answer', + text: answer, + }, + })), + }, + { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { + '@type': 'ListItem', + position: 1, + name: 'Documentation', + item: `${siteUrl}/docs/`, + }, + { + '@type': 'ListItem', + position: 2, + name: 'Guides', + item: `${siteUrl}/docs/guides/`, + }, + { + '@type': 'ListItem', + position: 3, + name: title, + item: url, + }, + ], + }, + ] + + return ( + + + + ) +} diff --git a/static/llms-full.txt b/static/llms-full.txt new file mode 100644 index 0000000..64decab --- /dev/null +++ b/static/llms-full.txt @@ -0,0 +1,10741 @@ +# Bacalhau Documentation + +> Canonical, generated text representation of the Bacalhau documentation. + +# Getting Started with Bacalhau + +## docs/getting-started/installation.mdx + +# Installation + +This section explains how to install Bacalhau on your machine, verify it's working, and understand basic requirements. Bacalhau is distributed as a single self-contained binary that can function as a client, orchestrator node, and compute node—greatly simplifying deployment and management of your distributed compute network. + +## Install the Bacalhau Binary + +To install the CLI, choose your environment, and run the command(s) below. + +```bash +curl -sL https://get.bacalhau.org/install.sh | bash +``` + +- This fetches the latest Bacalhau release and places it in `/usr/local/bin` or a similar path. +- You many need sudo mode or root access to install the binary at the desired path + + Windows users can download the [latest release tarball from + Github](https://github.com/bacalhau-project/bacalhau/releases) and extract `bacalhau.exe` to any location available in + the PATH environment variable. + +### Base Image + +```bash +docker pull ghcr.io/bacalhau-project/bacalhau:latest +``` + +- Suitable for running orchestrators, clients or compute nodes with no Docker support + +### Docker in Docker + +```bash +docker pull ghcr.io/bacalhau-project/bacalhau:latest-dind +``` + +- Suitable for running compute nodes that can run Docker based jobs +- Require `--privileged` mode when running the container + +### Verify the Installation + +```bash +bacalhau version +``` + +This should print: + +- The local binary version +- The version of the orchestrator this client is connected to, if any +- The latest available version of bacalhau in case you are running an outdated version. + +If you get `command not found`, verify your PATH includes the Bacalhau binary. + +### Upgrading Bacalhau + +To upgrade Bacalhau to the latest version, run the installation script. If Bacalhau is already installed, this will update it to the most recent version available. + +## Requirements & Tips + +- **Docker**: + - Must be installed and running on any **compute** node to handle Docker-based jobs. +- **AWS Credentials** (if you're using S3): + - For S3 inputs or outputs, the node needs valid AWS credentials (e.g., environment variables). +- **Running an Orchestrator & Compute**: + - See [Quick Start](./quick-start.mdx) for how to run a local or hybrid node with `bacalhau serve --orchestrator --compute`. +- **`bacalhau devstack`**: + - Perfect for local development or running tests. + +## Next Steps + +- Head over to Basic CLI Usage to learn how to submit, describe, and stop jobs. +- Check Common Workflows for steps on mounting data (S3, local folders) and publishing outputs. +- Explore References for advanced node management (Docker Compose, devstack, multi-node clusters). + +## docs/getting-started/network-setup.md + +# Network Setup + +This guide explains how to set up Bacalhau networks for various deployment scenarios, from development environments to production deployments. + +## Introduction + +Bacalhau's architecture consists of two primary node types: + +- **Orchestrator nodes** that schedule and manage jobs +- **Compute nodes** that execute workloads + +Compute nodes connect to orchestrators, but don't need to be reachable by orchestrators or other compute nodes, making deployment simpler. + +## Getting Started with Bacalhau + +Choose the setup option that best matches your needs: + +| Setup Option | Best For | Key Benefit | +| ------------------- | ---------------------------------- | -------------------------------------------- | +| DevStack | Development & testing | Quick local setup with minimal configuration | +| Self-Hosted Network | Custom infrastructure requirements | Complete control over all components | + +### Option 1: Self-Hosted Network + +If you need to host your own orchestrator, follow these steps for a custom deployment. + +#### Setting Up an Orchestrator Node + +On your designated orchestrator machine: + +```bash +# Start an orchestrator-only node +bacalhau serve --orchestrator +``` + +Take note of this machine's IP address or hostname - you'll need it to connect compute nodes. + +#### Adding Compute Nodes + +On each machine that will execute jobs: + +```bash +# Start a compute-only node connected to your orchestrator +bacalhau serve --compute -c Compute.Orchestrators=:4222 +``` + +Replace `` with the actual IP address or hostname of your orchestrator. + +#### Verifying Your Cluster + +Check that all nodes are connected: + +```bash +# List all nodes in your network +bacalhau node list +``` + +You should see your orchestrator and all compute nodes listed. + +:::note +The setup described above creates an open network suitable for testing in trusted environments. For securing your network, refer to the Security Best Practices in the Reference section. +::: + +### Option 2: DevStack + +DevStack provides a pre-configured local environment perfect for development and testing. + +```bash +# Launch a complete development environment +bacalhau devstack +``` + +This pre-configures a transient orchestrator and compute nodes by default, giving you a complete environment for testing with minimal setup. + +You can submit jobs to your DevStack just like any other Bacalhau network: + +```bash +bacalhau docker run ubuntu:latest -- echo "Hello from DevStack!" +``` + +### Alternative Setup Methods + +These methods provide additional ways to set up Bacalhau for specific use cases. + +#### Single Hybrid Node + +For the simplest local setup, you can run a single node that acts as both orchestrator and compute: + +```bash +# Launch a combined orchestrator and compute node +bacalhau serve --orchestrator --compute +``` + +This starts Bacalhau in "hybrid mode" where: + +- The orchestrator handles job scheduling +- The compute service executes containers +- Both components run in the same process + +This option is useful for initial testing or for very small deployments. + +#### Docker Deployment + +Run Bacalhau in Docker for easier management: + +```bash +# Run an orchestrator node +docker run -p 4222:4222 ghcr.io/bacalhau-project/bacalhau:latest serve --orchestrator + +# Run a compute node using Docker-in-Docker +docker run --privileged -p 4222:4222 \ + ghcr.io/bacalhau-project/bacalhau:latest-dind \ + serve --compute -c Compute.Orchestrators=:4222 +``` + +The `bacalhau:latest-dind` image includes Docker-in-Docker capabilities required for compute nodes. + +#### Docker Compose Setup + +For a quick multi-node setup, Bacalhau provides Docker Compose examples that create a complete network suitable for testing: + +1. **Clone Network Setups Repository**\ + Clone the repository containing the network setups: + + ```bash + git clone https://github.com/bacalhau-project/bacalhau-network-setups.git + ``` + +2. **Navigate to a Specific Setup**\ + Change directory to your desired setup under `docker-compose`: + + ```bash + cd bacalhau-network-setups/docker-compose/ + ``` + +3. **Start the Network**\ + Use Docker Compose to bring up the network: + + ```bash + docker compose up + ``` + +These setups enable deployment and testing of Bacalhau across multiple nodes, including an orchestrator and persistent data storage. + +### Next Steps + +- Secure your network with our Security Guide +- Learn how to submit jobs to your network +- Explore common workflows for different use cases + +## docs/getting-started/quick-start.mdx + +# Quick Start + +This Quick Start guide shows how to run your first Bacalhau job with minimal setup. Bacalhau's design as a single self-contained binary makes it incredibly easy to set up your own distributed compute network in minutes. + +## Prerequisites + +- Docker installed on any machine that runs a compute node +- Bacalhau CLI installed (see below) + +## 1. Installation + +1. Install Bacalhau using the one-liner below (Linux/macOS) or see the [installation guide](./installation.mdx) for Windows and Docker options. + +```bash +curl -sL https://get.bacalhau.org/install.sh | bash +``` + +2. Once installed, verify with: + +```bash +bacalhau version +``` + +## 2. Start a Hybrid Node + +Open a terminal and run: + +```bash +bacalhau serve --orchestrator --compute +``` + +- This command launches both an orchestrator and a compute node in one process +- Keep it running; you'll see logs indicating it's ready + +## 3. Submit a Data Analysis Job + +Bacalhau supports two primary methods of job submission: Imperative (CLI) and Declarative (YAML). We'll demonstrate a word count job on the classic novel Moby Dick. + +```bash +bacalhau docker run \ + --input https://www.gutenberg.org/files/2701/2701-0.txt:/data/moby-dick.txt \ + --output outputs:/outputs \ + --publisher local \ + ghcr.io/bacalhau-project/word-count:latest -- --output-file /outputs/moby-dick-counts.txt /data/moby-dick.txt +``` + +Create a `word-count.yaml` file: + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/word-count:latest + Parameters: + - --output-file + - /outputs/moby-dick-counts.txt + - /data/moby-dick.txt + Publisher: + Type: local + InputSources: + - Alias: input_custom + Target: /data/moby-dick.txt + Source: + Type: urlDownload + Params: + URL: https://www.gutenberg.org/files/2701/2701-0.txt + ResultPaths: + - Name: outputs + Path: /outputs +``` + +Then run the job using: + +```bash +bacalhau job run word-count.yaml +``` + +- The job downloads a sample dataset and processes it locally +- Bacalhau will display job progress until completion +- You'll receive a Job ID once the job is submitted + +## 4. Inspect the Job + +```bash +bacalhau job describe +``` + +- Replace `` with the actual ID printed in step 2 +- You can run `bacalhau job logs ` to just get the execution logs + +## 5. Retrieve Results + +Download and view your job results: + +```bash +# Download the results +bacalhau job get + +# View the analysis output +head job-*/outputs/moby-dick-counts.txt +``` + +:::note +You should see a word frequency analysis of the Moby Dick text file! +::: + +## 🎉 Success! + +You've just: + +1. Started a local Bacalhau network +2. Submitted a job using both imperative and declarative methods +3. Tracked job progress with detailed descriptions +4. Retrieved and viewed job results + +# Bacalhau CLI Reference + +## docs/cli/README.md + +# Overview + +This page explains how the Bacalhau CLI is structured and which global flags are most commonly used. Understanding these fundamentals will help you work efficiently with all Bacalhau commands. + +## What You'll Learn + +- The general structure and organization of Bacalhau commands +- How global flags affect command behavior regardless of the specific command +- How to customize output formats and control connection settings +- How to specify configuration files and data directories +- Where to find more detailed command references + +## CLI Structure + +Bacalhau commands follow a consistent pattern that makes them intuitive and predictable: + +```bash +bacalhau [flags] +``` + +## Top-Level Commands + +Bacalhau's CLI groups commands into logical categories: + +- `agent`: Client-side commands for checking health, version, and node information +- `job`: Core job management (create, list, describe, stop, retrieve logs, etc.) +- `node`: Cluster node management and inspection +- `config`: Client configuration management +- `docker`: Imperative command for running Docker-based jobs + +## Command Examples + +```bash +# Get version information +bacalhau agent version + +# List recent jobs +bacalhau job list + +# Submit a Docker job (imperative style) +bacalhau docker run ubuntu:latest -- echo "Hello World" + +# View compute nodes in the cluster +bacalhau node list +``` + +## Global Flags + +These flags work with any command and provide consistent behavior across the CLI. They're especially useful for scripting and automation. + +### Connection Settings + +| Flag | Description | Default | +| ------------------- | ----------------------------- | ----------- | +| `--api-host string` | Hostname for the Bacalhau API | `localhost` | +| `--api-port int` | Port for the Bacalhau API | `1234` | + +Example: + +```bash +bacalhau job list --api-host mycluster.example.com --api-port 8080 +``` + +### Configuration Management + +| Flag | Description | Default | +| --------------------- | -------------------------------------------------------- | ------------- | +| `-c, --config string` | Config file(s) or dot separated path(s) to config values | - | +| `--data-dir string` | The filesystem path where Bacalhau stores its data | `~/.bacalhau` | + +Examples: + +```bash +# Use a custom config file +bacalhau job list --config /path/to/custom/config.yaml + +# Specify a custom data directory +bacalhau job list --data-dir /path/to/bacalhau/data + +# Configure a specific value using dot notation +bacalhau serve --orchestrator -c WebUI.Enabled=true +``` + +### Output Formatting + +| Flag | Description | Example Values | +| ----------------- | ------------------------------------------ | ----------------------- | +| `--output format` | Output format style | `json`, `yaml`, `table` | +| `--pretty` | Format JSON or YAML output for readability | - | + +Examples: + +```bash +# Get machine-readable job list +bacalhau job list --output json + +# Get pretty-printed JSON +bacalhau job list --output json --pretty + +# Get YAML output +bacalhau job list --output yaml +``` + +## Getting Help + +For detailed information about any command's available flags: + +```bash +bacalhau --help +``` + +This will show all available options, including both global flags and command-specific flags. + +**Tip:** For full details on each command's available flags, see the CLI Reference or type `bacalhau --help`. + +## docs/cli/agent/README.md + +# Agent + +The `bacalhau agent` command is a parent command that offers sub-commands to query information about the Bacalhau agent. This can be useful for debugging, monitoring, or managing the agent's behavior and health. + +## Usage + +```bash +bacalhau agent [command] +``` + +## Available Commands + +1. [**alive**](alive.md): + + - Description: Retrieves the agent's liveness and health information. This can be helpful to determine if the agent is running and healthy. + - Usage: + + ```bash + bacalhau agent alive + ``` + +2. [**node**](node.md): + + - Description: Gathers the agent's node-related information. This might include details about the machine or environment where the agent is running, available resources, supported engines, etc. + - Usage: + + ```bash + bacalhau agent node + ``` + +3. [**version**](version.md): + + - Description: Retrieves the Bacalhau version of the agent. This can be beneficial for ensuring compatibility or checking for updates. + - Usage: + + ```bash + bacalhau agent version + ``` + +For more detailed information on any of the sub-commands, you can use the command: + +```bash +bacalhau agent [command] --help +``` + +## Flags + +- `-h`, `--help`: + - Description: Displays help information for the `agent` command. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host used for RESTful communication between the client and server. The flag is disregarded if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Specifies the port for REST communication. If the `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Sets the desired log format. Options are: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: \`\`$HOME/.bacalhau\` + +## docs/cli/agent/alive.md + +# Alive + +## Description + +The `bacalhau agent alive` command provides information about the agent's liveness and health. This is essential for monitoring and ensuring that the agent is active and functioning correctly. + +## Usage + +```bash +bacalhau agent alive [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Displays help information for the `alive` sub-command. +- `--output format`: + - Description: Determines the format in which the output is displayed. Available formats include JSON and YAML. + - Options: `json`, `yaml` + - Default: `yaml` +- `--pretty`: + - Description: Formats the output for enhanced readability. This flag is relevant only when using JSON or YAML output formats. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host used for RESTful communication between the client and server. The flag is disregarded if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Specifies the port for REST communication. If the `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Sets the desired log format. Options are: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: \`\`$HOME/.bacalhau\` + +## Examples + +### Checking the Agent's Liveness and Health Info + +1. **Basic Usage**: + + **Command**: + + ```bash + bacalhau agent alive + ``` + + **Output**: + + ``` + status: OK + ``` + +2. **Output in JSON format**: + + **Command**: + + ```bash + bacalhau agent alive --output json --pretty + ``` + + **Output**: + + ```json + { + "Status": "OK" + } + ``` + +## docs/cli/agent/node.md + +# Node + +## Description + +The `bacalhau agent node` command retrieves information about the agent's node, providing insights into the agent's environment and aiding in debugging. + +## Usage + +```bash +bacalhau agent node [flags] +``` + +## Flags + +- `-h`, `--help`: + - Displays help information for the `node` sub-command. +- `--output format`: + - Defines the output format (either JSON or YAML). + - Options: `json`, `yaml` + - Default: `yaml` +- `--pretty`: + - Beautifies the output when using JSON or YAML formats. + +## Global Flags + +- `--api-host string`: + - The host for REST communication. Overrides the `BACALHAU_API_HOST` environment variable. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - The port for REST communication. Overridden if `BACALHAU_API_PORT` environment variable is set. + - Default: `1234` +- `--log-mode logging-mode`: + - Specifies the log format. Choices are: `default`, `station`, `json`, `combined`, `event`. + - Default: `default` +- `--repo string`: + - Path to the bacalhau repository. + - Default: \`\`$HOME/.bacalhau\` + +## Examples + +1. **Retrieve Node Information in Default Format (YAML)** + + ```bash + bacalhau agent node + ``` + +2. **Retrieve Node Information in JSON Format** + + ```bash + bacalhau agent node --output json + ``` + +3. **Retrieve Node Information in Pretty-printed JSON Format** + + ```bash + bacalhau agent node --output json --pretty + ``` + +## docs/cli/agent/version.md + +# Version + +The `bacalhau agent version` command is used to obtain the version of the bacalhau agent. + +## Description: + +Using this command, users can quickly retrieve the version of the agent, allowing them to confirm the specific release of the software they are using. + +## Usage: + +```bash +bacalhau agent version [flags] +``` + +## Flags: + +- **`-h`, `--help`**: + - Show help for the `version` command. +- **`--output format`**: + - Defines the output format of the command's results. Accepted formats include "json" and "yaml". +- **`--pretty`**: + - Used for pretty printing the output, enhancing readability. This flag is applicable only for the "json" and "yaml" output formats. + +## Global Flags: + +- **`--api-host string`**: + - Designates the host for client-server communication via REST. If the `BACALHAU_API_HOST` environment variable is present, this flag will be disregarded. + - Default: `"bootstrap.production.bacalhau.org"` +- **`--api-port int`**: + - Defines the port for client-server communication through REST. This flag becomes irrelevant if the `BACALHAU_API_PORT` environment variable is specified. + - Default: `1234` +- **`--log-mode logging-mode`**: + - Specifies the desired logging format. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- **`--repo string`**: + - Indicates the path to the bacalhau repository. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. **Retrieve the agent version**: + + Execute the command to get the agent version: + + ```bash + bacalhau agent version + ``` + + Expected output: + + ```bash + Bacalhau v0.0.0-xxxxxxx + BuildDate 2023-09-22 16:03:44 +0000 UTC + GitCommit 0fe81cb488f666845ac72c73a4b804aaa658e511 + ``` + +2. **Retrieve the agent version in JSON format**: + + ```bash + bacalhau agent version --output json + ``` + + Expected output: + + ```bash + {"major":"0","minor":"0","gitversion":"v0.0.0-xxxxxxx","gitcommit":"0fe81cb488f666845ac72c73a4b804aaa658e511","builddate":"2023-09-22T16:03:44Z","goos":"linux","goarch":"amd64"} + ``` + +3. **Retrieve the agent version in Pretty-printed JSON format**: + + ```bash + bacalhau agent version --output json --pretty + ``` + + Expected output: + + ```bash + { + "major": "0", + "minor": "0", + "gitversion": "v0.0.0-xxxxxxx", + "gitcommit": "0fe81cb488f666845ac72c73a4b804aaa658e511", + "builddate": "2023-09-22T16:03:44Z", + "goos": "linux", + "goarch": "amd64" + } + ``` + +## docs/cli/config/README.md + +# Config + +The `bacalhau config` command is a parent command that offers sub-commands to modify and query information about the Bacalhau config. This can be useful for debugging, monitoring, or managing the nodes configuration. + +## Usage + +```bash +bacalhau config [command] +``` + +## Available Commands + +1. [**list**](list.md): + + - Description: Lists the configuration keys and values of the bacalhau node. This command is useful for understanding how configuration keys map to their respective values, aiding in the use of the `bacalhau config set` command. + - Usage: + + ```bash + bacalhau config list + ``` + +2. [**set**](set.md): + + - Description: Sets a value in the bacalhau node's configuration file. This command is used to modify the configuration file that the bacalhau node will reference for its settings. + - Usage: + + ```bash + bacalhau config set + ``` + +## docs/cli/config/list.md + +# Config List + +## Description + +The `bacalhau config list` command lists the configuration keys and values of the bacalhau node. This command is useful for understanding how configuration keys map to their respective values, aiding in the use of the `bacalhau config set` command. + +Note: Configuration values displayed by this command represent the settings that will be applied when the bacalhau node is next restarted. It is important to note that these values may not reflect the current operational configuration of an active bacalhau node. The displayed configuration is relevant and accurate for a node that is either not currently running or that has been restarted after the execution of this command. + +## Usage + +```bash +bacalhau config list [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Displays help information for the `list` sub-command. +- `--hide-header`: + - Description: Do not print the column headers when displaying the results. + - Default: `false` +- `--no-style`: + - Description: Removes all styling from the table output, displaying raw data. + - Default: `false` +- `--output format`: + - Description: Determines the format in which the output is displayed. Available formats include Table, JSON, and YAML. + - Options: `json`, `yaml`, `table` + - Default: `table` +- `--pretty`: + - Description: Formats the output for enhanced readability. This flag is relevant only when using JSON or YAML output formats. + - Default: `true` +- `--wide`: + - Description: Prints full values in the table results without truncating any information. + - Default: `false` + +## Examples + +### Listing the Bacalhau nodes configuration settings + +1. **Basic Usage**: + + **Command**: + + ```bash + bacalhau config list + ``` + + **Output**: + + ```bash + KEY VALUE + + ... + ``` + +2. **Output in JSON format**: + + **Command**: + + ```bash + bacalhau config list --output json --pretty + ``` + + **Output**: + + ```json + [ + { + "Key": "", + "Value": + }, + ... + ] + ``` + +## docs/cli/config/set.md + +# Config Set + +## Description: + +The `bacalhau config set` command sets a value in the bacalhau node's configuration file. This command is used to modify the configuration file that the bacalhau node will reference for its settings. Key names in the configuration are case-insensitive. Additionally, the command validates the value being set based on the type of the configuration key, ensuring that only appropriate and valid configurations are applied. + +:::note +Changes made using this command will be applied to the configuration file, but they do not immediately affect the running configuration of an active bacalhau node. The modifications will take effect only after the node is restarted. +::: + +## Usage + +```bash +bacalhau config set +``` + +## Flags + +- `-h`, `--help`: + - Description: Displays help information for the `set` sub-command. + +## Examples + +### Configuring the Server API Port Value + +```bash +bacalhau config set node.serverapi.port 9999 + +bacalhau config list | grep serverapi.port + node.serverapi.port 9999 + +cat ~/.bacalhau/config.yaml +node: + serverapi: + port: 9999 +``` + +### Configuring the Logging Mode Value + +```bash +bacalhau config set node.loggingmode json + +bacalhau config list | grep loggingmode + node.loggingmode json + +cat ~/.bacalhau/config.yaml +node: + loggingmode: json +``` + +### Multiple Set commands append to the file + +```bash +bacalhau config set node.serverapi.port 9999 +bacalhau config set node.serverapi.host 0.0.0.0 +bacalhau config set node.loggingmode json + +cat ~/.bacalhau/config.yaml +node: + loggingmode: json + serverapi: + host: 0.0.0.0 + port: 9999 +``` + +### Set command value validation + +#### Example of invalid logging mode value + +```bash +bacalhau config set node.loggingmode some-invalid-value + +Error: setting "node.loggingmode": "some-invalid-value" is an invalid log-mode (valid modes: ["default" "station" "json" "combined" "event"]) +``` + +#### Example of invalid time duration value + +```bash +bacalhau config set node.volumesizerequesttimeout 10days + +Error: setting "node.volumesizerequesttimeout": time: unknown unit "days" in duration "10days" +``` + +## docs/cli/job/README.md + +# Job + +The `bacalhau job` command provides a suite of sub-commands to submit, query, and manage jobs within Bacalhau. Users can deploy jobs, obtain job details, track execution logs, and more. + +## Usage + +```bash +bacalhau job [command] +``` + +## Available Commands + +1. [**describe**](./describe.md): + + - Description: Retrieves detailed information of a job using its ID. + - Usage: + + ```bash + bacalhau job describe + ``` + +2. [**executions**](./executions.md): + + - Description: Lists all executions associated with a job, identified by its ID. + - Usage: + + ```bash + bacalhau job executions + ``` + +3. [**get**](./get.md): + + - Description: Get the results of a job, identified by its ID. + - Usage: + + ```bash + bacalhau job get + ``` + +4. [**history**](./history.md): + + - Description: Enumerates the historical events related to a job, identified by its ID. + - Usage: + + ```bash + bacalhau job history + ``` +5. [**list**](./list.md): + + - Description: Provides an overview of all submitted jobs. + - Usage: + + ```bash + bacalhau job list + ``` + +6. [**logs**](./logs.md): + + - Description: Fetches and streams the logs from a currently executing job. + - Usage: + + ```bash + bacalhau job logs + ``` + +7. [**run**](./run.md): + + - Description: Submits a job for execution using either a JSON or YAML configuration file. + - Usage: + + ```bash + bacalhau job run + ``` + +8. [**stop**](./stop.md): + + - Description: Halts a previously submitted job. + - Usage: + + ```bash + bacalhau job stop + ``` + +For comprehensive details on any of the sub-commands, run: + +```bash +bacalhau job [command] --help +``` + +## Flags + +- `-h`, `--help`: + - Description: Shows the help information for the `job` command. + +## Global Flags + +1. `--api-host string`: + - Description: Determines the host for RESTful communication between the client and server. This flag is overlooked if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +2. `--api-port int`: + - Description: Designates the port for RESTful communication. This flag is bypassed if the `BACALHAU_API_PORT` environment variable is active. + - Default: `1234` +3. `--log-mode logging-mode`: + - Description: Chooses the preferred log format. Available choices are: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +4. `--repo string`: + - Description: Specifies the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## docs/cli/job/describe.md + +# Describe + +## Description + +The `bacalhau job describe` command provides a detailed description of a specific job in YAML format. This description can be particularly useful when wanting to understand the attributes and current status of a specific job. To list all available jobs, the `bacalhau job list` command can be used. + +## Usage + +```bash +bacalhau job describe [id] [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Display help for the `describe` command. +- `--output format`: + - Description: Specifies the desired output format for the command. Supported values are `json` and `yaml`. + - Default: `yaml` +- `--pretty`: + - Description: Pretty prints the output. This option is applicable only to `json` and `yaml` output formats. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host for the client and server to communicate through via REST. If the `BACALHAU_API_HOST` environment variable is set, this flag will be ignored. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Determines the port for the client and server to communicate on using REST. If the `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Specifies the desired log format. Supported values include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **Describe a Job with Full ID**: + + ```bash + bacalhau job describe j-e3f8c209-d683-4a41-b840-f09b88d087b9 + ``` + +2. **Describe a Job with Shortened ID**: + + ```bash + bacalhau job describe j-47805f5c + ``` + +3. **Describe a Job with JSON Output**: + + ```bash + bacalhau job describe --output json --pretty j-b6ad164a + ``` + +## docs/cli/job/executions.md + +# Executions + +## Description + +The `bacalhau job executions` command retrieves a list of executions for a specific job based on its ID. This can be essential when tracking the various runs and their respective states for a particular job. + +## Usage + +```bash +bacalhau job executions [id] [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Display help for the `executions` command. +- `--hide-header`: + - Description: Do not print the column headers when displaying the results. +- `--limit uint32`: + - Description: Restricts the number of results returned. + - Default: `20` +- `--next-token string`: + - Description: Uses the specified token for pagination. Useful for fetching the next set of results. +- `--no-style`: + - Description: Removes all styling from the table output, displaying raw data. +- `--order-by string`: + - Description: Orders results based on a specific field. Valid fields are: `modify_time`, `create_time`, `id`, and `state`. +- `--order-reversed`: + - Description: Reverses the order of the results. Useful in conjunction with `--order-by`. +- `--output format`: + - Description: Specifies the desired output format for the command. Supported values are `table`, `csv`, `json`, and `yaml`. + - Default: `table` +- `--pretty`: + - Description: Pretty prints the output. This option is applicable only to `json` and `yaml` output formats. +- `--wide`: + - Description: Prints full values in the table results without truncating any information. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host for the client and server to communicate through via REST. If the `BACALHAU_API_HOST` environment variable is set, this flag will be ignored. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Determines the port for the client and server to communicate on using REST. If the `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Specifies the desired log format. Supported values include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **List executions for a specific Job**: + + ```bash + bacalhau job executions j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 + ``` + + Expected output: + + ```bash + CREATED MODIFIED ID NODE ID REV. COMPUTE DESIRED COMMENT + STATE STATE + 16:46:03 16:46:04 e-99362435 QmTSJgdN 6 Completed Stopped + 16:46:03 16:46:04 e-75dd20bb QmXRdLru 6 Completed Stopped + 16:46:03 16:46:04 e-03870df5 QmVXwmdZ 6 Completed Stopped + ``` + +2. **Order executions by state for a specific job**: + + Execute the command: + + ```bash + bacalhau job executions j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 --order-by state + ``` + + Expected output: + + ```bash + CREATED MODIFIED ID NODE ID REV. COMPUTE DESIRED COMMENT + STATE STATE + 16:46:03 16:46:04 e-03870df5 QmVXwmdZ 6 Completed Stopped + 16:46:03 16:46:04 e-75dd20bb QmXRdLru 6 Completed Stopped + 16:46:03 16:46:04 e-99362435 QmTSJgdN 6 Completed Stopped + ``` + +3. **List executions with YAML output**: + + ```bash + bacalhau job executions j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 --output yaml + ``` + + Expected output: + + ```yaml + ... [The YAML formatted output] ... + ``` + +## docs/cli/job/get.md + +# Get + +## Description + +The `bacalhau job get` command is used to get the results of the job, including stdout and stderr. + +## Usage + +```bash +bacalhau job get [id] [flags] +``` + +## Flags + +- `--download-timeout-secs duration`: + - Description: Timeout duration for IPFS downloads. (default 5m0s) +- `-h`, `--help`: + - Description: Display help for the `list` command. +- `output-dir string`: + - Description: Directory to write the output to. +- `--raw`: + - Description: Download raw result CIDs instead of merging multiple CIDs into a single result. + +## Global Flags + +- `--api-host string`: + - Description: Defines the host for client-server communication via REST. Overridden by the `BACALHAU_API_HOST` environment variable, if set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Sets the port for RESTful communication between the client and server. The `BACALHAU_API_PORT` environment variable takes precedence if set. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Designates the desired log format. Options include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Points to the bacalhau repository location. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **Get the results of a job**: + + `bacalhau job get 51225160-807e-48b8-88c9-28311c7899e1` + +2. **Get the results of a job, using a short ID**: + + `bacalhau job get 51225160` + +## docs/cli/job/history.md + +# History + +## Description + +The `bacalhau job history` command lists the history events of a specific job based on its ID. This feature allows users to track changes, executions, and other significant milestones associated with a particular job. + +## Usage + +```bash +bacalhau job history [id] [flags] +``` + +## Flags + +- `--event-type string`: + - Description: Specifies the type of history events to retrieve. Available options include `all`, `job`, and `execution`. + - Default: `all` +- `--execution-id string`: + - Description: Filters results by a specific execution ID. +- `-h`, `--help`: + - Description: Display help for the `history` command. +- `--hide-header`: + - Description: Opts out of printing the column headers in the results. +- `--limit uint32`: + - Description: Limits the number of results returned. +- `--next-token string`: + - Description: Uses the provided token for pagination. +- `--no-style`: + - Description: Strips all styling from the table output. +- `--node-id string`: + - Description: Filters the results by a specific node ID. +- `--order-by string`: + - Description: Organizes results based on a chosen field. +- `--order-reversed`: + - Description: Reverses the order of the displayed results. +- `--output format`: + - Description: Dictates the desired output format for the command. Options are `table`, `csv`, `json`, and `yaml`. + - Default: `table` +- `--pretty`: + - Description: Offers a more visually pleasing output for `json` and `yaml` formats. +- `--wide`: + - Description: Presents full values in the table results, preventing truncation. + +## Global Flags + +- `--api-host string`: + - Description: Defines the host for client-server communication via REST. Overridden by the `BACALHAU_API_HOST` environment variable, if set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Sets the port for RESTful communication between the client and server. The `BACALHAU_API_PORT` environment variable takes precedence if set. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Designates the desired log format. Options include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Points to the bacalhau repository location. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **Retrieve the history of a specific job**: + + Execute the command to get the job history: + + ```bash + bacalhau job history j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 + ``` + + Expected output: + + ```plaintext + TIME LEVEL EXEC. ID ... NEW STATE COMMENT + ... [The output rows like the ones you've shown] ... + 16:46:04 JobLevel 2 Pending Completed + ``` + +2. **Filter the history by event type**: + + Filter the job history by the event type: + + ```bash + bacalhau job history j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 --event-type job + ``` + + Expected output: + + ```plaintext + TIME LEVEL EXEC. ID NODE ID REV. PREVIOUS STATE NEW STATE COMMENT + 16:46:03 JobLevel 1 Pending Pending Job created + 16:46:04 JobLevel 2 Pending Completed + ``` + +3. **Filter the history by execution ID**: + + Filter the job history by a specific execution ID: + + ```bash + bacalhau job history j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 --execution-id e-99362435 + ``` + + Expected output: + + ```plaintext + TIME LEVEL EXEC. ID ... NEW STATE COMMENT + ... [The output rows for the specific execution ID] ... + 16:46:04 ExecutionLevel e-99362435 QmTSJgdN 6 BidAccepted Completed + ``` + +4. **Retrieve the history in YAML format**: + + Get the job history in YAML format: + + ```bash + bacalhau job history j-6f2bf0ea-ebcd-4490-899a-9de9d8d95881 --output yaml + ``` + + Expected output: + + ```yaml + ... [The YAML formatted output] ... + ``` + +## docs/cli/job/list.md + +# List + +## Description + +The `bacalhau job list` command provides a listing of all submitted jobs. This command offers an overview of all tasks and processes registered in the system, allowing users to monitor and manage their jobs effectively. + +## Usage + +```bash +bacalhau job list [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Display help for the `list` command. +- `--hide-header`: + - Description: Opts out of printing the column headers in the results. +- `--labels string`: + - Description: Filters jobs by labels. It's designed to function similar to Kubernetes label selectors. + - Default: `bacalhau_canary != true` +- `--limit uint32`: + - Description: Limits the number of results returned. + - Default: `10` +- `--next-token string`: + - Description: Uses the provided token for pagination. +- `--no-style`: + - Description: Strips all styling from the table output. +- `--order-by string`: + - Description: Organizes results based on a chosen field. Valid fields are `id` and `created_at`. +- `--order-reversed`: + - Description: Reverses the order of the displayed results. +- `--output format`: + - Description: Dictates the desired output format for the command. Options are `table`, `csv`, `json`, and `yaml`. + - Default: `table` +- `--pretty`: + - Description: Offers a more visually pleasing output for `json` and `yaml` formats. +- `--wide`: + - Description: Presents full values in the table results, preventing truncation. + +## Global Flags + +- `--api-host string`: + - Description: Defines the host for client-server communication via REST. Overridden by the `BACALHAU_API_HOST` environment variable, if set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Sets the port for RESTful communication between the client and server. The `BACALHAU_API_PORT` environment variable takes precedence if set. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Designates the desired log format. Options include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Points to the bacalhau repository location. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **List all jobs**: + + Execute the command to list all the jobs: + + ```bash + bacalhau job list + ``` + + Expected output: + + ```plaintext + CREATED ID JOB TYPE STATE + 08:19:07 d78a4cb4 docker batch Completed + 04:17:21 e45f31a7 docker batch Completed + 04:53:50 f4993f62 docker batch Completed + ... (trimmed for brevity) ... + ``` + +2. **Limit the list to the last two jobs**: + + Limit the list to display only the last two jobs: + + ```bash + bacalhau job list --limit 2 + ``` + + Expected output: + + ```plaintext + CREATED ID JOB TYPE STATE + 03:14:16 19a26187 docker batch Completed + 21:47:21 2a53a13b docker batch Completed + ``` + +3. **Order the list by creation date in descending order**: + + Order the jobs by their creation date in a descending manner: + + ```bash + bacalhau job list --order-by created_at --order-reversed + ``` + + Expected output: + + ```plaintext + CREATED ID JOB TYPE STATE + 17:44:16 90e14efd docker batch Completed + 17:44:08 8204570c docker batch Completed + 17:43:50 f196521d docker batch Completed + ... (trimmed for brevity) ... + ``` + +4. **Filter the jobs by specific labels**: + + Display jobs that have specific labels: + + ```bash + bacalhau job list --labels "region in (us-east-1, us-east-2),env = prod" + ``` + + Expected output: + + ```plaintext + ... (filtered jobs) ... + ``` + +5. **Display the list in JSON format with pretty printing**: + + Get a limited list of jobs in a formatted JSON output: + + ```bash + bacalhau job list --limit 3 --output json --pretty + ``` + + Expected output: + + ```plaintext + ... [The JSON formatted output] ... + ``` + +## docs/cli/job/logs.md + +# Logs + +## Description + +The `bacalhau job logs` command allows users to retrieve logs from a job that has been previously submitted. This command is useful for tracking and debugging the progress and state of a running or completed job. + +## Usage + +```bash +bacalhau job logs [id] [flags] +``` + +## Flags + +1. `-f`, `--follow`: + - Description: This flag allows the user to follow the logs in real-time after fetching the current logs. It provides a continuous stream of log updates, similar to `tail -f` in Unix-like systems. +2. `-h`, `--help`: + - Description: Display help information for the `logs` command. + +## Global Flags + +1. `--api-host string`: + - Description: Specifies the host for the client and server to communicate through REST. This flag is disregarded if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +2. `--api-port int`: + - Description: Sets the port for RESTful communication between the client and server. If the `BACALHAU_API_PORT` environment variable is available, this flag is ignored. + - Default: `1234` +3. `--log-mode logging-mode`: + - Description: Determines the desired log format. Available options include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +4. `--repo string`: + - Description: Specifies the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **Display Logs for a Previously Submitted Job with Full ID**: + + **Command:** + + ```bash + bacalhau job logs j-51225160-807e-48b8-88c9-28311c7899e1 + ``` + + **Expected Output:** + + ```bash + [2023-09-24 09:01:32] INFO - Application started successfully. + [2023-09-24 09:01:33] DEBUG - Initializing database connections. + [2023-09-24 09:01:35] WARN - API rate limit approaching. + [2023-09-24 09:02:01] ERROR - Failed to retrieve data from endpoint: /api/v1/data. + [2023-09-24 09:05:00] INFO - Data sync completed with 4500 new records. + ``` + +2. **Follow Logs in Real-Time**: + + **Command:** + + ```bash + bacalhau job logs --follow j-51225160-807e-48b8-88c9-28311c7899e1 + ``` + + **Expected Output**: + + ```bash + [2023-09-24 11:30:02] INFO - User 'john_doe' logged in successfully. + [2023-09-24 11:30:15] DEBUG - Fetching data from cache for key: userSettings_john_doe. + [2023-09-24 11:31:05] WARN - High memory usage detected: 85% of allocated resources. + ... [Logs continue to appear in real-time] ... + ``` + +3. **Display Logs Using a Shortened ID**: + + **Command:** + + ```bash + bacalhau job logs j-ebd9bf2f + ``` + + **Expected Output:** + + ```bash + [2023-09-24 10:15:12] INFO - Application initialization sequence started. + [2023-09-24 10:15:13] DEBUG - Loading configurations from /config/app.json. + [2023-09-24 10:15:14] INFO - Connected to message broker successfully. + [2023-09-24 10:16:00] ERROR - Failed to send email notification to user@example.com. + ``` + +## docs/cli/job/run.md + +# Run + +## Description + +The `bacalhau job run` command facilitates the initiation of a job from a file or directly from the standard input (stdin). The command supports both JSON and YAML data formats. This command is particularly useful for quickly executing a job without the need for manual configurations. + +## Usage + +```bash +bacalhau job run [flags] +``` + +## Flags + +- `--dry-run`: + - Description: With this flag, the job will not be submitted. Instead, it will display what would have been submitted, providing a way to preview before actual submission. +- `-f`, `--follow`: + - Description: If provided, the command will continuously display the output from the job as it runs. +- `--id-only`: + - Description: On successful job submission, only the Job ID will be printed. +- `--node-details`: + - Description: Displays details of all nodes. Note that this flag is overridden if `--id-only` is provided. +- `--show-warnings`: + - Description: Shows any warnings that occur during the job submission. +- `--wait`: + - Description: Waits for the job to finish execution. To set this to false, use --wait=false + - Default: `true` +- `--wait-timeout-secs int`: + - Description: If `--wait` is provided, this flag sets the maximum time (in seconds) the command will wait for the job to finish before it terminates. + - Default: `600` seconds +- `-h`, `--help`: + - Description: Displays help information for the `run` command. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host used for RESTful communication between the client and server. The flag is disregarded if `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Determines the port for REST communication. If `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Selects the desired log format. Options include: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## Examples + +**Sample Job (`job.yaml`)** + +A sample job used in the following examples is provided below: + +```bash +cat job.yaml +``` + +```yaml +name: A Simple Docker Job +type: batch +count: 1 +tasks: + - name: My main task + engine: + type: docker + params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo Hello Bacalhau! +``` + +This configuration describes a batch job that runs a Docker task. It utilizes the `ubuntu:latest` image and executes the command `echo Hello Bacalhau!`. + +1. **Running a Job using a YAML Configuration**: + + To run a job with a configuration provided in a `job.yaml` file: + + **Command:** + + ```bash + bacalhau job run job.yaml + ``` + + **Expected Output:** + + ```plaintext + Job successfully submitted. Job ID: j-2d0f513a-9eb1-49c2-8bc8-246c6fb41520 + Checking job status... (Enter Ctrl+C to exit at any time, your job will continue running): + + Communicating with the network ................ done ✅ 0.1s + Creating job for submission ................ done ✅ 0.6s + + To get more details about the run, execute: + bacalhau job describe j-2d0f513a-9eb1-49c2-8bc8-246c6fb41520 + + To get more details about the run executions, execute: + bacalhau job executions j-2d0f513a-9eb1-49c2-8bc8-246c6fb41520 + ``` + +2. **Running a Job and Following its Logs**: + + **Command:** + + ```bash + bacalhau job run job.yaml --follow + ``` + + **Expected Output:** + + ```plaintext + Job successfully submitted. Job ID: j-b89df816-7564-4f04-b270-e6cda89eda72 + Waiting for logs... (Enter Ctrl+C to exit at any time, your job will continue running): + + Hello Bacalhau! + ``` + +3. **Running a Job Without Waiting**: + + **Command:** + + ```bash + bacalhau job run job.yaml --wait=false + ``` + + **Expected Output:** + + ```plaintext + j-3fd396b3-e92e-42ca-bd87-0dc9eb15e6f9 + ``` + +4. **Fetching Only the Job ID Upon Submission**: + + **Command:** + + ```bash + bacalhau job run job.yaml --id-only + ``` + + **Expected Output:** + + ```plaintext + j-5976ffb6-3465-4fec-8b3b-2c822cbaf417 + ``` + +5. **Fetching Only the Job ID and Wait for Completion**: + + **Command:** + + ```bash + bacalhau job run job.yaml --id-only --wait + ``` + + **Expected Output:** + + ```plaintext + j-293f1302-3298-4aca-b06d-33fd1e3f9d2c + ``` + +6. **Running a Job with Node Details**: + + **Command:** + + ```bash + bacalhau job run job.yaml --node-details + ``` + + **Expected Output:** + + ```plaintext + Job successfully submitted. Job ID: j-05e65dd3-4e9e-4e20-a104-3c91ba934435 + Checking job status... (Enter Ctrl+C to exit at any time, your job will continue running): + + Communicating with the network ................ done ✅ 0.1s + Creating job for submission ................ done ✅ 0.6s + + Job Results By Node: + • Node QmVXwmdZ: + Hello Bacalhau! + + To get more details about the run, execute: + bacalhau job describe j-05e65dd3-4e9e-4e20-a104-3c91ba934435 + + To get more details about the run executions, execute: + bacalhau job executions j-05e65dd3-4e9e-4e20-a104-3c91ba934435 + ``` + +7. **Rerunning a previously submitting job**: + + **Command:** + + ```bash + bacalhau job describe j-05e65dd3-4e9e-4e20-a104-3c91ba934435 | bacalhau job run + ``` + + **Expected Output:** + + ```plaintext + Reading from /dev/stdin; send Ctrl-d to stop.Job successfully submitted. Job ID: j-d8625929-83f4-411a-b9aa-7bcfecb27a8b + Checking job status... (Enter Ctrl+C to exit at any time, your job will continue running): + + Communicating with the network ................ done ✅ 0.1s + Creating job for submission ................ done ✅ 0.6s + + To get more details about the run, execute: + bacalhau job describe j-d8625929-83f4-411a-b9aa-7bcfecb27a8b + + To get more details about the run executions, execute: + bacalhau job executions j-d8625929-83f4-411a-b9aa-7bcfecb27a8b + ``` + +## Job Templating + +The `bacalhau job run` command also supports templating, which allows users to dynamically inject variables into their job specifications. Additional flags related to templating include: + +- `--no-template`: + - Description: Disable the templating feature. When this flag is set, the job spec will be used as-is, without any placeholder replacements. +- `-E, --template-envs`: + - Description: Specify a regular expression pattern for selecting environment variables to be included as template variables in the job spec. e.g. `--template-envs ".*"` will include all environment variables. +- `-V, --template-vars`: + - Description: Replace a placeholder in the job spec with a value. e.g. `--template-vars foo=bar` + +### Overview + +Templating is particularly useful when running multiple jobs with varying parameters such as DuckDB query, S3 buckets, prefixes, and time ranges without the need to edit each job specification file manually. + +### Templating Implementation + +The templating functionality in Bacalhau is built upon the Go text/template package. This powerful library offers a wide range of features for manipulating and formatting text based on template definitions and input variables. + +For more detailed information about the Go text/template library and its syntax, please refer to the official documentation: [Go text/template Package](https://golang.org/pkg/text/template/). + +### Basic Templating Example + +**Sample Job Spec with Templating Variables**: + +```yaml +Name: docker job +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo {{.greeting}} {{.name}} +``` + +**Running with Templating**: + +``` +bacalhau job run job.yaml --template-vars "greeting=Hello,name=World" +``` + +**Defining Flag Multiple Times**: + +``` +bacalhau job run job.yaml --template-vars "greeting=Hello" --template-vars "name=World" +``` + +**Disabling Templating**: + +``` +bacalhau job run job.yaml --no-template +``` + +### Using Environment Variables for Templates + +You can also use environment variables for templating: + +``` + +bacalhau job run job.yaml --template-envs "*" +``` + +**Passing A Subset of Environment Variables**: + +``` +bacalhau job run job.yaml --template-envs "greeting|name" +``` + +### Dry Run to Preview Templated Spec + +To preview the final templated job spec without actually submitting the job, you can use the `--dry-run` flag: + +``` +bacalhau job run job.yaml --template-vars "greeting=Hello,name=World" --dry-run +``` + +This will output the processed job specification, showing you how the placeholders have been replaced with the provided values. + +### Advanced Templating Examples + +#### Query Live Logs + +```yaml +Name: Live logs processing +Type: ops +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/nginx-access-log-query:1.0.0 + Parameters: + - --query + - { { .query } } + - --start-time + - { { or (index . "start-time") "" } } + - --end-time + - { { or (index . "end-time") "" } } + InputSources: + - Target: /logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs +``` + +This is an ops job that runs on all nodes that match the job selection criteria. It accepts duckdb query variable, and two optional start-time and end-time variables to define the time range for the query. + +To run this job, you can use the following command: + +``` +bacalhau job run job.yaml \ + -V "query=SELECT status FROM logs WHERE status LIKE '5__'" \ + -V "start-time=-5m" +``` + +#### Query S3 Logs + +```yaml +Name: S3 logs processing +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/nginx-access-log-query:1.0.0 + Parameters: + - --query + - { { .query } } + InputSources: + - Target: /logs + Source: + Type: s3 + Params: + Bucket: { { .AccessLogBucket } } + Key: { { .AccessLogPrefix } } + Filter: { { or (index . "AccessLogPattern") ".*" } } + Region: { { .AWSRegion } } +``` + +This is a batch job that runs on a single node. It accepts the duckdb query variable, and four other variables to define the S3 bucket, prefix, and pattern for the logs and the AWS region. + +To run this job, you can use the following command: + +``` +bacalhau job run job.yaml \ + -V "AccessLogBucket=my-bucket" \ + -V "AWSRegion=us-east-1" \ + -V "AccessLogPrefix=2023-11-19-*" \ + -V "AccessLogPattern=^[10-12].*" +``` + +## docs/cli/job/stop.md + +# Stop + +## Description + +The `bacalhau job stop` command allows users to terminate a previously submitted job. This is useful in scenarios where there's a need to halt a running job, perhaps due to misconfiguration or changed priorities. + +## Usage + +```bash +bacalhau job stop [id] [flags] +``` + +## Flags + +- `--quiet`: + - Description: If provided, the command will not display any output, neither to the standard output (stdout) nor to the standard error (stderr). +- `-h`, `--help`: + - Description: Displays help information for the `stop` command. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host used for RESTful communication between the client and server. The flag is disregarded if `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Determines the port for REST communication. If `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Selects the desired log format. Options include: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **Stop a Specific Job**: + + If you wish to halt the execution of a job, you can utilize the `stop` command. Here's how you can achieve that: + + **Command:** + + ```bash + bacalhau job stop j-10eb97de-14cd-4db4-96ec-561bb943309a + ``` + + **Expected Output:** + + ```plaintext + Checking job status + + Connecting to network ................ done ✅ 0.0s + Verifying job state ................ done ✅ 0.2s + Stopping job ................ done ✅ 0.1s + + Job stop successfully submitted with evaluation ID: 397fd425-8b1a-491e-952a-0632492e7ece + ``` + +2. **Silently Stop a Job**: + + If you prefer to terminate a job without seeing any verbose feedback or messages, the `--quiet` option can be used. + + **Command:** + + ```bash + bacalhau job stop j-63b5ec0c-b5bf-4398-a152-b46c07abe52a --quiet + ``` + + **Expected Output:** + + ```plaintext + [No output displayed as the operation is run quietly.] + ``` + +## docs/cli/node/README.md + +# Node + +The `bacalhau node` command provides a set of sub-commands to query and manage node-related information within Bacalhau. With these tools, users can access specific details about nodes, list all network nodes, and more. + +## Usage + +```bash +bacalhau node [command] +``` + +## Available Commands + +1. [**approve**](approve.md): + + - Description: Approves a single node to join the cluster. + - Usage: + + ```bash + bacalhau node approve + ``` + +2. [**delete**](delete.md): + + - Description: Deletes a node from the cluster using its ID. + - Usage: + + ```bash + bacalhau node delete + ``` + +3. [**describe**](describe.md): + + - Description: Retrieves detailed information of a node using its ID. + - Usage: + + ```bash + bacalhau node describe + ``` + +4. [**list**](list.md): + + - Description: Lists the details of all nodes present in the network. + - Usage: + + ```bash + bacalhau node list + ``` + +5. [**reject**](reject.md): + +- Description: Reject a specific node's request to join the cluster. +- Usage: + + ```bash + bacalhau node reject + ``` + +For comprehensive details on any of the sub-commands, run: + +```bash +bacalhau node [command] --help +``` + +## Flags + +- `-h`, `--help`: + - Description: Shows the help information for the `node` command. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host for RESTful communication between the client and server. The flag will be ignored if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Designates the port for RESTful communication. The flag will be bypassed if the `BACALHAU_API_PORT` environment variable is active. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Chooses the preferred log format. Available choices are: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Specifies the path to the bacalhau repository. + - Default: `/Users/walid/.bacalhau` + +## docs/cli/node/approve.md + +# Approve + +The `bacalhau node approve` command offers administrators the ability to approve the cluster membership for a node using its name. + +## Description + +Using the `approve` sub-command under the `bacalhau node` umbrella, users can allow a node in the pending state to join the cluster and receive work. This feature is crucial for system administrators to manage the cluster. + +## Usage + +```bash +bacalhau node approve [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `-m message`: + - A message to be attached to the approval action. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Approve a Node with ID `nodeID123`: + + ```bash + bacalhau node approve nodeID123 + ``` + +2. Approve a Node with an audit message: + + ```bash + bacalhau node approve nodeID123 -m "okay" + ``` + +## docs/cli/node/delete.md + +# Delete + +The `bacalhau node delete` command offers administrators the ability to remove a node from the cluster using its name. + +## Description + +Using the `delete` sub-command, administrators can remove a node from the list of available compute nodes in the cluster. This feature is necessary for the management of the infrastructure. + +## Usage + +```bash +bacalhau node delete [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `-m message`: + - A message to be attached to the deletion action. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Delete the Node with ID `nodeID123`: + + ```bash + bacalhau node delete nodeID123 + ``` + +2. Delete a Node with an audit message: + + ```bash + bacalhau node delete nodeID123 -m "bad actor" + ``` + +## docs/cli/node/describe.md + +# Describe + +The `bacalhau node describe` command offers users the ability to retrieve detailed information about a specific node using its unique identifier. + +## Description + +Using the `describe` sub-command under the `bacalhau node` umbrella, users can get comprehensive details of a node by providing its ID. This information is crucial for system administrators and network managers to understand the state, specifications, and other attributes of nodes in their infrastructure. + +## Usage + +```bash +bacalhau node describe [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `--output format`: + - Defines the desired format for the command's output. + - Options: `"json"` or `"yaml"` + - Default: `"yaml"` +- `--pretty`: + - When this flag is used, the command will pretty print the output. This is applicable only for outputs in `json` and `yaml` formats. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Describing a Node with ID `nodeID123`: + + ```bash + bacalhau node describe nodeID123 + ``` + +2. Describing a Node with Output in JSON Format: + + ```bash + bacalhau node describe nodeID123 --output json + ``` + +3. Pretty Printing the Description of a Node: + + ```bash + bacalhau node describe nodeID123 --pretty + ``` + +## docs/cli/node/list.md + +# List + +The `bacalhau node list` command is designed to provide users with a comprehensive list of network nodes along with details based on specified flags. + +## Description + +The `list` sub-command under the `bacalhau node` category enumerates information about nodes in the network. It supports various filtering, ordering, and output formatting options, allowing users to tailor the output to their needs. + +## Usage + +```bash +bacalhau node list [flags] +``` + +## Flags + +- `-h`, `--help`: + - Show the help message for the `list` command. +- `--hide-header`: + - Do not display the column headers in the output. +- `--filter-approval`: + - Only show nodes with the specified approval status. Valid values are: `approved`, `pending`, `rejected`. +- `--filter-status`: + - Only show nodes with the specified state. Valid values are: `healthy`, `unhealthy`, `unknown`. +- `--labels string`: + - Filter nodes based on labels. This follows the filtering format provided by Kubernetes, as shown in their documentation about labels. +- `--limit uint32`: + - Restrict the number of results displayed. +- `--next-token string`: + - Provide the next token for pagination. +- `--no-style`: + - Output the table without any style. +- `--order-by string`: + - Sort the results based on a specific field. Valid sorting fields are: `id`, `type`, `available_cpu`, `available_memory`, `available_disk`, `available_gpu`. +- `--order-reversed`: + - Display the results in reverse order. +- `--output format`: + - Choose the output format. Available options: `table`, `csv`, `json`, `yaml`. + - Default: `table`. +- `--pretty`: + - Enhance the visual appeal of the output. This is applicable only to `json` and `yaml` formats. +- `--show strings`: + - Determine the column groups to be displayed. Acceptable values are: `labels`, `version`, `features`, `capacity`. + - Default: `labels`, `capacity`. +- `--wide`: + - Display full values in the output table, without truncation. + +## Global Flags + +- `--api-host string`: + - Specify the host for client-server communication via REST. This gets ignored if the `BACALHAU_API_HOST` environment variable is defined. + - Default: `"bootstrap.production.bacalhau.org"`. +- `--api-port int`: + - Specify the port for RESTful communication between client and server. Gets overlooked if the `BACALHAU_API_PORT` environment variable is set. + - Default: `1234`. +- `--log-mode logging-mode`: + - Choose the desired log format. + - Options: `'default', 'station', 'json', 'combined', 'event'`. + - Default: `'default'`. +- `--repo string`: + - Point to the directory path of the bacalhau repository. + - Default: `"`$HOME/.bacalhau"\`. + +## Examples + +1. **Retrieve the list of nodes**: + + Execute the command to get a list of all nodes: + + ```bash + bacalhau node list + ``` + + Expected output: + + ```plaintext + ID TYPE LABELS CPU MEMORY DISK GPU + QmTSJgdN Compute Architecture=amd64 Operating-System=linux 3.2 / 11.7 GB / 77.8 GB / 1 / + git-lfs=True owner=bacalhau 3.2 11.7 GB 77.8 GB 1 + QmVXwmdZ Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 77.8 GB / 0 / + git-lfs=True owner=bacalhau 3.2 12.5 GB 77.8 GB 0 + QmXRdLru Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 78.0 GB / 0 / + git-lfs=True owner=bacalhau 3.2 12.5 GB 78.0 GB 0 + ... [Additional nodes information] ... + ``` + +2. **Filter the list of nodes by labels**: + + Execute the command to get a list of nodes with specific labels: + + ```bash + bacalhau node list --labels "Operating-System=linux,owner=bacalhau" + ``` + + Expected output: + + ```plaintext + ID TYPE LABELS CPU MEMORY DISK GPU + QmTSJgdN Compute Architecture=amd64 Operating-System=linux 3.2 / 11.7 GB / 77.8 GB / 1 / + git-lfs=True owner=bacalhau 3.2 11.7 GB 77.8 GB 1 + ... [Additional nodes information] ... + ``` + +3. **Order the list of nodes by available memory**: + + Execute the command to get the list of nodes ordered by available memory: + + ```bash + bacalhau node list --order-by available_memory + ``` + + Expected output: + + ```plaintext + ID TYPE LABELS CPU MEMORY DISK GPU + QmVXwmdZ Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 77.8 GB / 0 / + git-lfs=True owner=bacalhau 3.2 12.5 GB 77.8 GB 0 + ... [Additional nodes information] ... + ``` + +4. **Limit the number of nodes displayed and output in JSON format**: + + Execute the command to get a limited list of nodes in JSON format: + + ```bash + bacalhau node list --limit 3 --output json --pretty + ``` + + Expected output: + + ```json + [ + { + "PeerInfo": { + "ID": "QmTSJgdN7zCPAqBCkmdsdpFbiJV8bJ6zhoxK9N5xfar1sz", + ... [Additional node details] ... + }, + ... [Other nodes] ... + } + ] + ``` + +## docs/cli/node/reject.md + +# Reject + +The `bacalhau node reject` command offers administrators the ability to reject a compute node's request to join the cluster. + +## Description + +Using the `reject` sub-command, administrators can reject a node in the pending state from joining the cluster and receiving work. This feature is crucial for system administrators to manage the cluster and will stop the node from taking part in the cluster until approved. + +## Usage + +```bash +bacalhau node rejected [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `-m message`: + - A message to be attached to the rejection action. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Reject a Node with ID `nodeID123`: + + ```bash + bacalhau node reject nodeID123 + ``` + +2. Reject a Node with an audit message: + + ```bash + bacalhau node reject nodeID123 -m "potentially bad" + ``` + +# Bacalhau API Reference + +## docs/api/README.md + +# Overview + +:::warning +Note that in version 1.4.0 API logic and endpoints have changed. Check out the release notes and updated API description in the API documentation section. +::: + +Welcome to the official API documentation for Bacalhau. This guide provides a detailed insight into Bacalhau's RESTful HTTP APIs and demonstrates how to make the most out of them. + +## Overview + +Bacalhau prioritizes an "API-first" design, enabling users to interact with their deployed systems programmatically. In the `v1.4.0` the API model was changed to include only two endpoints, focused on orchestrating, querying and managing your network nodes and jobs. Each endpoint has a clear, separate environment and goal, allowing to manage coordination between nodes, jobs, and executions more effectively. + +- **Endpoint Prefix**: All APIs are versioned and prefixed with `/api/v1`. +- **Default Port**: By default, Bacalhau listens on port `1234`. + +## **API endpoints** + +### **Orchestrator** + +The Majority of Bacalhau’s functionality is channeled through the `Orchestrator` endpoint and its operations. It handles user requests and schedules and it is critical for creating, managing, monitoring, and analyzing jobs within Bacalhau. It also provides mechanisms to query information about the nodes in the cluster. + +```bash +api/v1/orchestrator/ +``` + +Here’s the job submission format, where you can tag a YAML file with the job specifications or input the commands with your CLI + +```bash +# Submit a job +curl -X PUT \ + -H "Content-Type: application/json" \ + -d '{ + "Job": { + "Name": "test-job", + "Namespace": "default", + "Type": "batch", + "Count": 1, + "Labels": { + "foo": "bar", + "env": "dev" + }, + "Tasks": [ + { + "Name": "task1", + "Engine": { + "Type": "docker", + "Params": { + "Image": "ubuntu:latest", + "Entrypoint": [ + "echo", + "hello" + ] + } + }, + "Publisher": { + "Type": "noop", + "Params": {} + }, + "ResourcesConfig": { + "CPU": "0.1", + "Memory": "10mb" + }, + "Network": { + "Type": "None" + }, + "Timeouts": { + "ExecutionTimeout": 30 + } + } + ] + } + }' \ + http://0.0.0.0:20000/api/v1/orchestrator/jobs + +{"JobID":"28c08f7f-6fb0-48ed-912d-a2cb6c3a4f3a","EvaluationID":"996b12e4-bcc5-4d74-ac21-0c421dafb7de"} +``` + +### Agent + +This endpoint offers a convenient route to collate detailed information about the Bacalhau node you're interacting with, whether it's acting as the orchestrator or a compute node. It provides you with insights into the node's health, capabilities, and the deployed Bacalhau version. + +```bash +api/v1/agent/node +``` + +Here’s the command structure for querying your current node. You can check on its status and collate information on its health and capabilities: + +```bash +# Is alive +curl 0.0.0.0:20000/api/v1/agent/alive +``` + +## Features + +### Pagination + +To handle large datasets, Bacalhau supports pagination. Users can define the `limit` in their request and then utilize the `next_token` from the response to fetch subsequent data chunks. + +### Ordering + +To sort the results of list-based queries, use the `order_by` parameter. By default, the list will be sorted in ascending order. If you want to reverse it, use the `reverse` parameter. Note that the fields available for sorting might vary depending on the specific API endpoint. + +### Pretty JSON Output + +By default, Bacalhau's APIs provide a minimized JSON response. If you want to view the output in a more readable format, append `pretty` to the query string. + +### HTTP Methods + +Being RESTful in nature, Bacalhau's API endpoints rely on standard HTTP methods to perform various actions: + +1. **GET**: Fetch data. +2. **PUT**: Update or create data. +3. **DELETE**: Remove data. + +The behavior of an API depends on its HTTP method. For example, `/api/v1/orchestrator/jobs`: + +1. **GET**: Lists all jobs. +2. **PUT**: Submits a new job. +3. **DELETE**: Stops a job. + +### HTTP Response Codes + +Understanding HTTP response codes is crucial. A `2xx` series indicates a successful operation, `4xx` indicates client-side errors, and `5xx` points to server-side issues. Always refer to the message accompanying the code for more information. + +:::warning +Since `/api/v1/requester/*` was changed to `/api/v1/orchestrator/` in `v1.4.0`, all `/api/v1/requester/*` requests will result in 410 error. +::: + +## docs/api/agent.md + +# Agent + +The Bacalhau Agent APIs provide a convenient means to retrieve information about the Bacalhau node you are communicating with, whether it serves as the orchestrator or functions as a compute node. These APIs offer valuable insights into the node's health, capabilities, and deployed Bacalhau version. + +## Is Alive + +**Endpoint:** `GET /api/v1/agent/alive` + +This API can be used to determine if the agent is operational and responding as expected. + +**Response**: + +```json +{ + "Status": "OK" +} +``` + +## Deployed Bacalhau Version + +**Endpoint:** `GET /api/v1/agent/version` + +This API provides details about the Bacalhau version, including major and minor version numbers, Git version, Git commit, build date, and platform information. + +**Response**: + +```json +{ + "Major": "1", + "Minor": "1", + "GitVersion": "v1.1.0", + "GitCommit": "970e1a0f23c7eb739a097aa8212f7964434bcd97", + "BuildDate": "2023-09-25T07:59:00Z", + "GOOS": "linux", + "GOARCH": "amd64" +} +``` + +## Node Info + +**Endpoint:** `GET /api/v1/agent/node` + +This API provides detailed information about the node, including its peer ID and network addresses, node type (e.g., Compute), labels, compute node capabilities, and the deployed Bacalhau version. + +**Response**: + +```json +{ + "PeerInfo": { + "ID": "QmdZQ7ZbhnvWY1J12XYKGHApJ6aufKyLNSvf8jZBrBaAVL", + "Addrs": [ + "/ip4/35.245.245.245/tcp/1235" + ] + }, + "NodeType": "Compute", + "Labels": { + "Architecture": "amd64", + "Operating-System": "linux", + "git-lfs": "True", + "owner": "bacalhau" + }, + "ComputeNodeInfo": { + "ExecutionEngines": [ + "docker", + "wasm" + ], + "Publishers": [ + "noop", + "ipfs", + "s3" + ], + "StorageSources": [ + "repoclonelfs", + "s3", + "ipfs", + "urldownload", + "inline", + "repoclone" + ], + "MaxCapacity": { + "CPU": 12.8, + "Memory": 53931121049, + "Disk": 721417073459, + "GPU": 0 + }, + "AvailableCapacity": { + "CPU": 12.8, + "Memory": 53931121049, + "Disk": 721417073459, + "GPU": 0 + }, + "MaxJobRequirements": { + "CPU": 12.8, + "Memory": 53931121049, + "Disk": 721417073459, + "GPU": 0 + }, + "RunningExecutions": 0, + "EnqueuedExecutions": 0 + }, + "BacalhauVersion": { + "Major": "1", + "Minor": "1", + "GitVersion": "v1.1.0", + "GitCommit": "970e1a0f23c7eb739a097aa8212f7964434bcd97", + "BuildDate": "2023-09-25T07:59:00Z", + "GOOS": "linux", + "GOARCH": "amd64" + } +} +``` + +## docs/api/jobs.md + +# Jobs + +## Describe Job + +**Endpoint:** `GET /api/v1/orchestrator/jobs/:jobID` + +Retrieve the specification and current status of a particular job. + +**Parameters**: + +1. `jobID`: Identifier of the job to describe. This can be full ID of the job (e.g. `j-28c08f7f-6fb0-48ed-912d-a2cb6c3a4f3a`) or just the short format (e.g. `j-28c08f7f`) if it's unique. + +**Response**: + +**Job**: Specification for the requested [job](/specifications/job/README.md). + +**Example**: + +```bash +curl 127.0.0.1:1234/api/v1/orchestrator/jobs/j-d586d2cc-6fc9-42c4-9dd9-a78df1d7cd01 +{ + "Job": { + "ID": "j-d586d2cc-6fc9-42c4-9dd9-a78df1d7cd01", + "Name": "A sample job", + "Namespace": "default", + "Type": "batch", + "Priority": 0, + "Count": 1, + "Constraints": [], + "Meta": { + "bacalhau.org/requester.id": "QmdZQ7ZbhnvWY1J12XYKGHApJ6aufKyLNSvf8jZBrBaAVL", + "bacalhau.org/requester.publicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVRKPgCfY2fgfrkHkFjeWcqno+MDpmp8DgVaY672BqJl/dZFNU9lBg2P8Znh8OTtHPPBUBk566vU3KchjW7m3uK4OudXrYEfSfEPnCGmL6GuLiZjLf+eXGEez7qPaoYqo06gD8ROdD8VVse27E96LlrpD1xKshHhqQTxKoq1y6Rx4DpbkSt966BumovWJ70w+Nt9ZkPPydRCxVnyWS1khECFQxp5Ep3NbbKtxHNX5HeULzXN5q0EQO39UN6iBhiI34eZkH7PoAm3Vk5xns//FjTAvQw6wZUu8LwvZTaihs+upx2zZysq6CEBKoeNZqed9+Tf+qHow0P5pxmiu+or+DAgMBAAE=" + }, + "Labels": { + "env": "prod", + "name": "demo" + }, + "Tasks": [ + { + "Name": "main", + "Engine": { + "Type": "docker", + "Params": { + "Entrypoint": [ + "/bin/bash" + ], + "Image": "ubuntu:latest", + "Parameters": [ + "-c", + "echo hello world" + ] + } + }, + "Publisher": { + "Type": "", + "Params": {} + }, + "Env": {}, + "Meta": {}, + "InputSources": [], + "ResultPaths": [], + "Resources": { + "CPU": "", + "Memory": "", + "Disk": "", + "GPU": "" + }, + "Network": { + "Type": "None" + }, + "Timeouts": { + "ExecutionTimeout": 1800 + } + } + ], + "State": { + "StateType": "Completed", + "Message": "" + }, + "Version": 0, + "Revision": 2, + "CreateTime": 1695883778909107178, + "ModifyTime": 1695883779369191994 + } +} +``` + +## List Jobs + +**Endpoint:** `GET /api/v1/orchestrator/jobs` + +Retrieve a list of jobs. + +**Parameters**: + +1. `namespace`: Specify a namespace to filter the jobs. Use `*` to display jobs from all namespaces. +2. `labels`: Use label-based criteria to filter jobs. See [Label Filtering](/specifications/job/label.md) for usage details. +3. `limit`: Set the maximum number of jobs to return. Default is set to 10. +4. `next_token`: Utilize this parameter for pagination continuation. +5. `order_by`: Determine the ordering of jobs. Choose between `id` or `create_time` (default is `create_time`). +6. `reverse`: Opt to reverse the default order of displayed jobs. + +**Response**: + +- [**Jobs**](/specifications/job/README.md): List of matching jobs. +- **NextToken** `(string)`: Pagination token. + +**Example**: + +List jobs with limit set to 3: + +```bash +curl 127.0.0.1:1234/api/v1/orchestrator/jobs?limit=3 +{ + "Jobs": [ + { + "ID": "j-f6331e9a-727d-4175-8350-095b6b372408", + # ... + }, + { + "ID": "j-f7853204-a553-4991-a1a3-816b88fdbfc7", + # ... + }, + { + "ID": "j-f791ad14-af5b-4c26-8c93-15cc23dca811", + # ... + } + ], + "NextToken": "" +} +``` + +List with label filtering + +```bash +curl --get 127.0.0.1:1234/api/v1/orchestrator/jobs --data-urlencode 'labels=env in (prod,dev)' +``` + +## Create Job + +**Endpoint:** `PUT /api/v1/orchestrator/jobs` + +Submit a new job for execution. + +**Request Body**: + +- [**Job**](/docs/specifications/job/): JSON definition of the job. + +**Response**: + +1. **JobID** `(string)`: Identifier for the new job. +2. **EvaluationID** `(string)`: Identifier for the evaluation to schedule the job. +3. **Warnings** `(string[])`: Any warnings during job submission. + +**Example**: + +```bash +curl -X PUT \ + -H "Content-Type: application/json" \ + -d '{ + "Job": { + "Name": "test-job", + "Type": "batch", + "Count": 1, + "Labels": { + "foo": "bar", + "env": "dev" + }, + "Tasks": [ + { + "Name": "task1", + "Engine": { + "Type": "docker", + "Params": { + "Image": "ubuntu:latest", + "Entrypoint": [ + "echo", + "hello" + ] + } + }, + "Publisher": { + "Type": "noop" + } + } + ], + "CreateTime": 1234 + } + }' \ + 127.0.0.1:1234/api/v1/orchestrator/jobs + + { + "JobID": "j-9809ae4b-d4fa-47c6-823b-86c924e60604", + "EvaluationID": "5dac9fe0-2358-4ec7-bec9-6747dfa2b33e", + "Warnings": [ + "job create time is ignored when submitting a job" + ] +} +``` + +## Stop Job + +**Endpoint:** `DELETE /api/v1/orchestrator/jobs/:jobID` + +Terminate a specific job asynchronously. + +**Parameters**: + +1. `:jobID`: Identifier of the job to describe. This can be full ID of the job (e.g. `j-28c08f7f-6fb0-48ed-912d-a2cb6c3a4f3a`) or just the short format (e.g. `j-28c08f7f`) if it's unique. +2. `reason`: A message for debugging and traceability. + +**Response**: + +- **EvaluationID** `(string)`: Identifier for the evaluation to stop the job. + +**Example**: + +```bash +curl -X DELETE 127.0.0.1:1234/api/v1/orchestrator/jobs/j-50ee38d5-2812-4365-aceb-7b47b8f3858e +{ + "EvaluationID": "1316fdfe-97c4-43bc-8e0b-50a7f02f18bb" +} +``` + +## Job History + +**Endpoint:** `GET /api/v1/orchestrator/jobs/:jobID/history` + +Retrieve historical events for a specific job. + +**Parameters**: + +1. `since`: Timestamp to start (default: 0). +2. `event_type`: Filter by event type: `job`, `execution`, or `all` (default). +3. `execution_id`: Filter by execution ID. +4. `node_id`: Filter by node ID. +5. `limit`: Maximum events to return. +6. `next_token`: For pagination. + +**Response**: + +- **History**: List of matching historical events. +- **NextToken** `(string)\*\*: Pagination token. + +**Example**: + +List events for a specific execution + +```bash +curl 127.0.0.1:1234/api/v1/orchestrator/jobs/j-4cd1566f-84cb-4830-a96b-1349f5b54b1b/history\?execution_id=e-82f7813f-58da-4323-8261-886af35284c4 +{ + "NextToken": "", + "History": [ + { + "Type": "ExecutionLevel", + "JobID": "j-4cd1566f-84cb-4830-a96b-1349f5b54b1b", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "ExecutionID": "e-82f7813f-58da-4323-8261-886af35284c4", + "JobState": null, + "ExecutionState": { + "Previous": 1, + "New": 1 + }, + "NewRevision": 1, + "Comment": "", + "Time": "2023-09-28T07:23:01.352803607Z" + }, + { + "Type": "ExecutionLevel", + "JobID": "j-4cd1566f-84cb-4830-a96b-1349f5b54b1b", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "ExecutionID": "e-82f7813f-58da-4323-8261-886af35284c4", + "JobState": null, + "ExecutionState": { + "Previous": 1, + "New": 2 + }, + "NewRevision": 2, + "Comment": "", + "Time": "2023-09-28T07:23:01.446196661Z" + }, + { + "Type": "ExecutionLevel", + "JobID": "j-4cd1566f-84cb-4830-a96b-1349f5b54b1b", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "ExecutionID": "e-82f7813f-58da-4323-8261-886af35284c4", + "JobState": null, + "ExecutionState": { + "Previous": 2, + "New": 3 + }, + "NewRevision": 3, + "Comment": "", + "Time": "2023-09-28T07:23:01.604862596Z" + }, + { + "Type": "ExecutionLevel", + "JobID": "j-4cd1566f-84cb-4830-a96b-1349f5b54b1b", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "ExecutionID": "e-82f7813f-58da-4323-8261-886af35284c4", + "JobState": null, + "ExecutionState": { + "Previous": 3, + "New": 3 + }, + "NewRevision": 4, + "Comment": "", + "Time": "2023-09-28T07:23:01.611816334Z" + }, + { + "Type": "ExecutionLevel", + "JobID": "j-4cd1566f-84cb-4830-a96b-1349f5b54b1b", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "ExecutionID": "e-82f7813f-58da-4323-8261-886af35284c4", + "JobState": null, + "ExecutionState": { + "Previous": 3, + "New": 5 + }, + "NewRevision": 5, + "Comment": "", + "Time": "2023-09-28T07:23:01.705013737Z" + }, + { + "Type": "ExecutionLevel", + "JobID": "j-4cd1566f-84cb-4830-a96b-1349f5b54b1b", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "ExecutionID": "e-82f7813f-58da-4323-8261-886af35284c4", + "JobState": null, + "ExecutionState": { + "Previous": 5, + "New": 7 + }, + "NewRevision": 6, + "Comment": "", + "Time": "2023-09-28T07:23:02.483265228Z" + } + ] +} +``` + +## Job Executions + +**Endpoint:** `GET /api/v1/orchestrator/jobs/:jobID/executions` + +Retrieve all executions for a particular job. + +**Parameters**: + +1. `limit`: Maximum executions to return. +2. `next_token`: For pagination. +3. `order_by`: Order by `modify_time` (default), `create_time`, `id`, `state`. +4. `reverse`: Reverse the order. + +**Response**: + +- **Executions**: List of relevant executions. +- **NextToken** `(string)\*\*: Pagination token. + +**Example** + +List executions for a batch job with 3 executions (i.e. `count=3`) + +```bash +curl 127.0.0.1:1234/api/v1/orchestrator/jobs/j-412c34b4-da77-4a46-886c-76e03615a04e/executions +{ + "NextToken": "", + "Executions": [ + { + "ID": "e-cdd9fb3e-3183-4069-8bc9-679b6bcce4db", + "Namespace": "default", + "EvalID": "", + "Name": "", + "NodeID": "QmYgxZiySj3MRkwLSL4X2MF5F9f2PMhAE3LV49XkfNL1o3", + "JobID": "j-412c34b4-da77-4a46-886c-76e03615a04e", + "AllocatedResources": { + "Tasks": {} + }, + "DesiredState": { + "StateType": 2, + "Message": "execution completed" + }, + "ComputeState": { + "StateType": 7, + "Message": "" + }, + "PublishedResult": { + "Type": "", + "Params": null + }, + "RunOutput": { + "stdout": "hello world\n", + "stdouttruncated": false, + "stderr": "", + "stderrtruncated": false, + "exitCode": 0, + "runnerError": "" + }, + "PreviousExecution": "", + "NextExecution": "", + "FollowupEvalID": "", + "Revision": 6, + "CreateTime": 1695886565851709698, + "ModifyTime": 1695886566370340241 + }, + { + "ID": "e-836a4a50-f6cd-479f-a20d-2a12ff7fea64", + "Namespace": "default", + "EvalID": "", + "Name": "", + "NodeID": "QmXaXu9N5GNetatsvwnTfQqNtSeKAD6uCmarbh3LMRYAcF", + "JobID": "j-412c34b4-da77-4a46-886c-76e03615a04e", + "AllocatedResources": { + "Tasks": {} + }, + "DesiredState": { + "StateType": 2, + "Message": "execution completed" + }, + "ComputeState": { + "StateType": 7, + "Message": "" + }, + "PublishedResult": { + "Type": "", + "Params": null + }, + "RunOutput": { + "stdout": "hello world\n", + "stdouttruncated": false, + "stderr": "", + "stderrtruncated": false, + "exitCode": 0, + "runnerError": "" + }, + "PreviousExecution": "", + "NextExecution": "", + "FollowupEvalID": "", + "Revision": 6, + "CreateTime": 1695886565855906980, + "ModifyTime": 1695886566505560693 + }, + { + "ID": "e-b7e7adc7-b28c-4af0-9002-a7fdce303634", + "Namespace": "default", + "EvalID": "", + "Name": "", + "NodeID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "JobID": "j-412c34b4-da77-4a46-886c-76e03615a04e", + "AllocatedResources": { + "Tasks": {} + }, + "DesiredState": { + "StateType": 2, + "Message": "execution completed" + }, + "ComputeState": { + "StateType": 7, + "Message": "" + }, + "PublishedResult": { + "Type": "", + "Params": null + }, + "RunOutput": { + "stdout": "hello world\n", + "stdouttruncated": false, + "stderr": "", + "stderrtruncated": false, + "exitCode": 0, + "runnerError": "" + }, + "PreviousExecution": "", + "NextExecution": "", + "FollowupEvalID": "", + "Revision": 6, + "CreateTime": 1695886565853878926, + "ModifyTime": 1695886566583711985 + } + ] +} +``` + +## Job Results + +**Endpoint:** `GET /api/v1/orchestrator/jobs/:jobID/results` + +Fetch results published by all executions for the defined job. Applicable only for `batch` and `ops` jobs. + +**Response**: + +- **Results**: List of all published results. +- **NextToken** `(string)\*\*: Pagination token. + +**Example**: + +Result of a job that used the [S3 Publisher](/components/publishers/s3.md): + +```bash +curl 127.0.0.1:1234/api/v1/orchestrator/jobs/j-479d160f-f9ab-4e32-aec9-a45554126450/results +{ + "NextToken": "", + "Results": [ + { + "Type": "s3", + "Params": { + "Bucket": "bacalhau-test-datasets", + "Key": "my-prefix/my-result-file.tar.gz", + "Region": "eu-west-1", + "ChecksumSHA256": "qKAFvkLvSc+QqHE4hFiy4qVEmXhr423lQaRBfJecsgo=", + "VersionID": "bNS92VdFudVI7NPsXF51Qn.RPw31TKNG" + } + } + ] +} +``` + +## docs/api/nodes.md + +# Nodes + +## Describe Node + +**Endpoint:** `GET /api/v1/orchestrator/nodes/:nodeID` + +Retrieve information about a specific node. + +**Parameters**: + +1. `:nodeID`: Identifier of the node to describe. (e.g. `QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT`) + +**Response**: + +* **Node**: Detailed information about the requested node. + +**Example**: + +```bash +curl 127.0.0.1:1234/api/v1/orchestrator/nodes/QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT +{ + "Node": { + "PeerInfo": { + "ID": "QmUDAXvv31WPZ8U9CzuRTMn9iFGiopGE7rHiah1X8a6PkT", + "Addrs": [ + "/ip4/34.34.247.247/tcp/1235" + ] + }, + "NodeType": "Compute", + "Labels": { + "Architecture": "amd64", + "Operating-System": "linux", + "git-lfs": "True", + "owner": "bacalhau" + }, + "ComputeNodeInfo": { + "ExecutionEngines": [ + "docker", + "wasm" + ], + "Publishers": [ + "s3", + "noop", + "ipfs" + ], + "StorageSources": [ + "urldownload", + "inline", + "repoclone", + "repoclonelfs", + "s3", + "ipfs" + ], + "MaxCapacity": { + "CPU": 3.2, + "Memory": 12561049190, + "Disk": 582010404864, + "GPU": 1 + }, + "AvailableCapacity": { + "CPU": 3.2, + "Memory": 12561049190, + "Disk": 582010404864, + "GPU": 1 + }, + "MaxJobRequirements": { + "CPU": 3.2, + "Memory": 12561049190, + "Disk": 582010404864, + "GPU": 1 + }, + "RunningExecutions": 0, + "EnqueuedExecutions": 0 + }, + "BacalhauVersion": { + "Major": "1", + "Minor": "1", + "GitVersion": "v1.1.0", + "GitCommit": "970e1a0f23c7eb739a097aa8212f7964434bcd97", + "BuildDate": "2023-09-25T07:59:00Z", + "GOOS": "linux", + "GOARCH": "amd64" + } + } +} +``` + +## List Nodes + +**Endpoint:** `GET /api/v1/orchestrator/nodes` + +Retrieve a list of nodes. + +**Parameters**: + +1. `labels`: Use label-based criteria to filter nodes. See [Label Filtering](/guides/labels-and-constraints.md) for usage details. +2. `limit`: Set the maximum number of jobs to return. Default is set to 10. +3. `next_token`: Utilize this parameter for pagination continuation. +4. `order_by`: Determine the ordering of jobs. Choose between `id`, `type`, `available_cpu`, `available_memory`, `available_disk` or `available_gpu`. (default is `id`). +5. `reverse`: Opt to reverse the default order of displayed jobs. + +**Response**: + +* **Nodes**: List of matching nodes. +* **NextToken** `(string)`: Pagination token. + +**Example**: + +Find two linux nodes with most available Memory + +```bash +curl --get "127.0.0.1:1234/api/v1/orchestrator/nodes?limit=2&order_by=available_memory" --data-urlencode 'labels=Operating-System=linux' +{ + "NextToken": "", + "Nodes": [ + { + "PeerInfo": { + "ID": "QmcC3xifiiCuGGQ9rpvefUoary9tY65x2HaNxSdeMTvM9U", + "Addrs": [ + "/ip4/212.248.248.248/tcp/1235" + ] + }, + "NodeType": "Compute", + "Labels": { + "Architecture": "amd64", + "Operating-System": "linux", + "env": "prod", + "git-lfs": "False", + "name": "saturnia_len20" + }, + "ComputeNodeInfo": { + "ExecutionEngines": [ + "wasm", + "docker" + ], + "Publishers": [ + "noop", + "ipfs" + ], + "StorageSources": [ + "urldownload", + "inline", + "ipfs" + ], + "MaxCapacity": { + "CPU": 102, + "Memory": 858993459200, + "Disk": 562967789568, + "GPU": 2 + }, + "AvailableCapacity": { + "CPU": 102, + "Memory": 858993459200, + "Disk": 562967789568, + "GPU": 2 + }, + "MaxJobRequirements": { + "CPU": 96, + "Memory": 858993459200, + "Disk": 562967789568, + "GPU": 2 + }, + "RunningExecutions": 0, + "EnqueuedExecutions": 0 + }, + "BacalhauVersion": { + "Major": "1", + "Minor": "1", + "GitVersion": "v1.1.0", + "GitCommit": "970e1a0f23c7eb739a097aa8212f7964434bcd97", + "BuildDate": "2023-09-25T07:59:00Z", + "GOOS": "linux", + "GOARCH": "amd64" + } + }, + { + "PeerInfo": { + "ID": "QmXaXu9N5GNetatsvwnTfQqNtSeKAD6uCmarbh3LMRYAcF", + "Addrs": [ + "/ip4/35.245.245.245/tcp/1235" + ] + }, + "NodeType": "Compute", + "Labels": { + "Architecture": "amd64", + "Operating-System": "linux", + "git-lfs": "True", + "owner": "bacalhau" + }, + "ComputeNodeInfo": { + "ExecutionEngines": [ + "docker", + "wasm" + ], + "Publishers": [ + "noop", + "ipfs", + "s3" + ], + "StorageSources": [ + "s3", + "ipfs", + "urldownload", + "inline", + "repoclone", + "repoclonelfs" + ], + "MaxCapacity": { + "CPU": 12.8, + "Memory": 53931124326, + "Disk": 718749414195, + "GPU": 0 + }, + "AvailableCapacity": { + "CPU": 12.8, + "Memory": 53931124326, + "Disk": 718749414195, + "GPU": 0 + }, + "MaxJobRequirements": { + "CPU": 12.8, + "Memory": 53931124326, + "Disk": 718749414195, + "GPU": 0 + }, + "RunningExecutions": 0, + "EnqueuedExecutions": 0 + }, + "BacalhauVersion": { + "Major": "1", + "Minor": "1", + "GitVersion": "v1.1.0", + "GitCommit": "970e1a0f23c7eb739a097aa8212f7964434bcd97", + "BuildDate": "2023-09-25T07:59:00Z", + "GOOS": "linux", + "GOARCH": "amd64" + } + } + ] +} +``` + +# Bacalhau Concepts and Architecture + +## docs/README.md + +# What is Bacalhau? + +Bacalhau is an open-source distributed compute orchestration framework designed to bring compute to the data. Instead of moving large datasets around networks, Bacalhau makes it easy to execute jobs close to the data's location, drastically reducing latency and resource overhead. + +### Why It Matters + +* **Highly Distributed Architecture**: Deploy compute networks that span regions, cloud providers, and on-premises datacenters—all working together as a unified system. +* **Resilient Operation**: Compute nodes operate effectively even with intermittent connectivity to orchestrators, maintaining service availability during network partitioning or isolation. +* **Data Sovereignty & Security**: Process sensitive data within security boundaries without requiring it to leave your premises, enabling computation while preserving data control. +* **Cross-Organizational Computation**: Allow specific vetted computations on protected datasets without exposing raw data, breaking data silos between organizations. +* **Resource Efficiency**: By minimizing data transfers, Bacalhau saves bandwidth costs and ensures jobs run faster. +* **High Scalability**: As your data and processing needs grow, simply add more compute nodes on demand—whether on-premises or in the cloud. +* **Ease of Integration**: Bacalhau works with existing container images (Docker, etc.), meaning you can leverage your current workflows without major rewrites. + +### Key Features + +1. **Single Binary Simplicity**: Bacalhau is a single self-contained binary that functions as a client, orchestrator, and compute node—making it incredibly easy to set up and scale your distributed compute network. +2. **Modular Architecture**: Bacalhau's design supports multiple execution engines (Docker, WebAssembly) and storage providers through clean interfaces, allowing for easy extension. +3. **Orchestrator-Compute Model**: A dedicated orchestrator coordinates job scheduling, while compute nodes run tasks—all from the same binary with different runtime modes. +4. **Flexible Storage Integrations**: Bacalhau integrates with S3, HTTP/HTTPS, and other storage systems, letting you pull data from various sources. +5. **Multiple Job Types**: Support for batch, ops, daemon, and service job types to accommodate different workflow requirements. +6. **Declarative & Imperative Submissions**: Define jobs in a YAML spec (declarative) or pass all arguments via CLI (imperative). +7. **Publisher Support**: Output results to local volumes, S3, or other storage backends—so your artifacts are readily accessible. + +### Use Cases + +Bacalhau's distributed compute framework enables a wide range of applications across different industries: + +
+ +Log Processing + +Process logs efficiently at scale by running distributed jobs directly at the source, reducing costs by up to 93% in bandwidth usage while improving real-time insights. Bacalhau supports various job types for log management: + +* **Daemon Jobs**: Continuously run on each node for real-time log aggregation and compression +* **Service Jobs**: Handle ongoing processing tasks like log aggregation and issue detection +* **Batch Jobs**: Execute on-demand in-depth analysis of historical log data +* **Ops Jobs**: Enable real-time querying of live logs for urgent investigations + +
+ +
+ +Distributed Data Warehousing + +Query and analyze data across multiple regions by deploying compute tasks directly where your data resides. This approach reduces latency, enhances performance, and ensures compliance with data sovereignty regulations. Bacalhau integrates with modern data tools like Apache Iceberg and DuckDB to enable: + +* Reduced data movement with local query execution +* Improved query performance through compute-data proximity +* Seamless scalability with dynamic node addition +* Compliance with data regulations through region-specific processing + +
+ +
+ +Fleet Management + +Efficiently manage distributed nodes across multiple environments with capabilities for: + +* Remote execution of commands without requiring SSH access +* Automated software deployment and configuration updates +* Real-time metrics and logs collection +* Targeted job execution based on node attributes +* Rapid incident response and automated recovery + +
+ +
+ +Distributed Machine Learning + +Train and deploy ML models across a distributed compute fleet, optimizing performance while keeping data in place: + +* Distribute training across multiple machines to handle larger models +* Process data locally to minimize network transfers +* Deploy inference jobs near users for low-latency predictions +* Support federated learning for privacy-sensitive applications + +
+ +
+ +Edge Computing + +Run compute tasks closer to the data source for applications requiring low latency and minimal bandwidth usage: + +* Process and analyze sensor, IoT, or video data in real time +* Perform pre-processing and filtering at the edge before sending refined data +* Distribute tasks across available edge resources dynamically +* Ensure data privacy by keeping computations near the source + +
+ +### How It Works + +Bacalhau's architecture enables you to create compute networks that bridge traditional infrastructure boundaries. When you submit a job, Bacalhau intelligently determines which compute nodes are best positioned to process the data based on locality, availability, and your defined constraints—without requiring data movement or constant connectivity. + +This approach is particularly valuable for: + +* Organizations with data that cannot leave certain security boundaries +* Multi-region operations where data transfer is expensive or impractical +* Scenarios where multiple parties need to collaborate on analysis without sharing raw data +* Edge computing environments with intermittent connectivity + +### Community + +Bacalhau has a very friendly community and we are always happy to help you get started: + +* [Join the Slack Community](https://bit.ly/bacalhau-project-slack) Go to **#bacalhau** channel – it is the easiest way to engage with other members in the community and get help. +* [Contributing](/community/ways-to-contribute) – learn how to contribute to the Bacalhau project. + +## docs/components/engines/README.mdx + +# Engines + + + +## docs/components/engines/docker.md + +# Docker + +Docker Engine is one of the execution engines supported in Bacalhau. It allows users to run tasks inside Docker containers, offering an isolated and consistent environment for execution. Below are the parameters to configure the Docker Engine. + +## `Docker` Engine Parameters + +* **Image** `(string: )`: Specifies the Docker image to use for task execution. It should be an image that can be pulled by Docker. +* **Entrypoint** `(string[]: )`: Allows overriding the default entrypoint set in the Docker image. Each string in the array represents a segment of the entrypoint command. +* **Parameters** `(string[]: )`: Additional command-line arguments to be included in the container’s startup command, appended after the entrypoint. +* **EnvironmentVariables** `(string[]: )`: Sets environment variables within the Docker container during task execution. Each string should be formatted as `KEY=value`. +* **WorkingDirectory** `(string: )`: Sets the path inside the container where the task executes. If not specified, it defaults to the working directory defined in the Docker image. + +### Example + +Here’s an example of configuring the Docker Engine within a job or task using YAML: + +```yaml +Engine: + Type: "Docker" + Params: + Image: "ubuntu:20.04" + Entrypoint: + - "/bin/bash" + - "-c" + Parameters: + - "echo Hello, World!" + EnvironmentVariables: + - "MY_ENV_VAR=myvalue" + WorkingDirectory: "/app" +``` + +In this example, the task will be executed inside an Ubuntu 20.04 Docker container. The entrypoint is overridden to execute a bash shell that runs an echo command. An environment variable MY\_ENV\_VAR is set with the value myvalue, and the working directory inside the container is set to /app. + +## docs/components/engines/wasm.md + +# WebAssembly (WASM) + +The WASM Engine in Bacalhau allows tasks to be executed in a WebAssembly environment, offering compatibility and speed. This engine supports WASM and WASI (WebAssembly System Interface) jobs, making it highly adaptable for various use cases. Below are the parameters for configuring the WASM Engine. + +## `WASM` Engine Parameters + +- **EntryModule** `(`[`InputSource`](../../specifications/job/input-source.md) `: required)`: Specifies the WASM module that contains the start function or the main execution code of the task. The InputSource should point to the location of the WASM binary. +- **Entrypoint** `(string: )`: The name of the function within the EntryModule to execute. For WASI jobs, this should typically be `_start`. The entrypoint function should have zero parameters and zero results. +- **Parameters** `(string[]: )`: An array of strings containing arguments that will be supplied to the program as ARGV. This allows parameterized execution of the WASM task. +- **EnvironmentVariables** `(map[string]string: )`: A mapping of environment variable keys to their values, made available within the executing WASM environment. +- **ImportModules** `(`[`InputSource`](../../specifications/job/input-source.md)`[] : optional)`: An array of InputSources pointing to additional WASM modules. The exports from these modules will be available as imports to the EntryModule, enabling modular and reusable WASM code. + +## Examples + +### Using S3 bucket + +```yaml +Engine: +Type: 'WASM' +Params: + EntryModule: + Source: + Type: 's3' + Params: + Bucket: 'my-bucket' + Key: 'entry.wasm' + Entrypoint: '_start' + Parameters: + - '--option' + - 'value' + EnvironmentVariables: + VAR1: 'value1' + VAR2: 'value2' + ImportModules: + - Source: + Type: 'localDirectory' + Params: + Path: '/local/path/to/module.wasm' +``` + +In this example, the task is configured to run in a WASM environment. The EntryModule is fetched from an S3 bucket, the entrypoint is `_start`, and parameters and environment variables are passed into the WASM environment. Additionally, an ImportModule is loaded from a local directory, making its exports available to the EntryModule. + +## Using Local Provider + +```yaml +Engine: + Type: wasm + Params: + EntryModule: + Source: + Type: 'localDirectory' + Params: + SourcePath: '/app/main.wasm' + Target: '/main.wasm' + Entrypoint: 'start_app' + Parameters: + - '--assets' + - '/app/data' +InputSources: + - Source: + Type: 'urlDownload' + Params: + URL: 'https://example.com/data/file.txt' + Target: '/app/data' +``` + +In this example, the main WASM module is fetched from the local file system on the compute node. The entrypoint function is `start_app`, and it is given two arguments `"--assets"` and `"/app/data"`. Additionally, the WASM environment has access to `/app/data/file.txt` file downloaded from the given URL. + +:::info +Parameters are passed to the WASM module as command-line arguments. To access these arguments in your WASM module, you'll need to implement the appropriate code based on your programming language. For example, in Rust, you can retrieve the parameters as follows: + +```rust +use std::env; + +fn _start() { + let args: Vec = env::args().collect(); + // &args[0] is the program name, &args[1] is the first parameter +} +``` + +::: + +## docs/components/publishers/README.mdx + +# Publishers + + + +## docs/components/publishers/ipfs.md + +# IPFS + +The IPFS Publisher in Bacalhau amplifies the versatility of task result storage by integrating with the [InterPlanetary File System (IPFS)](https://ipfs.tech/). IPFS is a protocol and network designed to create a peer-to-peer method of storing and sharing hypermedia in a distributed file system. Bacalhau's seamless integration with IPFS ensures that users have a decentralized option for publishing their task results, enhancing accessibility and resilience while reducing dependence on a single point of failure. + +## `IPFS` Publisher Parameters + +For the IPFS publisher, no specific parameters need to be defined in the publisher specification. The user only needs to indicate the publisher type as IPFS, and Bacalhau handles the rest. Here is an example of how to set up an IPFS Publisher in a job specification. + +```yaml +Publisher: + Type: ipfs +``` + +## Published Result Specification + +Once the job is executed, the results are published to IPFS, and a unique CID (Content Identifier) is generated for each file or piece of data. This CID acts as an address to the file in the IPFS network and can be used to access the file globally. + +### Result Parameters + +- CID `(string)`: This is the unique content identifier generated by IPFS, which can be used to access the published content from anywhere in the world. Every data piece stored on IPFS has its unique CID. Here's a sample of how the published result might appear: + +```yaml +PublishedResult: + Type: ipfs + Params: + CID: 'QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco' +``` + +In this example, the task results will be stored in IPFS, and can be referenced and retrieved using the specified CID. This is indicative of Bacalhau's commitment to offering flexible, reliable, and decentralized options for result storage, catering to a diverse set of user needs and preferences. + +## docs/components/publishers/local.md + +# Local + +Bacalhau's Local Publisher provides a useful option for storing task results on the compute node, allowing for ease of access and retrieval for testing or trying our Bacalhau. + +:::warning +The Local Publisher should not be used for Production use as it is not a reliable storage option. For production use, we recommend using a more reliable option such as an S3-compatible storage service. +::: + +## Local Publisher Parameters + +The local publisher requires no specific parameters to be defined in the publisher specification. The user only needs to indicate the publisher type as "local", and Bacalhau handles the rest. Here is an example of how to set up a Local Publisher in a job specification. + +```yaml +Publisher: + Type: local +``` + +## Published Result Specification + +Once the job is executed, the results are published to the local compute node, and stored as compressed tar file, which can be accessed and retrieved over HTTP from the command line using the `get` command. TAhis will download and extract the contents for the user from the remove compute node. + +### Result Parameters + +**URL** `(string)`: This is the HTTP URL to the results of the computation, which is hosted on the compute node where it ran. Here's a sample of how the published result might appear: + +```yaml +PublishedResult: + Type: local + Params: + URL: "http://192.168.0.11:6001/e-c4b80d04-ff2b-49d6-9b99-d3a8e669a6bf.tgz" +``` + +In this example, the task results will be stored on the compute node, and can be referenced and retrieved using the specified URL. + +## Caveats + +1. By default the compute node will attempt to use a public address for the HTTP server delivering task output, but there is no guarantee that the compute node is accessible on that address. If the compute node is behind a NAT or firewall, the user may need to manually specify the address to use for the HTTP server in the `config.yaml` file. +2. There is no lifecycle management for the content stored on the compute node. The user is responsible for managing the content and ensuring that it is removed when no longer needed before the compute node runs out of disk space. +3. If the address/port of the compute node changes, then previously stored content will no longer be accessible. The user will need to manually update the address in the `config.yaml` file and re-publish the content to make it accessible again. + +## docs/components/publishers/s3.md + +# S3 + +Bacalhau's S3 Publisher provides users with a secure and efficient method to publish task results to any S3-compatible storage service. This publisher supports not just AWS S3, but other S3-compatible services offered by cloud providers like Google Cloud Storage and Azure Blob Storage, as well as open-source options like MinIO. The integration is designed to be highly flexible, ensuring users can choose the storage option that aligns with their needs, privacy preferences, and operational requirements. + +## Publisher Parameters + +1. **Bucket** `(string: )`: The name of the S3 bucket where the task results will be stored. +2. **Key** `(string: )`: The object key within the specified bucket where the task results will be stored. +3. **Endpoint** `(string: )`: The endpoint URL of the S3 service (useful for S3-compatible services). +4. **Region** `(string: )`: The region where the S3 bucket is located. + +## Published Result Spec + +Results published to S3 are stored as objects that can also be used as inputs to other Bacalhau jobs by using [S3 Input Source](../../specifications/job/input-source.md). The published result specification includes the following parameters: + +1. **Bucket**: Confirms the name of the bucket containing the stored results. +2. **Key**: Identifies the unique object key within the specified bucket. +3. **Region**: Notes the AWS region of the bucket. +4. **Endpoint**: Records the endpoint URL for S3-compatible storage services. +5. **VersionID**: The version ID of the stored object, enabling versioning support for retrieving specific versions of stored data. +6. **ChecksumSHA256**: The SHA-256 checksum of the stored object, providing a method to verify data integrity. + +## Dynamic Naming + +With the S3 Publisher in Bacalhau, you have the flexibility to use dynamic naming for the objects you publish to S3. This allows you to incorporate specific job and execution details into the object key, making it easier to trace, manage, and organize your published artifacts. + +Bacalhau supports the following dynamic placeholders that will be replaced with their actual values during the publishing process: + +1. `{executionID}`: Replaced with the specific execution ID. +2. `{jobID}`: Replaced with the ID of the job. +3. `{nodeID}`: Replaced with the ID of the node where the execution took place +4. `{date}`: Replaced with the current date in the format `YYYYMMDD`. +5. `{time}`: Replaced with the current time in the format `HHMMSS`. + +Additionally, if you are publishing an archive and the object key does not end with `.tar.gz`, it will be automatically appended. Conversely, if you're not archiving and the key doesn't end with a `/`, a trailing slash will be added. + +### Example + +Imagine you've specified the following object key pattern for publishing: + +```bash +results/{jobID}/{date}/{time}/ +``` + +Given a job with ID `abc123`, executed on `2023-09-26` at `14:05:30`, the published object key would be: + +```bash +results/abc123/20230926/140530/ +``` + +This dynamic naming feature offers a powerful way to create organized, intuitive naming conventions for your Bacalhau published objects in S3. + +## Examples + +### Declarative Examples + +Here's an example YAML configuration that outlines the process of using the S3 Publisher with Bacalhau: + +```yaml +Publisher: + Type: 's3' + Params: + Bucket: 'my-task-results' + Key: 'task123/result.tar.gz' + Endpoint: 'https://s3.us-west-2.amazonaws.com' +``` + +In this configuration, task results will be published to the specified S3 bucket and object key. If you're using an S3-compatible service, simply update the `Endpoint` parameter with the appropriate URL. + +The results will be compressed into a single object, and the published result specification will look like: + +```yaml +PublishedResult: + Type: 's3' + Params: + Bucket: 'my-task-results' + Key: 'task123/result.tar.gz' + Endpoint: 'https://s3.us-west-2.amazonaws.com' + Region: 'us-west-2' + ChecksumSHA256: '0x9a3a...' + VersionID: '3/L4kqtJlcpXroDTDmJ+rmDbwQaHWyOb...' +``` + +### Imperative Examples + +The Bacalhau command-line interface (CLI) provides an imperative approach to specify the S3 Publisher. Below are a few examples showcasing how to define an S3 publisher using CLI commands: + +1. **Basic Docker job writing to S3 with default configurations**: + + ```bash + bacalhau docker run -p s3://bucket/key ubuntu ... + ``` + + This command writes to the S3 bucket using default endpoint and region settings. + +2. **Docker job writing to S3 with a specific endpoint and region**: + + ```bash + bacalhau docker run -p s3://bucket/key,opt=endpoint=http://s3.example.com,opt=region=us-east-1 ubuntu ... + ``` + + This command specifies a unique endpoint and region for the S3 bucket. + +3. **Using naming placeholders**: + + ```bash + bacalhau docker run -p s3://bucket/result-{date}-{jobID} ubuntu ... + ``` + + Dynamic naming placeholders like `{date}` and `{jobID}` allow for organized naming structures, automatically replacing these placeholders with appropriate values upon execution. + +Remember to replace the placeholders like `bucket`, `key`, and other parameters with your specific values. These CLI commands offer a quick and customizable way to submit jobs and specify how the results should be published to S3. + +## Credential Requirements + +To support this publisher, no extra dependencies are necessary. However, valid AWS credentials are essential to sign the requests. The publisher employs the default credentials chain to retrieve credentials, primarily sourcing them from: + +1. **Environment variables**: AWS credentials can be specified using `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +2. **Credentials file**: The credentials file typically located at `~/.aws/credentials` can also be used to fetch the necessary AWS credentials. +3. **IAM Roles for Amazon EC2 Instances**: If you're running your tasks within an Amazon EC2 instance, IAM roles can be utilized to provide the necessary permissions and credentials. + +For a more detailed overview on AWS credential management and other ways to provide these credentials, please refer to the AWS official documentation on [standardized credentials](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html). + +## Required IAM Policies + +### Compute Nodes + +Compute nodes must run with the following policies to publish to S3: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:PutObject"], + "Resource": "arn:aws:s3:::BUCKET_NAME/*" + } + ] +} +``` + +- **PutObject Permissions:** The `s3:PutObject` permission is necessary to publish objects to the specified S3 bucket. +- **Resource:** The `Resource` field in the policy specifies the Amazon Resource Name (ARN) of the S3 bucket. The `/*` suffix is necessary to allow publishing with any prefix within the bucket or can be replaced with a prefix to limit the scope of the policy. You can also specify multiple resources in the policy to allow publishing to multiple buckets, or `*` to allow publishing to all buckets in the account. + +### Requester Node + +To enable downloading published results using `bacalhau job get ` command, the requester node must run with the following policies: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject"], + "Resource": "arn:aws:s3:::BUCKET_NAME/*" + } + ] +} +``` + +- **GetObject Permissions:** The `s3:GetObject` permission is necessary for the requester node to provide a pre-signed URL to download the published results by the client. + +For more information on IAM policies specific to Amazon S3 buckets and users, please refer to the [AWS documentation on Using IAM Policies with Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html). + +## docs/components/publishers/s3managed.md + +# Managed S3 + +Bacalhau's S3 Managed Publisher provides a secure method to publish job results to AWS S3 storage service without requiring compute nodes to have AWS credentials. Only the orchestrator requires access to the S3 bucket, significantly enhancing security in distributed environments. This publisher supports both AWS S3 and other S3-compatible services like MinIO. + +## Publisher Parameters +The S3 managed publisher requires no specific parameters to be defined in the job publisher specification. The user only needs to indicate the publisher type as `s3managed`: + +```yaml +Publisher: + Type: "s3managed" +``` + +## Orchestrator Configuration + +The S3 Managed Publisher must be configured in the orchestrator with the following parameters: + +1. **Bucket** `(string: )`: The name of the S3 bucket where job results will be stored. +2. **Key** `(string: )`: The object key within the specified bucket where the task results will be stored. +3. **Region** `(string: )`: The region where the S3 bucket is located. +4. **Endpoint** `(string: )`: The endpoint URL of the S3 service (for S3-compatible services). +5. **PreSignedURLExpiration** `(string: "1h")`: The duration for which the generated pre-signed URLs are valid. Optional, default duration is 1 hour. + +### YAML Configuration Example + +```yaml +Publishers: + Types: + S3Managed: + Bucket: "my-result-bucket" + Key: "bacalhau-managed-publisher" + Region: "us-east-1" + Endpoint: "https://custom-s3.example.com" + PreSignedURLExpiration: "1h" +``` + +### CLI Configuration Example + +```bash +bacalhau serve \ + -c Publishers.Types.S3Managed.Bucket="my-result-bucket" \ + -c Publishers.Types.S3Managed.Key="bacalhau-managed-publisher" \ + -c Publishers.Types.S3Managed.Region="us-east-1" \ + -c Publishers.Types.S3Managed.Endpoint="https://custom-s3.example.com" \ + -c Publishers.Types.S3Managed.PreSignedURLExpiration="1h" +``` + +## Required AWS Resources +### S3 Bucket + +To support this publisher, the S3 bucket specified in the orchestrator configuration must exist. The orchestrator will not attempt to create a bucket if it doesn't exist. + +### AWS Credentials + +The orchestrator needs to be given AWS credentials that grant both read and write access to the bucket. The orchestrator utilizes the default chain to retrieve them: +1. **Environment variables**: AWS credentials can be specified using `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +2. **Credentials file**: The credentials file typically located at `~/.aws/credentials`. +3. **IAM Roles for Amazon EC2 Instances**: If you're running your tasks within an Amazon EC2 instance, IAM roles can be utilized to provide the necessary permissions and credentials. + +For a more detailed overview on AWS credential management and other ways to provide these credentials, please refer to the AWS official documentation on [standardized credentials](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html). + +### IAM Policy +To use this publisher, only the orchestrator node needs permissions to access the bucket. The compute nodes and requester nodes do not need any additional permissions. + +#### Orchestrator Node +AWS credentials provided to the orchestrator node must grant the following permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:PutObject", + "s3:GetObject" + ], + "Resource": "arn:aws:s3:::my-result-bucket/bacalhau-managed-publisher/*" + } + ] +} +``` + +## Examples + +The job specification for using the S3 Managed Publisher is straightforward. Unlike the standard S3 publisher, no additional parameters are required in the job specification: + +```yaml +name: managed-publisher-job +type: batch +count: 1 +tasks: + - name: main + engine: + type: docker + params: + image: busybox:1.37.0 + entrypoint: + - /bin/sh + parameters: + - -c + - echo Hello, I was stored by Managed Publisher! + publisher: + type: s3managed +``` + +## Caveats +Currently, Bacalhau does not provide lifecycle management for the results stored in the bucket used by this publisher. The user is responsible for managing the content and ensuring it is removed when no longer needed to avoid additional costs. + +## docs/components/sources/README.mdx + +# Sources + + + +## docs/components/sources/ipfs.md + +# IPFS + +The IPFS Input Source enables users to easily integrate data hosted on the [InterPlanetary File System (IPFS)](https://ipfs.tech) into Bacalhau jobs. By specifying the Content Identifier (CID) of the desired IPFS file or directory, users can have the content fetched and made available in the task's execution environment, ensuring efficient and decentralized data access. + +## Source Specification Parameters + +Here are the parameters that you can define for an IPFS input source: + +- **CID** `(string: )`: The Content Identifier that uniquely pinpoints the file or directory on the IPFS network. Bacalhau retrieves the content associated with this CID for use in the task. + +### Example + +Below is an example of how to define an IPFS input source in YAML format. + +```yaml +InputSources: + - Source: + Type: 'ipfs' + Params: + CID: 'QmY7Yh4UquoXHLPFo2XbhXkhBvFoPwmQUSa92pxnxjY3fZ' + - Target: '/data' +``` + +In this configuration, the data associated with the specified CID is fetched from the IPFS network and made available in the task's environment at the "/data" path. + +### Example (Imperative/CLI) + +Utilizing IPFS as an input source in Bacalhau via the CLI is straightforward. Below are example commands that demonstrate how to define the IPFS input source: + +1. **Mount an IPFS CID to the default `/inputs` directory**: + + ```bash + bacalhau docker run -i ipfs://QmeZRGhe4PmjctYVSVHuEiA9oSXnqmYa4kQubSHgWbjv72 ubuntu ... + ``` + +2. **Mount an IPFS CID to a custom `/data` directory**: + + ```bash + bacalhau docker run -i ipfs://QmeZRGhe4PmjctYVSVHuEiA9oSXnqmYa4kQubSHgWbjv72:/data ubuntu ... + ``` + +These commands provide a seamless mechanism to fetch and mount data from IPFS directly into your task's execution environment using the Bacalhau CLI. + +## docs/components/sources/local.md + +# Local + +The `local` input source allows Bacalhau jobs to access files and directories already present on the compute node. This is especially useful for utilizing locally stored datasets, configuration files, logs, or other necessary resources without fetching them from a remote source, ensuring faster job initialization and execution. + +:::info +Note: The `local` provider can also be used with the name `localDirectory` and they are currently interchangeable. However, the `localDirectory` name is planned to be deprecated in future releases, so using `local` is recommended. +::: + +## Source Specification Parameters + +The `local` input source accepts the following parameters: + +* **SourcePath** `(string: )`: The absolute path on the compute node where the Local file or directory is located. Bacalhau will access this path to read data, and if permitted, write data as well. +* **ReadWrite** `(bool: false)`: A boolean flag that, when set to true, gives Bacalhau both read and write access to the specified Local file or directory. If set to false, Bacalhau will have read-only access. +* **CreateAs** `(string: "noCreate")`: A create strategy to be used when the `SourcePath` is empty. Possible values are: + * `"dir"`: Creates a directory at the specified path + * `"file"`: Creates a file at the specified path + * `"noCreate"`: Does not create anything if the path is empty + +:::info +Note: Bacalhau will only create a file or directory if `ReadWrite` is set to `true`. The `CreateAs` parameter has no effect when `ReadWrite` is `false`. +::: + +## Compute Node Configuration + +For security reasons, compute nodes must be explicitly configured to allow access to local file system. This requires configuring the `Compute.AllowListedLocalPaths` property with the paths that should be accessible and their permissions (`:rw` for read-write or `:ro` for read-only). + +For example: +```bash +bacalhau config set Compute.AllowListedLocalPaths=/etc/config:rw,/etc/*.conf:ro +``` + +If permission errors occur when using local paths, verify that the compute node has the appropriate path allowlisted in its configuration. + +### Examples (Jobs) + +Below are examples of defining a `local` input source in YAML format. + +#### Basic Read-Only Directory Mount + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/etc/config" + ReadWrite: false + Target: "/config" +``` + +This example configures Bacalhau to access the `/etc/config` directory on the compute node. The content of this directory becomes available at the `/config` path within the task's environment, with read-only access. + +#### Read-Write Access with Directory Creation + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/var/data/job_input" + ReadWrite: true + CreateAs: "dir" + Target: "/app/input" +``` + +This configuration allows read and write access to the local `/var/data/job_input` directory. If this directory doesn't exist, Bacalhau creates an empty one and makes it available at the `/app/input` path within the task's environment. + +#### File Mount With Automatic Creation + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/var/log/job.log" + ReadWrite: true + CreateAs: "file" + Target: "/app/logs/job.log" +``` + +This example mounts a specific file with read-write permissions and creates the file if it doesn't exist. + +#### File Mount Without Automatic Creation + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/var/log/job.log" + ReadWrite: true + CreateAs: "noCreate" + Target: "/app/logs/job.log" +``` + +Specifying `noCreate` explicitly (or omitting the `CreateAs` parameter) prevents Bacalhau from creating an empty file if it doesn't exist. In this case, the job will not execute on nodes that do not have an existing file at `/var/log/job.log`. + +### Example (Imperative/CLI) + +The Bacalhau CLI supports defining local input sources using the following imperative approach: + +1. **Mount readonly file to `/config`**: + + ```bash + bacalhau docker run -i file:///etc/config:/config ubuntu ... + ``` +2. **Mount writable file to default `/input`**: + + ```bash + bacalhau docker run -i file:///var/checkpoints:/myCheckpoints,opt=rw=true ubuntu ... + ``` + +## docs/components/sources/s3.md + +# S3 + +The S3 Input Source provides a seamless way to utilize data stored in S3 or any S3-compatible storage service as input for Bacalhau jobs. Users can specify files or entire prefixes stored in S3 buckets to be fetched and mounted directly into the task's execution environment. This capability ensures that your tasks have immediate access to the necessary data. + +## Source Specification Parameters + +Here are the parameters that you can define for an S3 input source: + +- **Bucket** `(string: )`: The name of the S3 bucket where the data is stored. +- **Key**`(string: )`: The object key or prefix within the bucket. Supports trailing wildcard for fetching multiple objects with matching prefixes. +- **Filter**`(string: )`: A regex pattern to filter the objects to be fetched. If a **Key** is also provided as a prefix, the filter pattern will be applied to object keys after the prefix. +- **Region**`(string: )`: The AWS region where the S3 bucket is hosted. +- **Endpoint**`(string: )`: The endpoint URL of the S3 or S3-compatible service. +- **VersionID**`(string: )`: The specific version of the object if versioning is enabled on the bucket. Only applicable when fetching a single object, and not a prefix or a pattern of objects. +- **ChecksumSHA256**`(string: )`: The SHA-256 checksum of the object to ensure data integrity. Only applicable when fetching a single object, and not a prefix or a pattern of objects. + +## Fetching Mechanism + +- **Single Object**: If the key points to a single object, that object is fetched and made available to the task. e.g. `s3://myBucket/dir/file-001.txt` +- **Prefix Matching**: If the key ends with a slash (/), it's interpreted as a prefix, and all objects with keys that start with that prefix are fetched, mimicking the behavior of fetching all objects in a "directory". e.g. `s3://myBucket/dir/` +- **Wildcard**: Supports a trailing wildcard (`*`). All objects with keys matching the prefix are fetched, facilitating batch processing or analysis of multiple files. e.g. `s3://myBucket/dir/log-2023-09-*` + +## Examples + +### Declarative Examples + +When using the Bacalhau YAML configuration to define the S3 input source, you can employ the following declarative approach. + +Below is an example of how to define an S3 input source in YAML format. + +```yaml +InputSources: + - Source: + Type: 's3' + Params: + Bucket: 'my-bucket' + Key: 'logs/' + Endpoint: 'https://s3.us-west-2.amazonaws.com' + ChecksumSHA256: 'e3b0c44b542b...' + - Target: '/data' +``` + +All objects that match the `logs/` pattern will be placed in the `/data` directory that is available in the task environment. + +### Imperative Examples + +When using the Bacalhau CLI to define the S3 input source, you can employ the following imperative approach. Below are example commands demonstrating how to define the S3 input source with various configurations: + +1. **Mount an S3 object to a specific path**: + + ```bash + bacalhau docker run -i src=s3://bucket/key,dst=/my/input/path ubuntu ... + ``` + +2. **Mount an S3 object with a specific endpoint and region**: + + ```bash + bacalhau docker run -i src=s3://bucket/key,dst=/my/input/path,opt=endpoint=http://s3.example.com,opt=region=us-east-1 ubuntu ... + ``` + +3. **Mount an S3 object using long flag names**: + + ```bash + bacalhau docker run --input source=s3://bucket/key,destination=/my/input/path ubuntu ... + ``` + +With these commands, you can seamlessly fetch and mount data from S3 into your task's execution environment directly through the CLI. + +## Credential Requirements + +To support this storage provider, no extra dependencies are necessary. However, valid AWS credentials are essential to sign the requests. The storage provider employs the default credentials chain to retrieve credentials, primarily sourcing them from: + +1. **Environment variables**: AWS credentials can be specified using `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +2. **Credentials file**: The credentials file typically located at `~/.aws/credentials` can also be used to fetch the necessary AWS credentials. +3. **IAM Roles for Amazon EC2 Instances**: If you're running your tasks within an Amazon EC2 instance, IAM roles can be utilized to provide the necessary permissions and credentials. + +For a more detailed overview on AWS credential management and other ways to provide these credentials, please refer to the AWS official documentation on [standardized credentials](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html). + +## Required IAM Policies + +Compute nodes must run with the following policies to support S3 input source: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "s3:ListBucket", + "Resource": "arn:aws:s3:::BUCKET_NAME" + }, + { + "Effect": "Allow", + "Action": ["s3:GetObject", "s3:GetObjectVersion"], + "Resource": "arn:aws:s3:::BUCKET_NAME/*" + } + ] +} +``` + +- **ListBucket Permission:** The `s3:ListBucket` permission is necessary to list the objects within the specified S3 bucket, allowing prefixes and wildcard expressions as the S3 Key for fetching. +- **GetObject and GetObjectVersion Permissions:** The `s3:GetObject` and `s3:GetObjectVersion` permissions enable the fetching of object data and its versions, respectively. +- **Resource:** The `Resource` field in the policy specifies the Amazon Resource Name (ARN) of the S3 bucket. The `/*` suffix is necessary to allow fetching of all objects within the bucket or can be replaced with a prefix to limit the scope of the policy. You can also specify multiple resources in the policy to allow fetching from multiple buckets, or `*` to allow fetching from all buckets in the account. + +For more information on IAM policies specific to Amazon S3 buckets and users, please refer to the [AWS documentation on Using IAM Policies with Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html). + +## S3-Compatible Services + +This feature isn't limited to AWS S3 - it supports all S3-compatible storage services. It means you can pull data from the likes of Google Cloud Storage and open-source solutions like MinIO, giving you the flexibility to utilize a diverse range of data sources. + +### Using Google Cloud Storage + +To seamlessly integrate Google Cloud Storage with Bacalhau, follow these steps: + +1. **Obtain HMAC Keys:** To access Google Cloud Storage, you'll need HMAC (Hash-based Message Authentication Code) keys. Refer to the [Google Cloud documentation](https://cloud.google.com/storage/docs/authentication/hmackeys) for detailed instructions on creating a service account and generating HMAC keys. +2. **Provide HMAC Keys to Bacalhau:** You can provide the HMAC keys to Bacalhau using the same options as AWS credentials, as documented in the [Credential Requirements](s3.md#credential-requirements) section. +3. **Configure the S3 Input Source:** In your S3 input source configuration, set the endpoint for Google Cloud Storage to `https://storage.googleapis.com`, as shown in the example below: + +```yaml +InputSources: + - Source: + Type: 's3' + Params: + Bucket: 'my-bucket' + Key: 'data/' + Endpoint: 'https://storage.googleapis.com' + - Target: '/data' +``` + +## docs/components/sources/url.md + +# URL + +The URL Input Source provides a straightforward method for Bacalhau jobs to access and incorporate data available over HTTP/HTTPS. By specifying a URL, users can ensure the required file is retrieved and prepared in the task's execution environment, enabling direct and efficient data utilization. + +## Source Specification Parameters + +Here are the parameters that you can define for a URL input source: + +- **URL** `(string: )`: The HTTP/HTTPS URL pointing directly to the file you want to retrieve. Only a single file can be downloaded per URL input source. + +:::info +Note: Bacalhau will attempt to infer the filename from the URL or the HTTP headers. This inferred filename is used when placing the file in the target directory. +::: + +### Example + +Below is an example of how to define a URL input source in YAML format. + +```yaml +InputSources: + - Source: + Type: 'urlDownload' + Params: + URL: 'https://example.com/data/file.txt' + Target: '/data' +``` + +In this setup, the file available at the specified URL is downloaded and stored in the "/data" directory within the task's environment. The actual path to the downloaded file will be "/data/file.txt". + +### Example (Imperative/CLI) + +When using the Bacalhau CLI to define the URL input source, you can employ the following imperative approach. Below are example commands demonstrating how to define the URL input source with various configurations: + +1. **Fetch data from an HTTP endpoint**: This command demonstrates fetching a file from a specific HTTP URL. The file will be mounted in the default `/inputs` directory. + + ```bash + bacalhau docker run -i http://example.com/data.txt ubuntu -- cat /inputs/data.txt + ``` + +2. **Fetch data from an HTTPS endpoint and specify mount path**: This example fetches a file from a secure URL and mounts it to a custom directory path. + + ```bash + bacalhau docker run -i https://secure.example.com/data.txt:/data ubuntu -- cat /data/data.txt + ``` + + In this case, the file "data.txt" is downloaded and placed in the "/data" directory, resulting in the path "/data/data.txt" within the container. + +## docs/overview/architecture.md + +# Architecture + +Bacalhau employs a distributed, node-based architecture that brings compute operations closer to data. Built around a single self-contained binary that serves multiple roles, Bacalhau makes it remarkably simple to deploy and scale a distributed compute network. + +## High-Level Overview + +1. **User Submits a Job**: The user, through the Bacalhau CLI or API, sends a job definition to the Orchestrator. Jobs can be submitted in two ways: + * **Imperative**: `bacalhau docker run ...` with command-line arguments + * **Declarative**: `bacalhau job run ` using a YAML specification file +2. **Orchestrator Schedules Tasks**: Based on resource availability, data location, and job requirements, the Orchestrator assigns tasks to Compute Nodes. +3. **Compute Nodes Execute Tasks**: Each Compute Node pulls the necessary image(s), mounts or fetches input data (local, S3, etc.), and runs the task in an isolated environment. +4. **Results Publication**: Once the task completes, outputs are published to configured storage. The Orchestrator updates the job's status accordingly. + +All of these components run from the same Bacalhau binary, just in different modes, making deployment remarkably simple. + +## Core Components + +### Orchestrators + +* **Core Role**: Receives job submissions, maintains job state, and coordinates scheduling +* **NATS Server**: Acts as a messaging infrastructure hub +* **Communication**: Broadcasts scheduling decisions and listens for status updates + +### Compute Nodes + +* **Primary Function**: Execute containerized or WASM-based workloads +* **Resource Management**: Advertise available CPU, memory, GPU, and storage capacity +* **Data Handling**: Fetch or mount input data from various sources and publish results +* **Isolation**: Run tasks in Docker containers or WASM environments + +## Modular Architecture + +Bacalhau features a pluggable architecture with well-defined interfaces that enable extension without modifying core code: + +* **Execution Engine Interface**: Currently supports Docker and WebAssembly (WASM) workloads, with a clean API for adding new execution environments +* **Storage Provider Interface**: Plug in various storage backends (S3, HTTP/HTTPS, local paths, IPFS) for both input and output handling +* **Publisher Interface**: Easily add new ways to publish and share computation results + +## Data-Centric Design + +A key differentiator of Bacalhau is its data-centric approach: + +* **Data Locality**: The system intelligently schedules jobs on nodes with local access to data +* **Minimal Transfer**: Moves computation to data rather than moving large datasets +* **Data Sovereignty**: Process sensitive data within security boundaries without requiring it to leave premises +* **Cross-Organizational Computation**: Enable collaborative analysis on protected datasets without exposing raw data + +## Network Resilience + +Bacalhau's architecture is designed to maintain operations even during network disruptions: + +* **Event-Driven State**: All system events are stored in local ledgers and shared during normal operation +* **Independent Operation**: Nodes continue functioning during network outages +* **State Reconciliation**: When network partitions heal, nodes exchange missed events +* **Local Decision Making**: Orchestrators can make scheduling decisions with available information + +## Deployment Models + +Bacalhau's single-binary architecture supports flexible deployment configurations: + +* **Single Node**: Run orchestrator and compute services on one machine (ideal for development) +* **Regional Cluster**: Distributed compute nodes within a single geographic region +* **Global Cluster**: Compute network spanning multiple regions and data centers + +## Security Considerations + +* **Execution Environments**: Tasks run in Docker containers or WASM environments with appropriate resource limits +* **Access Control**: Each node requires valid credentials for accessing private data sources +* **Data Boundaries**: Computation happens within defined security perimeters, protecting sensitive information + +## Observability + +* **Metrics & Logging**: Each node can expose metrics on resource usage and job performance +* **Event Tracking**: Orchestrators record job lifecycle events for monitoring and auditing + +## docs/overview/key-concepts.md + +# Key Concepts + +Bacalhau is built around a few core ideas and terminologies. If you're new to Bacalhau, here's what you need to know: + +## Distributed Compute Orchestration + +Bacalhau coordinates computing workloads across a network of machines, intelligently matching jobs to resources. + +* Bacalhau acts as a dispatcher: You submit jobs (e.g., container workloads), and it finds the best node to run them based on available resources, data location, and constraints. + +## Bring the Compute to the Data + +Instead of moving data to compute, Bacalhau moves compute to where data lives, reducing network overhead and improving efficiency. + +* Traditionally, big data solutions shuffle large datasets across networks to a central compute cluster. +* Bacalhau inverts this approach: it places compute tasks where the data already resides—whether in local storage, an S3 bucket, or other storage providers—reducing unnecessary data movement. + +## Jobs & Executions + +Bacalhau organizes work in a hierarchy that enables efficient resource allocation and parallelization. + +* A **Job** defines the overall workflow (e.g., "run a Docker image with these arguments"). +* A job can be broken into multiple **Executions** that run in parallel across different compute nodes. +* Bacalhau optimizes these executions based on data locality and available resources. + +## Job Types + +Bacalhau supports various execution patterns to accommodate different workload requirements: + +* **Batch Jobs**: One-time execution of a workload, typically for data processing tasks that run to completion. +* **Ops Jobs**: Administrative or operational tasks, often for system maintenance or monitoring. +* **Daemon Jobs**: Long-running background processes that perform ongoing work. +* **Service Jobs**: Web services or APIs that need to remain available and respond to requests. + +## Node Types + +The Bacalhau network consists of specialized components, each with specific responsibilities: + +* **Orchestrator Node**: Receives job submissions, schedules executions, and monitors state. Started with `bacalhau serve --orchestrator`. +* **Compute Node**: Executes workloads locally, typically requiring Docker or another runtime. Started with `bacalhau serve --compute`. +* **Hybrid Node**: Serves both roles at once—often used for local dev or small setups. Started with `bacalhau serve --orchestrator --compute`. + +## Execution Engines + +Bacalhau runs your code through pluggable runtime environments: + +* Bacalhau supports multiple execution engines through its modular architecture: + * **Docker**: For container-based workloads + * **WebAssembly (WASM)**: For lightweight, sandboxed execution +* The framework is designed to accommodate additional engines as needed. + +## Storage Providers + +Bacalhau can access data from various sources through a clean, extensible interface: + +* Bacalhau can mount data from various sources through its flexible storage provider interface: + * S3-compatible storage + * HTTP/HTTPS URLs + * Local filesystems + * IPFS + * And more via storage provider plugins + +## Publisher + +After execution, Bacalhau ensures your results are accessible where you need them: + +* After a job finishes, its results can be published to a specific backend—like local disk, S3 or IPFS—so they're easy to retrieve. + +## Communication Layer + +A reliable messaging system allows Bacalhau components to coordinate effectively: + +* Bacalhau uses NATS.io as its communication backbone: + * Orchestrators act as NATS servers + * Compute nodes connect as NATS clients + * This provides reliable, scalable messaging between components + +# Additional Bacalhau Documentation + +## content/use-cases/integrations/duckdb.mdx + +# DuckDB + +## Overview + +[DuckDB](https://duckdb.org/) is a high-performance, in-process analytical database designed for fast SQL queries on structured data. However, it operates as a **single-instance database**, limiting its ability to efficiently handle large-scale datasets across multiple machines. + +Bacalhau extends DuckDB by enabling: + +- **Distributed query execution** across multiple compute nodes +- **Partitioning of large datasets** to optimize processing +- **Parallel SQL execution** for improved performance +- **Querying data in-place** without needing to centralize it + +This allows users to **scale DuckDB beyond a single node**, making it ideal for distributed data processing and large-scale analytics. + +## Limitations of DuckDB (Before Bacalhau) + +While DuckDB is powerful for analytical workloads, it has inherent limitations: + +- **Single-instance execution**: DuckDB is designed to run on a single machine, limiting scalability. +- **No built-in parallelism**: Queries run on a single node, unable to take advantage of multiple distributed compute resources. +- **Inefficient large-scale processing**: Large datasets require manual partitioning and splitting across multiple queries. + +## How Bacalhau Extends DuckDB + +To address these limitations, Bacalhau integrates with DuckDB and provides: + +1. **Partitioned Query Execution**: Bacalhau distributes queries across nodes, automatically handling partitioning. +2. **Scalable Data Processing**: Users can run SQL queries across large datasets without moving data to a centralized warehouse. +3. **Custom Partitioning Functions**: Bacalhau introduces **User-Defined Functions (UDFs)** that handle partitioning logic natively within DuckDB. + +## Partitioning Functions + +Bacalhau introduces three User Defined Functions (UDF) for partitioning to improve DuckDB's scalability: + +### 1. Hash-Based Partitioning + +Partitions datasets based on a hash function applied to file paths. + +```sql +SET VARIABLE my_files = ( + SELECT LIST(file) FROM partition_by_hash('s3://bucket/*.parquet') +); +SELECT * FROM read_parquet(getvariable('my_files')); +``` + +### 2. Regex-Based Partitioning + +Partitions files based on regex pattern matching, useful for structured filenames. + +```sql +SET VARIABLE my_files = ( + SELECT LIST(file) FROM partition_by_regex( + 's3://bucket/data_*.parquet', + 'data_([A-Z]).*' + ) +); +SELECT * FROM read_parquet(getvariable('my_files')); +``` + +### 3. Date-Based Partitioning + +Partitions data based on date patterns in filenames, allowing for time-series data queries. + +```sql +SET VARIABLE my_files = ( + SELECT LIST(file) FROM partition_by_date( + 's3://bucket/logs/*.parquet', + 'logs_(\d{4})(\d{2})(\d{2})\.parquet', + 'month' + ) +); +SELECT * FROM read_parquet(getvariable('my_files')); +``` + +## Key Use Cases + +### 1. Distributed Data Processing + +- Run SQL queries across multiple machines without data movement. +- Leverage **Bacalhau’s job orchestration** to distribute and parallelize workloads. + +### 2. Multi-Region Data Warehousing + +- Execute **scatter-gather queries** where data resides, avoiding centralization bottlenecks. +- Process only necessary data partitions instead of querying the entire dataset. + +### 3. Scalable Analytics + +- Perform **interactive and batch analytics** on large-scale datasets. +- Use partition-aware querying to speed up data retrieval and reduce costs. + +## Usage Examples + +### 1. Run a Simple Query + +```bash +bacalhau docker run ghcr.io/bacalhau-project/duckdb \ + "SELECT 'Hello Bacalhau!' as greeting;" +``` + +```yaml +Name: Simple Query Example +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/duckdb + Parameters: + - -c + - "SELECT 42 AS answer;" +``` + +### 2. Process Partitioned Log Files + +```yaml +Name: Process Logs +Type: batch +Count: 3 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/duckdb + Parameters: + - -c + - > + SET VARIABLE my_logs = ( + SELECT LIST(file) FROM partition_by_date( + 's3://my-bucket/logs/*.parquet', + 'logs_(\d{4})(\d{2})(\d{2})\.parquet', + 'month' + ) + ); + SELECT * FROM read_parquet(getvariable('my_logs')); +``` + +## Why Use Bacalhau with DuckDB? + +| Feature | Benefit | +| ------------------------------- | ------------------------------------------------------------------- | +| **Distributed Query Execution** | Run queries in parallel across multiple compute nodes. | +| **Automatic Partitioning** | Use built-in UDFs to efficiently split workloads. | +| **No Data Movement** | Process data where it resides, avoiding costly transfers. | +| **Scalable Analytics** | Execute SQL queries efficiently across large datasets. | +| **Stateless Compute** | Run on-demand queries without needing a persistent database server. | + +## Next Steps + +To get started with Bacalhau and DuckDB: + +1. **Deploy Bacalhau nodes** near the data sources. +2. **Submit distributed queries** using Bacalhau’s CLI or YAML job definitions. +3. **Leverage partitioning** to scale query execution efficiently. + +By combining Bacalhau’s distributed execution with DuckDB’s high-performance analytics, users can achieve **scalable, efficient, and cost-effective SQL processing** across large and distributed datasets. + +## content/use-cases/integrations/lilypad.md + +# Lilypad + +## Overview + +Lilypad provides a decentralized compute infrastructure, leveraging Bacalhau to distribute and execute compute jobs efficiently. It is designed for use cases such as AI inference, machine learning training, decentralized science (DeSci), and more. Lilypad collaborates with decentralized storage and compute networks to enable transparent and scalable computational resources. + +## Key Features + +- **Decentralized Compute** – Enables trustless, verifiable execution of workloads across thousands of nodes. +- **Multi-Chain Support** – Expanding support for various blockchain ecosystems. +- **Partitioned & Distributed Processing** – Uses Bacalhau’s orchestration to split workloads efficiently. +- **AI & Web3 Applications** – Supports AI, ML, and other high-performance workloads without requiring centralized infrastructure. + +For more details, visit [Lilypad’s documentation](https://lilypad.tech/). + +## content/use-cases/use-cases/README.mdx + +# Use Cases + +Bacalhau provides powerful distributed compute capabilities that can be applied across various domains and scenarios. Explore the examples below to discover how Bacalhau can address your specific needs. + +Below is a complete list of all available use case documentation: + + + +## content/use-cases/use-cases/distributed-data-warehousing.mdx + +# Distributed Data Warehousing + +## Overview + +Traditional centralized data warehouses often struggle with high data transfer costs, increased latency, and compliance challenges. By adopting a distributed data warehousing approach, organizations can process and analyze data closer to its source, ensuring better performance, regulatory adherence, and cost efficiency. + +## Challenges in Centralized Data Warehousing + +- **High Data Transfer Costs** – Moving large datasets to a central location incurs significant storage and networking expenses. +- **Latency Issues** – Centralized processing introduces delays, making real-time insights difficult. +- **Scalability Constraints** – As data volumes grow, expanding a monolithic warehouse becomes increasingly complex and costly. +- **Compliance and Data Sovereignty** – Regulations like GDPR and HIPAA often require data to remain within specific regions, making centralized storage and processing non-compliant. + +## Bacalhau's Approach to Distributed Data Warehousing + +Bacalhau simplifies distributed data warehousing by enabling compute to run near the data, reducing unnecessary transfers, ensuring compliance, and improving query performance. Compute nodes can be deployed across different regions and data centers, ensuring each location processes its own data efficiently. This approach allows for: + +- **Reduced Data Movement** – Queries run locally, eliminating the need to transfer large datasets across networks. +- **Improved Query Performance** – Compute happens closer to the data, leading to lower latency and faster insights. +- **Seamless Scalability** – New compute nodes can be added dynamically as data volumes grow. +- **Compliance with Data Regulations** – Keeping data within its originating region helps organizations comply with regulatory requirements while maintaining full control over their datasets. + +## Scatter and Gather Queries + +Bacalhau enables efficient **scatter and gather** queries, a key technique in distributed data warehousing: + +1. **Scatter Phase** – A query is sent to multiple nodes located near different datasets. +2. **Local Processing** – Each node processes the query on its local data, significantly reducing data size before transmission. +3. **Gather Phase** – The processed results from all nodes are collected and aggregated into the final output. + +This approach optimizes performance, ensures compliance by keeping data in its designated region, and reduces network overhead. + +## Integration with Modern Data Tools + +Bacalhau integrates seamlessly with modern data tools like **Apache Iceberg** and **DuckDB**, enhancing its distributed processing capabilities: + +- **Apache Iceberg** – A high-performance table format for large analytic datasets, enabling schema evolution, partitioning, and efficient data access across distributed environments. +- **DuckDB** – An in-process analytical database optimized for executing complex queries efficiently. DuckDB's compatibility with Iceberg tables allows for fast, distributed query execution while keeping data in place. + +Together, these tools provide a powerful foundation for decentralized data warehousing while maintaining regulatory compliance. + +## Next Steps + +To implement a distributed data warehouse using Bacalhau: + +1. **Deploy Compute Nodes** – Set up nodes in locations where your data is generated or stored to ensure compliance with data residency requirements. +2. **Configure Data Storage** – Use Iceberg for managing structured datasets efficiently while maintaining data governance policies. +3. **Execute Distributed Queries** – Utilize DuckDB to process analytics directly on distributed data sources, keeping data within compliance boundaries. + +By leveraging distributed data warehousing with Bacalhau, organizations can achieve real-time insights while optimizing costs, scalability, and regulatory compliance. + +## content/use-cases/use-cases/distributed-machine-learning.mdx + +# Distributed Machine Learning + +## Overview + +Scaling machine learning workloads across multiple regions and compute environments is a complex task. Traditional approaches require transferring large datasets to a central location for processing, leading to high costs and inefficiencies. Bacalhau simplifies distributed machine learning by allowing model training, inference, and data processing to occur where the data resides, leveraging distributed compute resources to improve efficiency and scalability. + +## Key Capabilities + +### 1. Distributed Training & Parallel Execution + +Bacalhau enables ML workloads to be split across multiple nodes, allowing for faster and more efficient training by parallelizing computations. + +- Distribute training across multiple machines to handle larger models and datasets. +- Process subsets of data locally and aggregate results, reducing the need for excessive data transfer. +- Enable federated learning approaches where training occurs on edge nodes without centralizing data. + +### 2. Optimized Data Movement & Local Processing + +Moving large datasets for ML training is expensive and slow. Bacalhau optimizes data locality by running computations closer to the data source. + +- Perform feature extraction and preprocessing on data where it resides. +- Train models across multiple data centers without requiring full dataset replication. +- Minimize network costs by aggregating model updates instead of raw data. + +### 3. Scalable Model Deployment & Inference + +Bacalhau simplifies deploying ML models across a distributed fleet for real-time or batch inference. + +- Deploy inference jobs across multiple regions to serve predictions with low latency. +- Run model evaluation and A/B testing across different compute clusters. +- Dynamically allocate compute resources based on demand. + +### 4. Federated Learning & Privacy-Preserving ML + +For privacy-sensitive applications, Bacalhau supports federated learning by keeping data decentralized while training global models. + +- Train models on distributed data sources without exposing raw data. +- Aggregate model updates instead of datasets, preserving data privacy. +- Improve compliance with data sovereignty regulations while enabling large-scale ML training. + +## Example Use Cases + +- **Training a deep learning model across multiple GPUs in different regions.** +- **Running distributed hyperparameter tuning without moving raw datasets.** +- **Deploying inference jobs near users for low-latency predictions.** +- **Aggregating model updates from different locations in federated learning scenarios.** +- **Processing large-scale unstructured data (e.g., video, images, logs) directly where it is stored.** + +## Next Steps + +To get started with distributed ML using Bacalhau: + +1. **Deploy compute nodes** where training and inference workloads need to run. +2. **Schedule distributed training jobs** to parallelize computation and optimize data movement. +3. **Deploy trained models** across a distributed fleet for scalable, low-latency inference. + +By leveraging Bacalhau's distributed execution model, machine learning workloads can scale efficiently, reduce infrastructure costs, and enable privacy-aware training while optimizing resource usage across multiple regions. + +## content/use-cases/use-cases/edge-computing.md + +# Edge Computing + +## Overview + +Processing data at the edge—closer to where it is generated—is critical for applications requiring low latency, real-time decision-making, or constrained network environments. Traditional cloud-based models struggle with high data transfer costs, latency issues, and dependency on centralized infrastructure. Bacalhau enables seamless edge computing by allowing workloads to execute directly on edge nodes, reducing reliance on centralized processing while optimizing efficiency and scalability. + +## Key Capabilities + +### 1. Low-Latency Processing at the Edge + +Bacalhau enables compute tasks to be executed directly on edge devices, reducing round-trip times to cloud-based systems. + +- Process and analyze sensor, IoT, or video data in real time. +- Enable AI inference directly on edge nodes without cloud dependency. +- Reduce response times for critical applications like industrial automation, autonomous vehicles, and healthcare monitoring. + +### 2. Efficient Data Processing with Minimal Bandwidth Usage + +Transmitting large volumes of raw data to centralized locations for processing can be expensive and slow. Bacalhau optimizes this by allowing computations to happen locally before only sending necessary results. + +- Perform pre-processing, filtering, and aggregation at the edge before sending refined data to the cloud. +- Reduce network bandwidth usage by executing compute jobs locally. +- Improve system reliability by ensuring tasks continue running even with intermittent connectivity. + +### 3. Scalable Distributed Execution Across Edge Nodes + +Bacalhau dynamically schedules workloads across a distributed network of edge nodes, ensuring optimal resource utilization. + +- Distribute tasks across available edge compute resources dynamically. +- Balance workloads between cloud, edge, and on-premise environments. +- Automatically failover to alternative nodes in case of network or hardware failures. + +### 4. Secure & Resilient Edge Deployments + +Edge environments often operate in remote or untrusted locations. Bacalhau provides a robust execution framework that ensures secure and reliable compute at the edge. + +- Execute tasks without requiring persistent network connections to a central controller. +- Ensure data privacy by keeping computations near the data source. +- Maintain high availability through decentralized execution and fault tolerance. + +## Example Use Cases + +- **Processing IoT sensor data at the edge to reduce cloud storage costs.** +- **Running AI inference on edge devices for real-time image and video analysis.** +- **Aggregating and analyzing telemetry data from industrial equipment.** +- **Enabling remote monitoring and diagnostics for healthcare and smart cities.** +- **Reducing network congestion by filtering and compressing data before transmission.** + +## Next Steps + +To implement edge computing with Bacalhau: + +1. **Deploy Bacalhau nodes** on edge devices, IoT gateways, or remote compute clusters. +2. **Define job execution policies** to run compute tasks on the most suitable edge nodes. +3. **Integrate with cloud and on-premise systems** to balance workload distribution and optimize efficiency. + +By leveraging Bacalhau’s distributed compute model, organizations can bring processing power closer to the data source, improving performance, reducing operational costs, and enabling real-time insights across edge environments. + +## content/use-cases/use-cases/fleet-management.mdx + +# Fleet Management + +## Overview + +Managing a distributed fleet of compute nodes across multiple regions and environments comes with significant complexity, requiring efficient remote execution, monitoring, automation, and rapid incident response. Keeping systems up to date, collecting real-time metrics, and executing large-scale operations often involves extensive manual work and complex tooling. Bacalhau simplifies fleet management by providing a seamless way to run commands, update configurations, gather system metrics, and respond to incidents in real time across all nodes in a network. + +## Key Capabilities + +### 1. Remote Execution + +Bacalhau allows you to execute commands across your entire fleet or on specific subsets of nodes, reducing the need for manual intervention and enabling real-time operational control. + +- Run scripts, commands, or jobs across a distributed fleet without requiring SSH access. +- Execute commands on nodes dynamically selected based on their attributes (e.g., region, hardware type, role). +- Reduce the complexity of managing compute nodes across cloud, on-premise, and hybrid environments. + +### 2. Software Deployment & Configuration Updates + +Keeping software and configurations up to date across a large number of distributed nodes is challenging. Bacalhau simplifies this by allowing seamless deployment of updates. + +- Distribute software updates efficiently without requiring centralized coordination. +- Deploy configuration changes dynamically based on workload needs. +- Ensure all nodes remain in sync with the latest versions of necessary tools and dependencies. + +### 3. Real-Time Metrics & Logs Collection + +Monitoring the health and performance of a large fleet requires collecting logs and metrics in real time. Bacalhau provides an efficient way to access this data across all nodes. + +- Execute lightweight jobs to collect system statistics, disk usage, or network health metrics. +- Fetch logs from a specific subset of nodes dynamically for debugging and analysis. +- Reduce reliance on heavyweight monitoring tools by executing targeted status checks when needed. + +### 4. Targeted & Ops Jobs Execution + +Bacalhau supports **Ops Jobs**, a type of execution designed specifically for fleet-wide operations. These jobs run on all nodes that match a given selection criteria, making it easy to execute large-scale fleet management tasks. + +- Run security audits, cleanup jobs, or health checks across all nodes. +- Query or modify system state at scale without impacting ongoing workloads. +- Filter job execution by node attributes (e.g., run a command only on GPU nodes or ARM-based instances). + +### 5. Incident Response & Automated Recovery + +When failures or security incidents occur, Bacalhau enables rapid fleet-wide response and mitigation through distributed execution. + +- **Live Investigation** – Execute on-the-fly queries to collect logs and diagnostics from affected nodes. +- **Automated Mitigation** – Deploy quick-fix scripts across targeted nodes to isolate, restart, or remediate issues. +- **Network-Wide Patching** – Apply security patches or enforce policy changes across the fleet without manual intervention. + +By enabling fast, targeted responses to issues, Bacalhau minimizes downtime and ensures operational resilience. + +## Example Use Cases + +- **Updating all nodes in a region with a new software version.** +- **Running a script to check disk space on all nodes and flag those nearing capacity.** +- **Restarting services across specific groups of nodes without manual intervention.** +- **Executing a security patch on all compute nodes matching a specific hardware profile.** +- **Investigating an outage by collecting logs from affected nodes in real time.** +- **Isolating compromised nodes during a security incident by modifying network rules instantly.** + +## Next Steps + +To start managing a distributed compute fleet using Bacalhau: + +1. **Deploy Bacalhau agents** on all compute nodes across different regions. +2. **Use Ops Jobs** to execute large-scale operational and incident response tasks. +3. **Leverage remote execution** to trigger software updates, collect logs, and automate remediation. + +By leveraging Bacalhau's distributed execution model, fleet management becomes more efficient, scalable, and automated, reducing operational overhead while ensuring nodes remain up to date, resilient, and responsive to workload demands. + +## content/use-cases/use-cases/log-processing.mdx + +# Log Processing + +## Overview + +Efficient log management is essential for monitoring system health, detecting anomalies, and ensuring compliance. Traditional centralized log processing systems often face challenges such as high data transfer costs, latency in real-time analysis, scalability issues, and security risks. Bacalhau addresses these challenges by enabling distributed log processing, allowing logs to be processed directly at their source. + +## Bacalhau's Approach to Log Processing + +Bacalhau simplifies distributed log processing through its versatile job orchestration capabilities, offering several types of jobs to handle various aspects of log management: + +- **Daemon Jobs**: These continuously running jobs on each node handle real-time log aggregation and compression. They transmit aggregated logs to platforms like Kafka or Kinesis for immediate analysis and periodically store raw logs in storage solutions such as S3 for archival purposes. +- **Service Jobs**: Designed for ongoing intermediate processing tasks, service jobs perform log aggregation, basic statistics computation, deduplication, and issue detection. They run on a specified number of nodes, ensuring continuous log processing and seamless integration with logging services like Splunk for real-time insights. +- **Batch Jobs**: Executed on-demand, batch jobs focus on in-depth analysis of historical log data stored in locations like S3. This approach eliminates the need to move large datasets, effectively transforming nodes into a distributed data warehouse for comprehensive investigations. +- **Ops Jobs**: Ideal for urgent investigations, ops jobs run across all nodes that meet specific criteria, enabling real-time querying of live logs. This comprehensive coverage is crucial for immediate troubleshooting and incident response. + +## Benefits of Using Bacalhau for Log Processing + +Implementing Bacalhau for log processing offers several advantages: + +- **Cost Reduction**: By processing logs at their source, Bacalhau significantly reduces data transfer volumes. This approach has been shown to decrease bandwidth usage by approximately 93%, leading to substantial cost savings—potentially over 99% compared to traditional centralized log management solutions. ([Ref.](https://blog.bacalhau.org/p/save-25m-yoy-by-managing-logs-the)) +- **Enhanced Security and Compliance**: Processing and storing logs locally minimizes the exposure of sensitive data during transmission, aiding in compliance with data protection regulations and reducing security risks. +- **Scalability and Flexibility**: Bacalhau's distributed architecture allows for seamless scaling to accommodate increasing log volumes without the bottlenecks associated with centralized systems. +- **Real-Time Insights**: With the ability to process logs in real-time at their origin, Bacalhau enables immediate detection of performance issues, security threats, and other critical events, facilitating prompt responses. + +By leveraging Bacalhau's distributed compute framework, organizations can transform their log management processes to be more efficient, cost-effective, and responsive to the dynamic needs of modern IT environments. + +## docs/basics/debugging-the-agent.md + +# Debugging the Agent + +The Bacalhau `agent` is the process your client directly communicates with. By default, this is running on `localhost:1234`, but can be changed using `--api-host` and `--api-port` flags. For local testing or small clusters, you'll frequently need to check the agent's health and examine its configuration. + +## Checking Agent Health and Version + +When troubleshooting connectivity or verifying your setup: + +```bash +bacalhau agent alive +``` + +This returns a simple health check response, confirming your client can communicate with the agent. + +To check which version you're running: + +```bash +bacalhau agent version +``` + +This displays version information helpful when verifying installations, troubleshooting issues, or reporting bugs. + +## Inspecting Agent Configuration + +During setup or when diagnosing issues: + +```bash +bacalhau agent config +``` + +This returns the complete configuration in YAML format, showing network parameters, resource limits, and admission control settings. Use this when jobs aren't being accepted or resources aren't properly allocated. + +## Examining Node Details + +To get detailed information about the agent's node: + +```bash +bacalhau agent node +``` + +This shows information about node identity, available resources, and supported features. Use this when setting up a new node or troubleshooting job scheduling issues. + +## Working with Remote Agents + +To connect to a remote agent: + +```bash +bacalhau agent version --api-host cluster.example.com --api-port 8080 +``` + +This pattern works with all agent commands and is useful for monitoring production clusters or diagnosing connectivity issues between network components. + +## docs/basics/downloading-results.md + +# Downloading Results + +After a Bacalhau job completes, you'll need to retrieve the output files generated by your job. This guide explains the basics of downloading job results. + +## What You'll Learn + +- How to specify output paths in your jobs +- How to retrieve job results using the CLI + +## Getting Job Results + +To download the results of a completed job: + +```bash +bacalhau job get +``` + +This command downloads all outputs from the job to your current directory. + +### Specifying an Output Directory + +You can specify where to save the downloaded results: + +```bash +bacalhau job get --output-dir /path/to/save +``` + +### Download Timeout Setting + +For larger downloads, you can adjust the timeout: + +```bash +bacalhau job get --download-timeout-secs 10m +``` + +## Specifying Job Outputs and Publisher + +When submitting a job, you need to define which files or directories should be collected as outputs, and where those outputs should be published. + +### Using Command Line + +For Docker jobs, use the `--output` flag to define outputs and the `--publisher` flag to specify where to publish the results: + +```bash +bacalhau docker run \ + --output results:/outputs \ + --publisher s3://my-bucket/results-folder \ + ubuntu:latest \ + -- echo "Hello, World!" > /outputs/hello.txt +``` + +This tells Bacalhau to: + +1. Collect everything in the `/outputs` directory of the container +2. Publish it to the specified S3 bucket and path +3. Make it available for download with `bacalhau job get` + +### Using Declarative Submission + +You can also define outputs in a job specification file: + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: python:3.9 + Entrypoint: + - 'python' + - '-c' + - "import os; os.makedirs('/outputs', exist_ok=True); open('/outputs/result.txt', 'w').write('Analysis complete!')" + Publisher: + Type: s3 + Params: + Bucket: my-bucket + Key: results-folder + ResultPaths: + - Name: results + Path: /outputs +``` + +Submit this job using: + +```bash +bacalhau job run job-spec.yaml +``` + +### Multiple Output Paths + +You can specify multiple output paths in a single job: + +```bash +bacalhau docker run \ + --output logs:/var/log \ + --output results:/outputs \ + --publisher s3://my-bucket/results-folder \ + ubuntu:latest \ + -- +``` + +## Downloaded Results Structure + +After running `bacalhau job get`, the results will be organized in a directory structure like this: + +``` +. +├── job-j-6bafb8d4 +│ ├── exitCode +│ ├── outputs +│ │ └── file1 +│ ├── stderr +│ └── stdout +``` + +The directory structure includes: + +- `exitCode`: Contains the exit code of the job +- `outputs`: Contains all the files from the job's specified output directories +- `stderr`: Captures any error output from the job +- `stdout`: Captures the standard output from the job + +## docs/basics/inspecting-jobs.md + +# Inspecting Jobs + +Once you've submitted jobs to Bacalhau and identified them through job listing, you'll often need to dig deeper into specific jobs. This guide covers the commands for getting detailed information about your jobs. + +## What You'll Learn + +- How to view comprehensive details about a specific job +- How to track a job's history and state changes +- How to examine individual job executions + +## Describing a Job + +To see complete details about a specific job, use: + +```bash +bacalhau job describe +``` + +Replace `` with your actual job ID. You can use the full ID or just the first few characters (if they uniquely identify the job). + +### Sample Output + +``` +ID = j-1efa8fb5-a3ce-4c15-8660-e6c5cd4fe981 +Name = hello-bacalhau +Namespace = default +Type = batch +State = Completed +Count = 1 +Created Time = 2025-03-01 16:11:20 +Modified Time = 2025-03-01 16:11:20 +Version = 0 + +Summary +Completed = 1 + +Job History + TIME TOPIC EVENT + 2025-03-01 16:11:20 Submission Job submitted + 2025-03-01 16:11:20 State Update Running + 2025-03-01 16:11:20 State Update Completed + +Executions + ID NODE ID STATE DESIRED REV. CREATED MODIFIED COMMENT + e-5f62dd5d n-1af42f75 Completed Stopped 4 14m19s ago 14m18s ago Running + +Execution e-5f62dd5d History + TIME TOPIC EVENT + 2025-03-01 16:11:20 Scheduling Requested execution on n-1af42f75 + 2025-03-01 16:11:20 Execution Running + 2025-03-01 16:11:20 Execution Completed successfully + +Standard Output +Hello from a YAML spec! + +``` + +The output shows you: + +- Basic job information (ID, name, type, state) +- Summary of job completion status +- Job history timeline +- Execution details on which nodes ran the job +- Execution history showing state changes +- Standard output from the job execution + +## Customizing the Output Format + +Change the output format for easier parsing or integration with other tools: + +```bash +# Get YAML output +bacalhau job describe --output yaml + +# Get pretty-printed JSON +bacalhau job describe --output json --pretty +``` + +## Tracking Job History + +To see how a job's state has changed over time: + +```bash +bacalhau job history +``` + +The history shows important events like state transitions and execution updates. + +### Filtering History Events + +Filter history by event type: + +```bash +# Show only job-level events +bacalhau job history --event-type job + +# Show only execution-level events +bacalhau job history --event-type execution +``` + +Filter by a specific execution: + +```bash +bacalhau job history --execution-id +``` + +## Viewing Job Executions + +For jobs that run on multiple nodes or have multiple attempts, check the executions: + +```bash +bacalhau job executions +``` + +Each execution represents an instance of your job running on a specific node. + +#### Customizing Execution List + +```bash +# Sort by state +bacalhau job executions --order-by state + +# Get full details without truncation +bacalhau job executions --wide + +# Get in alternative format +bacalhau job executions --output yaml +``` + +## docs/basics/listing-jobs.md + +# Listing Jobs + +This guide shows you how to view and filter the jobs in your Bacalhau environment. Being able to list jobs is essential for monitoring your workloads and finding specific jobs to inspect further. + +## What You'll Learn + +- How to list all your jobs +- How to filter jobs by various criteria +- How to customize the output format + +## Basic Job Listing + +To see your recent jobs, use: + +```bash +bacalhau job list +``` + +By default, this shows your 10 most recent jobs with basic information. + +### Sample Output + +``` + CREATED ID JOB TYPE STATE + 11:01:45 j-f827bd29 docker batch Completed + 17:24:37 j-feea35d9 docker batch Completed + ... + 20:14:13 j-edce7319 docker batch Completed +To fetch more records use: + bacalhau job list --limit 10 --next-token Ok46MTA6MTA +``` + +The output columns show: + +- **CREATED**: When the job was created (time) +- **ID**: The job's unique identifier +- **JOB**: The job engine type (usually docker) +- **TYPE**: The job type (batch, service, etc.) +- **STATE**: Current job state (Completed, Running, Pending, Failed, etc.) + +## Filtering Your Job List + +You can refine your job list using various flags: + +### Limit the Number of Results + +```bash +bacalhau job list --limit 5 +``` + +### Filter by Labels + +Labels help organize and categorize your jobs: + +```bash +bacalhau job list --labels "env=dev,project=research" +``` + +More complex label filtering: + +```bash +bacalhau job list --labels "region in (us-east-1, us-west-1)" +``` + +### Change Result Order + +Order by creation time or job ID: + +```bash +bacalhau job list --order-by created_at +``` + +Reverse the order (newest last): + +```bash +bacalhau job list --order-reversed +``` + +### Pagination + +When you have many jobs, the output will include a pagination token: + +```bash +# Use the next token from previous results +bacalhau job list --limit 10 --next-token Ok46MTA6MTA +``` + +## Customizing Output Format + +By default, results appear in a table format. You can choose other formats: + +### JSON Output + +```bash +bacalhau job list --output json +``` + +For more readable JSON: + +```bash +bacalhau job list --output json --pretty +``` + +### YAML Output + +```bash +bacalhau job list --output yaml +``` + +### CSV Output + +Useful for importing into spreadsheets: + +```bash +bacalhau job list --output csv +``` + +### Table Formatting Options + +Additional options for table output: + +```bash +# Show full values without truncation +bacalhau job list --wide + +# Hide the header row +bacalhau job list --hide-header + +# Remove table styling +bacalhau job list --no-style +``` + +## docs/basics/retrieving-logs.md + +# Retrieving Logs + +After submitting a job to Bacalhau, you'll typically need to inspect its execution logs to monitor progress and troubleshoot issues. This guide explains how to access and manage logs from your Bacalhau jobs. + +## What You'll Learn + +- How to view job execution logs +- How to stream logs in real-time during job execution +- How to filter logs for specific executions + +## Execution Logs + +Execution logs contain the standard output (stdout) and standard error (stderr) from your job, which are invaluable for monitoring and debugging. + +### Basic Log Retrieval + +To view the logs for a completed or running job: + +```bash +bacalhau job logs +``` + +This displays stdout/stderr from the container execution, showing you exactly what your job printed during its run. + +### Real-Time Log Streaming + +For long-running jobs, you can stream logs as they're generated: + +```bash +bacalhau job logs --follow +``` + +This is similar to `tail -f` and will continuously show new log entries until you press Ctrl+C or the job completes. + +### Filtering Logs + +If your job has multiple parallel executions, you can focus on a specific one: + +```bash +bacalhau job logs --execution-id +``` + +You can find execution IDs by running `bacalhau job describe `. + +### Tailing Logs + +To view only the most recent log entries: + +```bash +bacalhau job logs --tail +``` + +## Following Logs During Job Submission + +When submitting a new job, you can immediately follow the logs by adding the `--follow` flag to your job run command: + +```bash +bacalhau job run ./job.yaml --follow +``` + +This is convenient as it combines job submission and log following into a single command, eliminating the need to run a separate `job logs` command. + +For docker run commands, you can similarly use: + +```bash +bacalhau docker run --follow ubuntu:latest -- echo "Hello World" +``` + +## docs/basics/stopping-a-job.md + +# Stopping a Job + +Sometimes you need to terminate a running job before it completes naturally. Bacalhau provides a straightforward way to stop jobs in progress. + +## Stopping a Running Job + +To stop a job that's currently running: + +```bash +bacalhau job stop +``` + +### How It Works + +When you issue a stop command: + +1. The Bacalhau orchestrator marks the job for termination +2. A signal is sent to all compute nodes running tasks for that job +3. The compute nodes terminate the running containers +4. Resources allocated to the job are released +5. The job's state is updated to `Stopped` + +### Verifying Termination + +To confirm a job has been properly stopped: + +```bash +bacalhau job describe +``` + +Look for the `State` field, which should show `Stopped` once the termination is complete. + +## When to Stop a Job + +Common scenarios where stopping a job is necessary: + +- **Stuck or Misconfigured Jobs**: Jobs that are stuck in a loop, using incorrect data, or producing errors +- **Resource Optimization**: When a job is too resource-intensive or taking too long +- **Prioritization Changes**: When higher-priority work arrives and you need to free up resources +- **Service Jobs**: For jobs designed to run continuously, the `stop` command is especially useful when the service is no longer needed + +## docs/basics/submitting-jobs.md + +# Submitting Jobs + +This guide introduces the basics of submitting jobs to Bacalhau. Whether you're running a quick task or setting up a more complex job, you'll learn the essential approaches. + +## What You'll Learn + +* How to run quick jobs with simple commands +* How to create reusable job specifications +* Basic job configuration options + +## Quick Jobs: Command Line Approach + +The fastest way to run a job is using the `bacalhau docker run` command. This is perfect for simple tasks or when you're just getting started. + +```bash +bacalhau docker run \ + ubuntu:latest \ + -- echo "Hello from Bacalhau" +``` + +By default, this runs a batch job (one-time execution). You can also run ops jobs using `--target all`. + +```bash +bacalhau docker run \ + --target all \ + ubuntu:latest \ + -- echo "Running as an ops job" +``` + +### Key Options + +* `--cpu 0.5`: Request half a CPU core +* `--memory 512mb`: Request 512MB of memory +* `--id-only`: Show just the job ID (useful for scripts) + +:::tip +Everything after the `--` is executed inside the container. +::: + +## Reusable Jobs: YAML Specification + +For jobs you'll run multiple times or want to save, create a YAML specification file: + +```yaml +# hello-job.yaml +Name: "hello-bacalhau" +Type: batch +Count: 1 +Tasks: + - Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Entrypoint: + - "echo" + - "Hello from a YAML spec!" +``` + +Submit it with: + +```bash +bacalhau job run hello-job.yaml +``` + +This approach helps you: + +* Save job configurations for later use +* Share job definitions with teammates +* Make small changes without retyping everything + +:::info +Find out more about the possibilities of jobs in [the job specification reference](/specifications/job/README.md). +::: + +## Job Types and Choosing Methods + +Bacalhau supports several job types: + +* **batch**: One-time execution (default for command line) +* **ops**: Administrative tasks targeting specific nodes (use `--target all` to run on all nodes) +* **service**: Long-running services that run on any _N_ nodes +* **daemon**: Background processes that run continuously on all nodes + +**Important:** Service and daemon jobs can only be created using YAML specifications as they're designed for repeatable or updatable workloads. + +### When to Choose Each Method + +* **Use the command line** for: + * Quick, one-time batch jobs + * Simple ops jobs with `--target all` +* **Use YAML files** when: + * Running service or daemon jobs + * Creating repeatable job configurations + * Sharing job definitions with teammates + +## docs/basics/working-with-nodes.md + +# Working with Nodes + +While `agent` commands let you interact with your local Bacalhau process, `node` commands allow you to manage the broader network of compute resources. The orchestrator tracks these nodes, and this guide covers common operations you'll need for monitoring and managing your compute infrastructure. + +## Surveying Your Compute Network + +To get a quick overview of all nodes in your network: + +```bash +bacalhau node list +``` + +This displays a table of nodes with essential information about IDs, types, approval status, and connection state. Use this command for monitoring cluster health and identifying nodes that need attention. + +### Focusing on Available Compute Resources + +When planning job deployments or troubleshooting resource constraints: + +```bash +bacalhau node list --show version,features +``` + +This enhanced view shows version information and supported execution engines. This helps you identify nodes with specific capabilities for your workloads. + +### Filtering Nodes + +Filter the list to show only nodes with specific characteristics: + +```bash +bacalhau node list --labels "region=us-west,gpu=true" +``` + +This filtering capability helps you find nodes in specific regions or with specialized hardware. + +## Deep Dive into Node Details + +When you need comprehensive information about a specific node: + +```bash +bacalhau node describe compute-abc123 +``` + +This provides extensive details on the node's identity, resources, and capabilities. Use this when investigating specific issues or verifying a node's configuration. + +## docs/guides/compute-over-data-architecture.mdx + + + +# Compute-over-data architecture across remote sites and object stores + +Compute-over-data means choosing a compute location with practical access to the input, instead of automatically centralizing every dataset. In Bacalhau, an orchestrator receives a job and compute nodes execute Docker or WASM tasks; inputs and outputs are described as part of the job. See the [architecture overview](/docs/overview/architecture/) for component responsibilities. + +## Reference topology + +| Layer | Responsibility | Design question | +| --- | --- | --- | +| Orchestrator | Receives jobs and coordinates state | Who operates its availability, identity, and audit trail? | +| Compute nodes | Execute isolated task environments | Which sites can reach each dataset and meet runtime needs? | +| Input storage | Provides files, objects, or URLs | Which credentials and network paths are permitted? | +| Result publisher | Stores artifacts and results | Where may outputs reside and who can retrieve them? | + +Keep the network boundary explicit: object storage is not automatically mounted simply because a node is nearby, and a job constraint does not change a storage bucket policy. + +## Model the job rather than the marketing diagram + +This example uses a URL input and local publisher so the data path is visible. Substitute your controlled source and publisher only after reviewing the relevant source and result specifications. + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: summarize + Engine: + Type: docker + Params: + Image: alpine:3.21 + Parameters: [sh, -c, "wc -l /inputs/events.txt > /outputs/line-count.txt"] + InputSources: + - Alias: events + Target: /inputs/events.txt + Source: + Type: urlDownload + Params: + URL: https://example.org/events.txt + Publisher: + Type: local + ResultPaths: + - Name: outputs + Path: /outputs +``` + +Submit it with `bacalhau job run job.yaml`, then use `bacalhau job describe ` to inspect execution state. The [quick start](/docs/getting-started/quick-start/) shows the same imperative and declarative workflow. + +## Tradeoffs and controls + +| Requirement | Useful Bacalhau mechanism | Boundary outside Bacalhau | +| --- | --- | --- | +| Keep work at a site | Node labels and job constraints | Network segmentation and physical/data residency controls | +| Limit a task's inputs | Explicit input sources | Storage IAM, object ACLs, and secret distribution | +| Preserve results | Result paths and a publisher | Retention, encryption, and downstream access policy | +| Recover from a failure | Job state and operator monitoring | Site disaster recovery and capacity planning | + +Read the [constraint specification](/docs/specifications/job/constraint/), [input-source specification](/docs/specifications/job/input-source/), and [publishing results guide](/docs/guides/publishing-results/) before choosing production values. + +## Limitations + +This architecture does not eliminate data transfer: container images, inputs, logs, and results can still cross a network. Instrument those paths, test loss of a site or storage endpoint, and define whether a no-match constraint must fail closed or trigger an approved fallback. + +## docs/guides/compute-over-data-comparison.mdx + + + +# Bacalhau compared with Kubernetes, KubeEdge, Nomad, Ray, and Trino + +Bacalhau is an independent, Apache-2.0-licensed distributed compute project. It coordinates container and WASM jobs across compute nodes, with placement informed by available resources, job requirements, and data access. It is not a renamed Kubernetes distribution, a data warehouse, or a managed cloud service. + +## Start with the workload boundary + +| Tool | Primary strength | Prefer it when | Tradeoff to plan for | +| --- | --- | --- | --- | +| Bacalhau | Running arbitrary jobs close to distributed data | Batch, ops, daemon, or service workloads need data-aware placement | You operate the nodes, storage credentials, and job policy | +| Kubernetes | General-purpose container platform | You need a large ecosystem for long-lived applications | Data locality is normally modeled through your storage and scheduling design | +| KubeEdge | Kubernetes extension for edge nodes | Existing Kubernetes control-plane patterns must extend to devices | It retains Kubernetes operational complexity | +| Nomad | Simple workload scheduling | A homogeneous fleet and broad workload types are the main concern | Data-source-aware job design remains your responsibility | +| Ray | Distributed Python and AI workloads | Actors, tasks, and Python-native ML are central | It is not a general data-locality control plane | +| Trino | Federated SQL queries | The problem can be expressed in SQL over supported sources | It does not run arbitrary containerized transformations | + +The comparison is not a feature checklist. A common design is to retain Kubernetes or Nomad for application services, use a SQL engine for interactive analysis, and use Bacalhau for a bounded job that must execute where data can be accessed. + +## A small, auditable starting point + +Label nodes only with facts your operators maintain, then constrain a job to the required boundary: + +```bash +bacalhau serve --compute -c Labels="region=eu-west,data-boundary=eu" + +bacalhau docker run \ + --constraints "region=eu-west" \ + --constraints "data-boundary=eu" \ + --input https://example.org/manifest.json:/inputs/manifest.json \ + --output results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'wc -c /inputs/manifest.json > /outputs/count.txt' +``` + +This does not prove legal compliance by itself. Confirm network routes, identity, storage policy, encryption, and the actual location of every input and output with the systems that own those controls. + +## Decision checks + +1. Read the [architecture overview](/docs/overview/architecture/) and decide which process owns orchestration and compute. +2. Model inputs explicitly using the [job input-source specification](/docs/specifications/job/input-source/), rather than assuming a URL is local. +3. Use [labels and constraints](/docs/guides/labels-and-constraints/) for placement rules, and test no-match behavior before production. +4. Define result handling with [result paths](/docs/specifications/job/result-path/) and [publishing results](/docs/guides/publishing-results/). + +## Limitations + +Data proximity can reduce unnecessary transfers, but it cannot make an unavailable dataset accessible or turn labels into an enforcement system. Measure transfer volume and execution time in your environment; do not infer either from this comparison. + +## docs/guides/data-locality-and-sovereignty.mdx + + + +# Data locality, sovereignty, bandwidth, and egress patterns + +Data locality is a design decision about where inputs are accessed and work runs. Data sovereignty is broader: it concerns legal, contractual, operational, and technical controls around data. Bacalhau can help express compute placement through node labels and job constraints, but it cannot certify compliance or infer the location of a remote source. + +## Choose the pattern that matches the boundary + +| Pattern | Use it when | What to verify | +| --- | --- | --- | +| Site-local processing | A site hosts the data and compute | Node labels, local access path, output location, and offline behavior | +| Region-scoped processing | Data and workers must stay within an approved region | Storage endpoint, DNS and network routes, credentials, and failover region | +| Object-store-adjacent processing | Large objects are reachable from selected workers | Actual byte transfer, IAM scope, result publisher, and cost model | +| Centralized processing | A controlled central copy is acceptable | Ingest policy, egress cost, retention, and recovery objectives | + +## Make placement explicit + +Start a compute node with operator-maintained labels, then require them in the job: + +```bash +bacalhau serve --compute -c Labels="residency=ca,site=toronto" + +bacalhau docker run \ + --constraints "residency=ca" \ + --constraints "site=toronto" \ + --input https://example.org/public-records.csv:/input/records.csv \ + --output locality-results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'sha256sum /input/records.csv > /outputs/checksum.txt' +``` + +The command is intentionally simple: it proves that a constrained job can execute and publish an output. It does not prove that an HTTPS endpoint, container registry, log system, or operator workstation stayed in the same jurisdiction. + +## Controls that belong together + +| Goal | Bacalhau configuration | Complementary control | +| --- | --- | --- | +| Direct work to suitable nodes | Labels and [constraints](/docs/guides/labels-and-constraints/) | Change control for labels and capacity | +| Describe a data path | [Input sources](/docs/specifications/job/input-source/) and [tasks](/docs/specifications/job/task/) | Storage IAM, network policy, and credential rotation | +| Retain artifacts safely | [Result paths](/docs/specifications/job/result-path/) and a publisher | Encryption, retention, and downstream authorization | +| Bound a workload lifecycle | [Job type](/docs/specifications/job/type/) and [timeouts](/docs/specifications/job/timeouts/) | Monitoring, incident response, and business continuity | + +## Limitations and audit evidence + +For each production job, retain the submitted specification, selected node, input and output endpoints, identities used, timing, and transfer measurements. Review these against your jurisdictional and contractual requirements. Bacalhau's [architecture](/docs/overview/architecture/) explains the scheduling components, while your organization remains responsible for the surrounding enforcement and evidence. + +## docs/guides/edge-orchestration-buyers-guide.mdx + + + +# Technical buyer's guide to distributed edge orchestration + +An edge orchestrator is useful only when it makes an operating boundary clearer: where code runs, which data it can reach, how it is observed, and what happens when a site is unavailable. Bacalhau is an Apache-2.0 open-source project for orchestrating Docker and WASM workloads across compute nodes; it does not replace your device-management, identity, or storage systems. + +## Evaluation matrix + +| Evaluation area | Questions to ask | Bacalhau evidence to inspect | +| --- | --- | --- | +| Placement | Can a workload target an approved region or capability? | [Labels and constraints](/docs/guides/labels-and-constraints/) and a deliberate no-match test | +| Lifecycle | Is the workload batch, ops, daemon, or service? | [Job type specification](/docs/specifications/job/type/) | +| Inputs and outputs | Are every source and result path explicit? | [Input sources](/docs/specifications/job/input-source/) and [result paths](/docs/specifications/job/result-path/) | +| Runtime | Which images, parameters, resources, and network assumptions apply? | [Task specification](/docs/specifications/job/task/) and [network specification](/docs/specifications/job/network/) | +| Operations | Who sees job state and acts on failures? | `bacalhau job describe`, logs, and your monitoring system | + +## Pilot design + +Begin with two sites that have different data or network conditions. Give nodes factual labels, submit a small workload with explicit constraints, then compare job state and result location. Do not begin by connecting production data. + +```bash +bacalhau serve --compute -c Labels="site=plant-a,accelerator=false" + +bacalhau docker run \ + --constraints "site=plant-a" \ + --input https://example.org/telemetry.csv:/input/telemetry.csv \ + --output pilot-results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'wc -l /input/telemetry.csv > /outputs/rows.txt' +``` + +Record the node identity, job ID, input access method, result path, elapsed time, transfer measurements, and the behavior when the matching node is unavailable. This turns a pilot into reproducible evidence rather than a demo. + +## Selection tradeoffs + +| If you prioritize | Design implication | +| --- | --- | +| Strict site boundaries | Combine constraints with network, storage, and identity enforcement; constraints alone are insufficient | +| Low-touch operations | Favor a small, repeatable node configuration and a narrowly scoped pilot | +| Heterogeneous hardware | Label only verified capabilities and test each runtime image on its target architecture | +| Fast centralized analytics | A data warehouse or SQL engine may be a better primary tool than edge orchestration | + +The [quick start](/docs/getting-started/quick-start/) is a safe local starting point. Move to a multi-site design only after validating the [architecture](/docs/overview/architecture/), job timeouts, resource limits, and recovery expectations. + +## Limitations + +No orchestration tool can establish compliance or availability alone. Verify device patching, physical access, connectivity, secrets, storage policy, and incident response with the owners of those controls. + +## docs/guides/labels-and-constraints.md + +# Labels and Constraints + +This guide provides a comprehensive overview of Bacalhau's label and constraint system, which enables fine-grained control over job scheduling and resource allocation. + +## Understanding Labels and Constraints + +Labels in Bacalhau are key-value pairs attached to nodes that describe their characteristics, capabilities, and properties. Constraints are rules you define when submitting jobs to ensure they run on nodes with specific labels. + +## Label Configuration + +### Command Line Configuration + +You define labels when starting a Bacalhau node using the `-c Labels` flag: + +```bash +bacalhau serve -c Labels="env=prod,gpu=true,arch=x64" +``` + +### Configuration File + +You can also define labels in a YAML configuration file: + +```yaml +# config.yaml +labels: + env: prod + gpu: true + arch: x64 + region: us-west +``` + +Then start the node with: + +```bash +bacalhau serve --config config.yaml +``` + +### Verifying Labels + +Check node labels using: + +```bash +bacalhau node list +``` + +### Constraint Operators + +Bacalhau supports various operators for precise node selection: + +| Operator | Example | Description | +| -------- | ----------------- | ----------------- | +| `=` | `region=us-east` | Exact match | +| `!=` | `env!=staging` | Not equal | +| `exists` | `gpu` | Key exists | +| `!` | `!temporary` | Key doesn't exist | +| `in` | `zone in (a,b,c)` | Value in set | +| `gt` | `mem-gb gt 32` | Greater than | +| `lt` | `cpu-cores lt 16` | Less than | + +## Job Submission Patterns + +### Basic Constraint Usage + +Common patterns for submitting jobs with constraints: + +```bash +# Single constraint +bacalhau docker run --constraints "env=prod" alpine + +# Multiple constraints +bacalhau docker run \ + --constraints "env=prod" \ + --constraints "gpu=true" \ + nvidia/cuda:11.0-base nvidia-smi +``` + +### Resource-Specific Constraints + +```bash +# Data processing with specific architecture requirements +bacalhau docker run \ + --constraints "arch in (x64,arm64)" \ + --constraints "mem-gb gt 16" \ + --constraints "storage-tier!=hdd" \ + my-data-processing-job + +# High-memory workloads +bacalhau docker run --constraints "mem-gb gt 64" in-memory-db + +# GPU workloads +bacalhau docker run \ + --constraints "gpu-model=a100" \ + --constraints "gpu-count gt 1" \ + llm-training +``` + +### Environment-Specific Patterns + +```bash +# Production workloads +bacalhau docker run --constraints "env=prod,data-tier=hot" spark-job + +# Development/testing +bacalhau docker run --constraints "env=dev" test-runner + +# Geographic requirements +bacalhau docker run --constraints "region=eu,compliance=gdpr" data-processor + +# Multi-zone deployments +bacalhau docker run --constraints "zone in (us-east-1a,us-east-1b)" ha-service +``` + +### Common Failure Scenarios + +```bash +# No SSD nodes available +bacalhau docker run --constraints "disk=ssd" alpine echo "failed" + +# Insufficient CPU +bacalhau docker run --constraints "cpu-cores gt 64" alpine echo "failed" +``` + +## Best Practices + +### Naming Conventions + +Follow these patterns for consistent label naming: + +- Use lowercase alphanumeric characters +- Separate words with hyphens +- Use descriptive prefixes for categorization + +Examples: + +``` +team-ml-gpu +env-prod-tier1 +storage-ssd-nvme +``` + +### Label Hierarchies + +Organize labels hierarchically for better management: + +```bash +# Parent node +bacalhau serve -c Labels="tier=core,env=prod" + +# Specialized child node +bacalhau serve -c Labels="tier=edge,env=prod,gpu=true" +``` + +### Constraint Composition + +```bash +# AND logic (all must match) +bacalhau docker run \ + --constraints "storage=ssd" \ + --constraints "cpu-arch=x64" \ + high-performance-job + +# OR logic with value lists +bacalhau docker run \ + --constraints "zone in (us-east1,us-west2)" \ + multi-region-job + +# Exclusion patterns +bacalhau docker run \ + --constraints "maintenance!=true" \ + time-sensitive-job +``` + +## Advanced Use Cases + +### Security and Compliance + +```bash +# Ensure compliance requirements +bacalhau docker run \ + --constraints "security=hipaa" \ + --constraints "encryption=enabled" \ + sensitive-data-job + +# Network isolation +bacalhau docker run \ + --constraints "network=private" \ + --constraints "public-access=false" \ + internal-job +``` + +### Resource Optimization + +```bash +# Cost-optimized scheduling +bacalhau docker run \ + --constraints "instance-type=spot" \ + --constraints "cost-tier=low" \ + batch-job + +# Performance optimization +bacalhau docker run \ + --constraints "storage-type=nvme" \ + --constraints "network-speed gt 10" \ + latency-sensitive-job +``` + +### Multi-team Coordination + +```bash +# Team resource allocation +bacalhau docker run \ + --constraints "team in (data,research)" \ + --constraints "project=genomics-2024" \ + shared-resource-job + +# Label deprecation management +bacalhau serve -c Labels="legacy-system=phase-out,retirement-date=2025-Q1" +``` + +## Monitoring and Maintenance + +### Label Updates + +Remember that label changes require node restarts. After updating labels: + +1. Gracefully stop the node +2. Apply new configuration +3. Restart the node +4. Verify labels with `bacalhau node list` + +### Monitoring and Troubleshooting + +```bash +# List all node labels +bacalhau node list --output json | jq 'map(.Info.Labels)' + +# Check job constraint matches +bacalhau job describe JOB_ID --include-events +``` + +## Troubleshooting Common Issues + +### No Matching Nodes + +If your job fails with no matching nodes: + +1. Check available nodes and their labels: + + ```bash + bacalhau node list --output json + ``` + +2. Verify your constraints aren't too restrictive: + + ```bash + # Instead of + --constraints "mem-gb gt 128" + # Try + --constraints "mem-gb gt 64" + ``` + +3. Ensure required nodes are online: + ```bash + bacalhau node list --labels "required-label=value" + ``` + +## Conclusion + +Effective use of Bacalhau's label and constraint system enables precise control over workload placement and resource utilization. Follow these best practices: + +1. Use consistent naming conventions +2. Document your label taxonomy +3. Regularly audit and clean up unused labels +4. Test constraints before production deployment +5. Monitor constraint patterns for optimization opportunities + +For additional support, consult the Bacalhau documentation or community resources. + +## docs/guides/mounting-input-data.mdx + +# Mounting Input Data + +This page explains how to feed external data into Bacalhau jobs from various sources. Bacalhau's modular architecture enables flexible data mounting from multiple storage providers, with S3-compatible storage, local directories, IPFS, and HTTP/HTTPS URLs supported out of the box. + +## What You'll Learn + +- How to mount data from different sources to your Bacalhau jobs +- The syntax and options for each data source type +- Best practices for efficient data handling + +## Input Mounting Basics + +Bacalhau jobs often need access to input data. The general syntax for mounting input data is: + +```bash +bacalhau docker run \ +--input : \ +IMAGE -- COMMAND +``` + +Where: + +- `URI` is the protocol identifier (file://, s3://, ipfs://, http://, https://) +- `SOURCE` specifies the path to the data +- `TARGET` is the path where the data will be mounted in the container + +This pattern is consistent across all input types, making it easy to understand and use regardless of the data source. + +```yaml +... +InputSources: +- Alias: input +Target: +Source: +Type: +Params: + key: value +``` + +Where: + +- `URI` is the protocol identifier (file://, s3://, ipfs://, http://, https://) +- `TARGET` is the path where the data will be mounted in the container +- `PARAMS` are key value configuration [depending on the input type](/components/sources/README.mdx) + +## Local Directories + +```bash +bacalhau docker run \ +--input file:///path/to/local/data:/data \ +ubuntu:latest -- cat /data/input.txt +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - "cat" + - "/data/input.txt" + InputSources: + - Alias: input_data + Target: /data + Source: + Type: local + Params: + Path: /path/to/local/data +``` + +This mounts the directory `/path/to/local/data` from the host machine to `/data` inside the container. + +## S3-Compatible Storage + +S3 integration connects to storage solutions compatible with the S3 API, such as AWS S3, Google Cloud Storage, and locally deployed MinIO + +```bash +bacalhau docker run \ +--input s3://my-bucket/datasets/sample.csv:/data/sample.csv \ +ubuntu:latest -- cat /data/sample.csv +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - "cat" + - "/data/sample.csv" + InputSources: + - Alias: input_data + Target: /data/sample.csv + Source: + Type: s3 + Params: + Bucket: my-bucket + Key: datasets/sample.csv +``` + +This downloads and mounts the S3 object to the specified path in the container. + +## HTTP/HTTPS URLs + +URL-based inputs provide access to web-hosted resources. + +```bash +bacalhau docker run \ +--input https://example.com/data.csv:/data/data.csv \ +ubuntu:latest -- head -n 10 /data/data.csv +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - head + - -n + - "10" + - /data/data.csv + InputSources: + - Alias: input_data + Target: /data/data.csv + Source: + Type: urlDownload + Params: + URL: https://example.com/data.csv +``` + +## IPFS (InterPlanetary File System) + +IPFS provides content-addressable, peer-to-peer storage for decentralized data sharing. + +```bash +bacalhau docker run \ +--input ipfs://QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx:/data \ +ubuntu:latest -- cat /data/file.txt +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - cat + - /data/file.txt + InputSources: + - Alias: input_data + Target: /data + Source: + Type: ipfs + Params: + CID: QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx +``` + +The IPFS CID (Content Identifier) points to the specific content you want to mount. + +## Multiple Inputs + +You can combine multiple inputs from different sources in a single job: + +```bash +bacalhau docker run \ +--input file:///path/to/config:/config \ +--input s3://my-bucket/datasets/data.csv:/data/data.csv \ +--input https://example.com/reference.json:/data/reference.json \ +python:3.9 -- python /config/process.py +``` + +## Working with Large Datasets + +For very large datasets, consider these optimization strategies: + +```bash +bacalhau docker run \ +--cpu 4 \ +--memory 8GB \ +--disk 100GB \ +--input s3://big-data-bucket/huge-dataset/:/data/ \ +python:3.9 -- python process_big_data.py +``` + +Best practices: + +- Increase resource allocations as needed +- Use data locality to minimize transfer costs +- Process data in chunks when possible +- Choose efficient data formats (Parquet, Arrow, etc.) + +## Tips & Caveats + +- **Credentials**: Some mount sources (S3) require proper credentials or connectivity +- **Data Locality**: Use Bacalhau label selectors to run jobs on nodes that have or close to the data +- **IPFS Network**: Compute nodes must be connected to an IPFS daemon to support this storage type +- **Size Limits**: Very large inputs may require increased disk allocations using `--disk` + +## Next Steps + +- Learn how to retrieve and publish outputs from jobs +- See a complete example workflow that includes input data +- Explore resource constraints for jobs with large data processing needs + +## docs/guides/networking.md + +# Networking + +By default, Bacalhau jobs have network access. This is configured at the node level and can be restricted based on your infrastructure requirements and security policies. + +## Specifying Job Network Access + +To run Docker jobs on Bacalhau with different network access levels, you can specify one of the following: + +1. **host**: unfiltered network access for any protocol `--network=host` (default) +2. **http**: HTTP(S)-only network access to a specified list of domains `--network=http` +3. **none**: no network access `--network=none` + +:::info +Specifying `none` will still allow Bacalhau to download and upload data before and after the job using a Publisher. +::: + +Jobs using `http` must specify the domains they want to access when the job is submitted. + +So, putting it together the job run should look like this: + +```bash +bacalhau docker run --network=host alpine curl https://google.com +``` + +Jobs with `http` networking will be provided with [`http_proxy` and `https_proxy` environment variables](https://about.gitlab.com/blog/2021/01/27/we-need-to-talk-no-proxy/) which contain a TCP address of an HTTP proxy to connect through. Most tools and libraries will use these environment variables by default. If not, they must be used by user code to configure HTTP proxy usage. Note that proxy environment variables are only provided in `http` mode, not in `host` mode. + +The required networking can be specified using the `--network` flag. For `http` networking, the required domains can be specified using the `--domain` flag, multiple times for as many domains as required. Specifying a domain starting with a `.` means that all sub-domains will be included. For example, specifying `.example.com` will cover `some.thing.example.com` as well as `example.com`. + +:::info +If you encounter the following (or any DNS) error, you likely set the `--network=none` flag or are connecting to a node that has network access disabled: +::: + +``` +Execution e-0d59d223: error: +Failed to fetch: https://pypi.org/simple/pyyaml/ + Caused by: Could not connect, are you offline? + Caused by: Request failed after 3 retries + Caused by: error sending request for url (https://pypi.org/simple/pyyaml/) + Caused by: client error (Connect) Caused by: dns error: failed to lookup address information: Try again + Caused by: failed to lookup address information: Try again +``` + +:::warning +Bacalhau jobs are explicitly prevented from starting other Bacalhau jobs, even if a Bacalhau requester node is specified on the HTTP allowlist. +::: + +## Setting Up Your Nodes + +Network access for jobs is enabled by default at the node level. If you wish to disable it, you can configure this using an Admission Controller setting in the node configuration: + +```yaml +Compute: + Enabled: true + TLS: + RequireTLS: true +JobAdmissionControl: + RejectNetworkedJobs: true +``` + +## docs/guides/partitioning.mdx + +# Partitioning + +Partitioning is a powerful feature in Bacalhau that allows you to efficiently distribute large datasets and compute-intensive tasks across multiple compute nodes. Instead of running a single job execution, partitioning splits your workload into separate, independent partitions that run concurrently, improving performance and resource utilization. + +This core functionality has enabled key integrations such as Bacalhau's [DuckDB integration](/integrations/duckdb), which implements `partition_by` User Defined Functions (UDFs) that leverage the partitioning system to enable truly distributed SQL queries across multiple nodes. + +### Understanding Partitioned Execution + +When processing large datasets or running compute-intensive tasks, splitting the work across multiple nodes can significantly improve performance and resource utilization. Bacalhau's partitioning feature makes this process systematic by: + +- Distributing work across multiple compute nodes +- Managing partition assignments and tracking +- Handling failures at a partition level +- Providing execution context to each partition + +### Core Features + +#### 1. Partition Management + +Bacalhau handles the key aspects of partition management: + +- **Distribution**: When you specify multiple partitions, Bacalhau: + - Creates N partitions (0 to N-1) + - Assigns each partition to available compute nodes that match the data and other constraints you have set up + - Maintains consistent partition assignments throughout the job lifecycle + - Ensures that each partition finishes correctly +- **Independent Execution**: Each partition: + - Runs independently of others + - Can be processed on different nodes + - Has its own lifecycle and error handling + +#### 2. Error Handling and Recovery + +A key strength of the partitioning system is its approach to failure handling: + +- **Partition-Level Isolation**: + - Failures are contained within individual partitions + - System continues processing unaffected partitions + - Failed partitions are retried independently +- **Example Scenario**: + + ``` + Job with 5 partitions: + Partition 0: ✓ Completed + Partition 1: ✓ Completed + Partition 2: ✓ Completed + Partition 3: ✗ Failed -> Scheduled for retry + Partition 4: ✓ Completed + ``` + +#### 3. Execution Context + +Each partition receives essential information through environment variables: + +```bash +BACALHAU_PARTITION_INDEX # Current partition (0 to N-1) +BACALHAU_PARTITION_COUNT # Total number of partitions + +# Additional context variables +BACALHAU_JOB_ID # Unique job identifier +BACALHAU_JOB_TYPE # Job type (Batch/Service) +BACALHAU_EXECUTION_ID # Unique execution identifier +``` + +This context enables your code to: + +- Identify its assigned partition +- Access job-level information +- Implement partition-specific processing logic + +### Using Partitioning in Your Jobs + +```bash +bacalhau docker run \ + --count 3 \ + ubuntu -- sh -c 'echo Partition=$BACALHAU_PARTITION_INDEX' +``` + +To use partitioning, specify the number of partitions using the `--count` parameter when submitting your job + +```yaml +# partition.yaml +Name: Partitioned Job +Type: batch +Count: 3 # This defines the number of partitions +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu + Parameters: + - sh + - -c + - echo Partition=$BACALHAU_PARTITION_INDEX +``` + +You can also use partitioning in job specifications + +Submit with: + +```bash +bacalhau job run partition.yaml +``` + +### Technical Benefits + +Bacalhau's partitioning feature offers significant technical advantages: + +#### Enhanced Performance and Scalability + +- **Horizontal Scaling**: Distribute work across multiple compute nodes +- **Parallel Processing**: Improve processing speed for large datasets +- **Resource Optimization**: Maximize resource utilization across your cluster +- **Reduced Processing Time**: Handle massive datasets more efficiently + +#### Increased Reliability and Resilience + +- **Granular Failure Recovery**: Isolate errors within individual partitions +- **Automatic Retry**: Automatically reschedule failed partitions +- **Continuous Processing**: Continue processing other partitions despite failures +- **Result Preservation**: Prevent unnecessary reprocessing of successful partitions + +### Limitations and Considerations + +- Partitioning is supported only for `batch` and `service` job types +- `daemon` and `ops` jobs are deployed to all nodes and don't use the partitioning feature +- The default value for `Count` is 1, which means no partitioning +- Your application code must be designed to work with partitioned execution + +### Best Practices + +- **Ensure Idempotency**: Make sure each partition can be safely retried without side effects +- **Balance Partition Size**: Choose a partition count that balances overhead with parallelism +- **Design for Independence**: Partitions should operate independently without cross-partition dependencies +- **Handle Edge Cases**: Account for scenarios like uneven data distribution across partitions +- **Use Partition Context**: Leverage the environment variables to implement partition-aware logic + +### Examples + +#### Basic Partitioning Example + +```bash +# Run a job with 4 partitions +bacalhau docker run \ + --count 4 \ + ubuntu -- sh -c 'echo Processing partition $BACALHAU_PARTITION_INDEX of $BACALHAU_PARTITION_COUNT' +``` + +#### Data Processing with Python + +```python +# script.py + +# Get partition information +partition_index = int(os.environ.get('BACALHAU_PARTITION_INDEX', 0)) +partition_count = int(os.environ.get('BACALHAU_PARTITION_COUNT', 1)) + +# Define data ranges for each partition +def get_data_chunk(index, total): + # Example: Split data processing by date ranges + dates = pd.date_range('2023-01-01', '2023-12-31') + chunk_size = len(dates) // total + start_idx = index * chunk_size + end_idx = start_idx + chunk_size if index < total - 1 else len(dates) + return dates[start_idx:end_idx] + +# Process only this partition's data range +my_dates = get_data_chunk(partition_index, partition_count) +print(f"Partition {partition_index}/{partition_count} processing dates: {my_dates[0]} to {my_dates[-1]}") + +# Continue with processing... +``` + +Run with: + +```bash +bacalhau docker run \ + --count 12 \ + --input /script.py:/app/script.py \ + python:3.9 -- python /app/script.py +``` + +### Related Features + +Bacalhau's partitioning system serves as a foundation for other features, including: + +- [**DuckDB Integration**](/integrations/duckdb): Enables distributed SQL analytics with partitioning support +- [**S3 Partitioning**](s3-partitioning.md): Specialized support for partitioned S3 data processing + +### Conclusion + +Partitioning in Bacalhau provides a powerful way to scale your workloads across distributed compute resources. By allowing work to be split and processed in parallel, while maintaining fault tolerance and proper error handling, Bacalhau's partitioning feature enables efficient processing of large datasets and compute-intensive tasks. + +## docs/guides/publishing-results.mdx + +# Publishing & Retrieving Results + +This guide explains how to configure output publishing and retrieve results from Bacalhau jobs across different storage systems. Proper output handling is essential for building effective data pipelines and workflows. + +## What You'll Learn + +- How Bacalhau's Publishers mechanism works +- How to configure different output destination types +- How to retrieve outputs from various storage systems +- How to choose the right publisher for your use case + +## Understanding Publishers and Result Paths + +In Bacalhau, you need to configure two key components for handling outputs: + +1. A **Publisher** defines where your job's output files are stored after execution +2. **Result Paths** specify which directories should be captured as job results. + +```bash +bacalhau docker run \ + --publisher \ + --output /outputs:/outputs \ + ubuntu:latest -- echo "Hello, Bacalhau" > /outputs/hello.txt +``` + +```yaml +Publisher: + Type: + Params: + Key: Value + +ResultPaths: + +- Name: /outputs + Path: /outputs + +```` + +### Retrieving Local Outputs + +After your job completes, retrieve outputs using the `bacalhau job get` command: + +```bash +bacalhau job get +```` + +This will download all published outputs to your current directory. + +:::note + +- If you define a publisher without specifying result paths, only stdout and stderr will be uploaded to the chosen publisher +- If you define result paths without a publisher, the job will fail +- You can have multiple result paths, each capturing different directories + ::: + +## Publisher Types + +Bacalhau supports multiple publisher types to accommodate different needs and infrastructure requirements. + +### S3 Publisher + +The S3 Publisher uploads outputs to an Amazon S3 bucket or any S3-compatible storage service, such as MinIO. The compute node must have permission to write to the bucket, and the orchestrator must have permission to provide pre-signed URLs to download the results. + +```bash +bacalhau docker run \ + --publisher s3://my-bucket/bacalhau-output \ + --output /outputs:/outputs \ + ubuntu:latest -- bash -c "echo 'results' > /outputs/results.txt" +``` + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo 'results' > /outputs/results.txt + Publisher: + Type: s3 + Params: + Bucket: my-bucket + Key: bacalhau-outputs + ResultPaths: + - Name: /outputs + Path: /outputs +``` + +### IPFS Publisher + +The IPFS Publisher uploads outputs to the InterPlanetary File System. Both the client (downloading the result) and the compute node must be connected to an IPFS daemon. + +```bash +bacalhau docker run \ + --publisher ipfs \ + --output /outputs:/outputs \ + ubuntu:latest -- bash -c "echo 'results' > /outputs/results.txt" +``` + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo 'results' > /outputs/results.txt + Publisher: + Type: ipfs + ResultPaths: + - Name: /outputs + Path: /outputs +``` + +### Local Publisher + +The Local Publisher saves outputs to the local filesystem of the compute node that ran your job. This is intended for **local testing only**, as it requires the client downloading the results to be on the same network as the compute node. + +```bash +bacalhau docker run \ + --publisher local \ + --output /outputs:/outputs \ + ubuntu:latest -- bash -c "echo 'results' > /outputs/results.txt" +``` + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo 'results' > /outputs/results.txt + Publisher: + Type: local + ResultPaths: + - Name: /outputs + Path: /outputs + +``` + +If you are using the local publish, make SURE you have set the path to be available to your job. + +For example, in your config file for your node, you probably want to mount in the local file system: + +``` + +Compute: +AllowListedLocalPaths: - /outputs:rw - /etc/\*.conf:ro + +``` + +You can read more about that here: [Understanding Publishers and Results](publishing-results.mdx#understanding-publishers-and-result-paths) + +## Troubleshooting + +### No Outputs Found + +If you don't see expected outputs: + +1. Check that your job wrote to the directories specified in your `ResultPaths` +2. Verify the job completed successfully with `bacalhau job describe ` +3. Check for errors in the logs with `bacalhau job logs ` + +### S3 Publishing Issues + +For S3 publisher problems: + +1. Ensure compute nodes have proper IAM roles or credentials to write to the bucket +2. Check that the orchestrator has permissions to generate pre-signed URLs + +### IPFS Publishing Issues + +For IPFS publisher issues: + +1. Ensure IPFS daemon is running on both compute node and client +2. Check for network connectivity between nodes +3. Verify you have enough disk space for pinning +``` + +## docs/guides/queueing.md + +# Queueing + +## Introduction + +Job Queueing allows Bacalhau to handle situations when there are no suitable nodes available to execute a job. You can configure a time period during which the job will wait for suitable nodes to become available or free up. This feature enables better flexibility and reliability in managing your distributed workloads. + +## Configuring Job Queueing + +The job queueing feature is not automatically enabled and needs to be explicitly set in your [Job specification](/specifications/job/README.md) or node configuration using the `QueueTimeout` parameter. This parameter activates the queueing feature and defines the amount of time your job should wait for available nodes. + +Node availability is determined by capacity as well as job constraints such as label selectors, engines, or publishers. For example, jobs will be queued if all nodes are currently busy, or if idle nodes do not match parameters in your job specification. + +:::info +Bacalhau compute nodes regularly update their [node, resource and health information](/references/operators/node-management.md) every 30 seconds to the orchestrator nodes. During this update period, multiple jobs may be allocated to a node, potentially exceeding its immediate available capacity. A local job queue is created at the compute node, efficiently handling the high demand as resources become available over time. +::: + +## How It Works + +You can set default queueing behavior for all jobs by defining the `QueueTimeout` parameter in the node's configuration file. Alternatively, within the job specification, you can include the `QueueTimeout` parameter directly in the configuration YAML. This flexibility allows you to tailor the queueing behavior to meet the specific needs of your distributed computing environment. + +### Orchestrator Node + +Here's an example orchestrator node configuration that sets the default job queueing retry interval for an hour: + +```yaml +Orchestrator: + Scheduler: + QueueBackoff: 1h +``` + +:::info +The `QueueBackoff` parameter determines how frequently the scheduler will retry assigning queued jobs to compute nodes. +::: + +### Job Specification + +Here's a sample job specification setting the `QueueTimeout` for this specific job, overriding any node defaults: + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - sleep 90 + Timeouts: + QueueTimeout: 1800 +``` + +### CLI Command + +You can also define timeouts for your jobs directly through the CLI using the `--queue-timeout` flag. This provides a convenient way to specify queueing behavior on a per-job basis without modifying configuration files: + +```bash +bacalhau docker run ubuntu sleep 90 --queue-timeout 1800 +``` + +:::warning +Timeouts in Bacalhau are generally governed by the `TotalTimeout` value for your YAML specifications and the `--timeout` flag for your CLI commands. The default total timeout value is 30 minutes. Setting a queue timeout larger than the total timeout without increasing the total timeout value will result in a validation error. +::: + +## Monitoring Queued Jobs + +Jobs will be queued when all available nodes are busy or when there is no node that matches your job specifications. Let's look at how you can monitor queued jobs. + +Queued jobs will initially display the `Queued` status. Using the `bacalhau job describe` command will show both the state of the job and the reason behind queueing. + +For busy nodes: + +```bash +ID = j-d740ba46-b135-4161-bd79-795c94d215b0 +Name = j-d740ba46-b135-4161-bd79-795c94d215b0 +Namespace = default +Type = batch +State = Queued +Message = Job queued. not enough nodes to run job. requested: 1, available: 3, suitable: 0. +• Node n-b75224b7: node busy with available capacity {CPU: 0.2, Memory: 12 GB, Disk: 79 GB, GPU: 0} + and queue capacity {CPU: 2, Memory: 4.0 GB, Disk: 0 B, GPU: 0} +• Node n-d42422fd: node busy with available capacity {CPU: 0.2, Memory: 12 GB, Disk: 83 GB, GPU: 0} + and queue capacity {CPU: 3, Memory: 1.0 GB, Disk: 0 B, GPU: 0} +• Node n-f50db1f9: node busy with available capacity {CPU: 0.2, Memory: 12 GB, Disk: 83 GB, GPU: 0} +``` + +For no matching nodes: + +```bash +ID = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Name = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Namespace = default +Type = batch +State = Queued +Message = Job queued. not enough nodes to run job. requested: 1, available: 4, suitable: 0. +• 3 of 4 nodes: labels map[Architecture:amd64 Operating-System:linux owner:bacalhau] + don't match required selectors [name = walid] +• Node Qma5yQAk: labels map[Architecture:amd64 GPU-0:Tesla-T4 GPU-0-Memory:15360-MiB + Operating-System:linux owner:bacalhau] don't match required selectors [name = walid] +``` + +Once appropriate node resources become available, these jobs will transition to either a `Running` or `Completed` status, allowing more jobs to be assigned to matching nodes. + +Here's an example of a job's lifecycle from queued to completed: + +```bash +ID = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Name = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Namespace = default +Type = batch +State = Completed +Count = 1 +Created Time = 2024-06-24 13:36:40 +Modified Time = 2024-06-24 13:41:40 +Version = 0 + +Summary +Completed = 1 + +Job History + TIME REV. STATE TOPIC EVENT + 2024-06-24 13:36:40 1 Pending Submission Job submitted + 2024-06-24 13:36:40 2 Queued Queueing Job queued. not enough nodes to run job. requested: 1, + available: 4, suitable: 0. + • 3 of 4 nodes: labels map[Architecture:amd64 + Operating-System:linux owner:bacalhau] + don't match required selectors [name = walid] + • Node Qma5yQAk: labels map[Architecture:amd64 + GPU-0:Tesla-T4 GPU-0-Memory:15360-MiB + Operating-System:linux owner:bacalhau] + don't match required selectors [name = walid] + 2024-06-24 13:39:40 3 Running + 2024-06-24 13:41:40 4 Completed + +Executions + ID NODE ID STATE DESIRED REV. CREATED MODIFIED COMMENT + e-88cb1c72 n-73426e31 Completed Stopped 6 6m5s ago 4m4s ago Accepted job + +Execution e-88cb1c72 History + TIME REV. STATE TOPIC EVENT + 2024-06-24 13:39:40 1 New + 2024-06-24 13:39:40 2 AskForBid + 2024-06-24 15:39:40 3 AskForBidAccepted Requesting Node Accepted job + 2024-06-24 13:39:40 4 AskForBidAccepted + 2024-06-24 13:39:40 5 BidAccepted + 2024-06-24 13:41:40 6 Completed +``` + +## docs/guides/resource-requirements.md + +# Resource Requirements + +This guide covers how to specify resource requirements for your jobs and how to configure resource limits on compute nodes. + +## Understanding Resources in Bacalhau + +Bacalhau manages four key resource types: + +| Resource | Description | Default | Example | +| -------- | --------------------------------------- | ---------------- | -------------- | +| CPU | Processing power in cores or millicores | 500m (0.5 cores) | `--cpu=2` | +| Memory | RAM allocation | 1GB | `--memory=4GB` | +| Disk | Storage space | System dependent | `--disk=10GB` | +| GPU | Number of GPUs | 0 | `--gpu=1` | + +## For Job Submitters: Requesting Resources + +When submitting jobs, you can specify the resources your workload requires. This helps Bacalhau find appropriate compute nodes and allocate sufficient resources. + +### Command Line Specification + +```bash +# Request specific resources +bacalhau docker run \ + --cpu=2 \ + --memory=4GB \ + --disk=10GB \ + ubuntu:latest -- +``` + +### YAML Job Specification + +```yaml +# job.yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Parameters: + - echo + - 'Hello, world!' + Resources: + CPU: '2' + Memory: '4GB' + Disk: '10GB' + GPU: '1' +``` + +Submit using: + +```bash +bacalhau job run job.yaml +``` + +### Resource Formats + +#### CPU + +CPU can be specified in two formats: + +- **Decimal cores**: `--cpu=2` (2 CPU cores) +- **Millicores**: `--cpu=500m` (0.5 CPU cores) + +```bash +# Examples +bacalhau docker run --cpu=4 python:3.9 -- python cpu_heavy_script.py +bacalhau docker run --cpu=250m alpine -- sleep 60 +``` + +#### Memory + +Memory can be specified using different units: + +- `MB` or `M` for megabytes +- `GB` or `G` for gigabytes + +```bash +# Examples +bacalhau docker run --memory=8GB tensorflow/tensorflow -- python model.py +bacalhau docker run --memory=512MB alpine -- sleep 60 +``` + +#### Disk + +For jobs that write large files or process large datasets: + +```bash +# Example +bacalhau docker run --disk=20GB ubuntu -- dd if=/dev/zero of=/outputs/large_file bs=1M count=15000 +``` + +#### GPU + +For GPU-accelerated workloads: + +```bash +# Example +bacalhau docker run --gpu=1 nvidia/cuda:11.6.2-base-ubuntu20.04 -- nvidia-smi +``` + +## GPU Workloads + +### Prerequisites + +To run GPU jobs successfully: + +1. The Bacalhau network must have compute nodes with GPUs +2. Your container must include CUDA runtime compatible with the node's GPU drivers +3. Use a pre-built GPU container (e.g., from NVIDIA's container registry) + +### GPU Type Selection + +Request specific GPU types using constraints: + +```bash +# Request Tesla T4 GPU +bacalhau docker run \ + --gpu=1 \ + --constraints "GPU-0=Tesla-T4" \ + nvidia/cuda -- nvidia-smi +``` + +## For Node Operators: Setting Resource Limits + +Node operators can configure how much of their system resources are allocated to Bacalhau jobs. + +### Configuring Node Resource Limits + +| Configuration Key | Description | Default | Format | +| -------------------------------- | ------------------------------ | ------- | ---------------------------- | +| Compute.AllocatedCapacity.CPU | CPU allocation for jobs | `80%` | Percentage or absolute value | +| Compute.AllocatedCapacity.Memory | Memory allocation for jobs | `80%` | Percentage or absolute value | +| Compute.AllocatedCapacity.Disk | Disk space allocation for jobs | `80%` | Percentage or absolute value | +| Compute.AllocatedCapacity.GPU | GPU allocation for jobs | `100%` | Percentage or absolute value | + +Values can be expressed as: + +- Percentages of total system resources (e.g., `80%`) +- Absolute values (e.g., `16Gi` for memory) + +Example `config.yaml` configuration: + +```yaml +# config.yaml +Compute: + AllocatedCapacity: + CPU: '75%' + Memory: '16Gi' + Disk: '80%' + GPU: '100%' +``` + +### Setting Default Job Resources + +You can configure default resources for jobs that don't specify their own requirements in your `config.yaml` file: + +```yaml +# config.yaml +JobDefaults: + Batch: + Task: + Resources: + Memory: '2Gi' + CPU: '1' + Ops: + Task: + Resources: + CPU: '0.5' +``` + +## Checking Available Resources + +View available resources across your network: + +```bash +bacalhau node list --show capacity +``` + +This helps you understand what resources you can reasonably request. + +## Troubleshooting + +### Common Issues + +1. **Job stays in PENDING state**: You may be requesting more resources than any available node can provide +2. **Out of memory (OOM) errors**: Increase memory allocation or optimize your workload +3. **Disk space errors**: Request more disk space or clean up temporary files +4. **CUDA errors with GPU jobs**: Ensure container compatibility with the node's GPU drivers + +### Windows Support Limitations + +Resource limits have the following limitations on Windows-based nodes: + +- Resource limits are not supported for Docker jobs running on Windows +- Limits will be applied at the job bid stage but not enforced at runtime +- Bacalhau assumes all containers are Linux-based + +## Best Practices + +1. Start with conservative resource estimates and scale up as needed +2. For memory-intensive tasks, add a 20-30% buffer above expected peak usage +3. For disk space, consider both input data size and temporary files +4. Test GPU workloads locally before running on Bacalhau +5. Use monitoring and job logs to fine-tune resource requirements + +## docs/guides/s3-partitioning.md + +# S3 Partitioning + +Bacalhau's S3 partitioning feature builds on the [core partitioning](partitioning.mdx) system to automatically handle data distribution from S3 buckets across multiple job executions. This specialized implementation includes graceful failure handling and independent retry of failed partitions specifically optimized for S3 data sources. + +## Key Benefits + +- **Automatic Data Distribution**: Intelligently distributes S3 objects across partitions +- **Multiple Partitioning Strategies**: Choose from various strategies based on your data organization +- **Clean Processing Logic**: Write code focused on processing, not partitioning +- **Failure Isolation**: Failures are contained to individual partitions +- **Independent Retries**: Failed partitions are retried automatically without affecting successful ones + +## Partitioning Strategies + +Bacalhau supports multiple S3 partitioning strategies to match different data organization patterns: + +### No Partitioning (Shared Data) + +When all executions need access to all the data, omit the partition configuration: + +```yaml +inputSources: + - target: /data + source: + type: s3 + params: + bucket: config-bucket + key: reference-data/ + # No partition config - all executions see all files +``` + +Perfect for: + +- Loading shared reference data +- Processing configuration files +- Running analysis that needs the complete dataset + +### Object-Based Distribution + +Evenly distributes objects across partitions without specific grouping logic: + +```yaml +inputSources: + - target: /uploads + source: + type: s3 + params: + bucket: data-bucket + key: user-uploads/ + partition: + type: object +``` + +Ideal for: + +- Processing large volumes of user uploads +- Handling randomly named files +- Large-scale data transformation tasks + +### Date-Based Partitioning + +Process each day's data in parallel using a configurable date format: + +```yaml +inputSources: + - target: /logs + source: + type: s3 + params: + bucket: app-logs + key: 'logs/*' + partition: + type: date + dateFormat: '2006-01-02' +``` + +Perfect for: + +- Daily analytics processing +- Log aggregation and analysis +- Time-series computations + +### Regex-Based Partitioning + +Distribute data based on patterns in object keys: + +```yaml +inputSources: + - target: /sales + source: + type: s3 + params: + bucket: global-sales + key: 'regions/*' + partition: + type: regex + pattern: '([^/]+)/.*' +``` + +Enables scenarios like: + +- Regional sales analysis +- Geographic data processing +- Territory-specific reporting + +### Substring-Based Partitioning + +Distributes data based on substring segments in object keys: + +```yaml +inputSources: + - target: /segments + source: + type: s3 + params: + bucket: customer-data + key: segments/* + partition: + type: substring + startIndex: 0 + endIndex: 3 +``` + +Perfect for: + +- Customer cohort analysis +- Segment-specific processing +- Category-based computations + +## Combining Partitioned and Shared Data + +You can combine partitioned data with shared reference data in the same job: + +```yaml +inputSources: + - target: /config + source: + type: s3 + params: + bucket: config-bucket + key: reference/* + # No partitioning - all executions see all reference data + - target: /daily-logs + source: + type: s3 + params: + bucket: app-logs + key: logs/* + partition: + type: date + dateFormat: '2006-01-02' +``` + +This pattern supports: + +- Processing daily logs with shared lookup tables +- Analyzing data using common reference files +- Running calculations that need both partitioned data and shared configuration + +## Complete Job Examples + +### Example 1: Object-Based Partitioning + +Here's a complete job specification using object-based partitioning: + +```yaml +name: process-uploads +count: 5 +type: batch +tasks: + - name: process-uploads + engine: + type: docker + params: + image: ubuntu:latest + parameters: + - bash + - -c + - | + echo "Processing partition $BACALHAU_PARTITION_INDEX of $BACALHAU_PARTITION_COUNT" + file_count=$(find /uploads -type f | wc -l) + echo "Found $file_count files to process in this partition" + inputSources: + - target: /uploads + source: + type: s3 + params: + bucket: data-bucket + key: user-uploads/ + partition: + type: object +``` + +### Example 2: Combining Partitioned and Shared Data + +Here's a complete job specification that combines partitioned and shared data sources: + +```yaml +name: daily-analysis +count: 7 # Process a week of data +type: batch +tasks: + - name: daily-analytics + engine: + type: docker + params: + image: ubuntu:latest + parameters: + - bash + - -c + - | + echo "Processing partition $BACALHAU_PARTITION_INDEX of $BACALHAU_PARTITION_COUNT" + echo "Reference data files:" + find /config -type f | sort + echo "Daily log files for this partition:" + find /daily-logs -type f | wc -l + inputSources: + - target: /config + source: + type: s3 + params: + bucket: config-bucket + key: reference/* + # No partitioning - all executions see all reference data + - target: /daily-logs + source: + type: s3 + params: + bucket: app-logs + key: logs/* + partition: + type: date + dateFormat: '2006-01-02' + outputs: + - name: results + path: /outputs +``` + +## Usage + +To run a job with S3 partitioning, define your job with the appropriate partitioning strategy and set the number of partitions with the `count` parameter, then submit: + +```bash +bacalhau job run job-spec.yaml +``` + +## docs/guides/selection-policy.md + +# Selection Policy + +When running a node, you can choose which jobs you want to run by using configuration options, environment variables, or flags to specify a job selection policy. + +| Configuration key | Default value | Meaning | +| --------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------- | +| JobAdmissionControl.Locality | Anywhere | Only accept jobs that reference data we have locally ("local") or anywhere ("anywhere"). | +| JobAdmissionControl.ProbeExec | unused | Use the result of an external program to decide if we should take on the job. | +| JobAdmissionControl.ProbeHTTP | unused | Use the result of a HTTP POST to decide if we should take on the job. | +| JobAdmissionControl.RejectStatelessJobs | False | Reject jobs that don't specify any [input data](../specifications/job/input-source.md). | +| JobAdmissionControl.RejectNetworkedJobs | False | Reject jobs that require [network access](./networking.md). By default, network access is enabled. | + +## Job Selection Probes + +If you want more control over making the decision to take on jobs, you can use the `JobAdmissionControl.ProbeExec` and `JobAdmissionControl.ProbeHTTP` configuration keys. + +These are external programs that are passed the following data structure so that they can make a decision about whether to take on a job: + +```json +{ + "node_id": "XXX", + "job_id": "XXX", + "spec": { + "engine": "docker", + "verifier": "ipfs", + "job_spec_vm": { + "image": "ubuntu:latest", + "entrypoint": ["cat", "/file.txt"] + }, + "inputs": [ + { + "engine": "ipfs", + "cid": "XXX", + "path": "/file.txt" + } + ] + } +} +``` + +The `exec` probe is a script to run that will be given the job data on `stdin`, and must exit with status code 0 if the job should be run. + +The `http` probe is a URL to POST the job data to. The job will be rejected if the HTTP request returns a non-positive status code (e.g. >= 400). + +If the HTTP response is a JSON blob, it should match the [following schema](https://github.com/bacalhau-project/bacalhau/blob/885d53e93b01fb343294d7ddbdbffe89918db800/pkg/bidstrategy/type.go#L18-L22) and will be used to respond to the bid directly: + +```json +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "shouldBid": { + "description": "If the job should be accepted", + "type": "boolean" + }, + "shouldWait": { + "description": "If the node should wait for an async response that will come later. `shouldBid` will be ignored", + "type": "boolean", + "default": false + }, + "reason": { + "description": "Human-readable string explaining why the job should be accepted or rejected, or why the wait is required", + "type": "string" + } + }, + "required": ["shouldBid", "reason"] +} +``` + +For example, the following response will reject the job: + +```json +{ + "shouldBid": false, + "reason": "The job did not pass this specific validation: ..." +} +``` + +If the HTTP response is not a JSON blob, the content is ignored and any non-error status code will accept the job. + +## docs/guides/timeouts.md + +# Timeouts + +This guide explains how Bacalhau uses timeouts to manage job execution duration, protecting both users and compute resources from problematic jobs. + +## Understanding Timeouts + +Timeouts in Bacalhau set limits on how long a job can run before being automatically terminated. They serve several important purposes: + +1. **Resource Protection**: Prevent runaway jobs from consuming resources indefinitely +2. **Fair Scheduling**: Ensure compute nodes remain available for other jobs +3. **Error Recovery**: Help identify and abort jobs that are stuck in infinite loops +4. **QoS Management**: Allow operators to define service levels for different job types + +## Timeout Types + +Bacalhau supports several types of timeouts: + +| Timeout Type | Description | +| ----------------- | ------------------------------------------------------ | +| Execution Timeout | Maximum time a job can spend in execution | +| Queue Timeout | Maximum time a job can wait for resources | +| Total Timeout | Overall maximum lifespan of a job including queue time | + +## For Job Submitters: Setting Timeouts + +When submitting jobs, you can specify timeouts to control job duration. + +### Command Line Specification + +```bash +# Set execution timeout to 30 minutes (1800 seconds) +bacalhau docker run --timeout 1800 ubuntu:latest -- + +# Set queue timeout (how long to wait for resources) +bacalhau docker run --queue-timeout 600 ubuntu:latest -- +``` + +### YAML Job Specification + +```yaml +# timeout-job.yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Parameters: + - sleep + - '300' + Timeouts: + ExecutionTimeout: 1800 # 30 minutes in seconds + QueueTimeout: 600 # 10 minutes in seconds +``` + +Submit using: + +```bash +bacalhau job run timeout-job.yaml +``` + +### Timeout Behavior + +Different timeout types affect job execution in different ways: + +- **Execution Timeout**: When reached, the current execution is terminated. If the Total Timeout hasn't been reached, the job may be rescheduled on another available node. + +- **Total Timeout**: When reached, the job is completely terminated across all nodes, no results are published, and the job status is marked as `Failed` with a timeout message. + +- **Queue Timeout**: When reached, a job waiting for resources will fail rather than continue waiting indefinitely. + +This approach provides resilience for intermittent failures while still protecting the system from problematic jobs. + +## For Node Operators: Configuring Timeout Limits + +Compute node operators can configure default and maximum timeout values for their nodes. + +### Node Timeout Configuration + +Node operators can set default and maximum timeouts in the `config.yaml` file: + +```yaml +# config.yaml +JobDefaults: + Batch: + Task: + Timeouts: + # Default timeout for batch jobs (1 hour) + ExecutionTimeout: '1h' + # Maximum allowed timeout (4 hours) + TotalTimeout: '4h' + Ops: + Task: + Timeouts: + # Default timeout for ops jobs (30 minutes) + ExecutionTimeout: '30m' + # Maximum allowed timeout (2 hours) + TotalTimeout: '2h' +``` + +### Configuration Format + +Timeout values should be specified with a numeric value followed by a time unit: + +- `s` for seconds +- `m` for minutes +- `h` for hours + +For example: `30m`, `2h`, or `3600s` + +### Job Type Support + +Timeouts can be configured for these job types: + +- Batch jobs +- Ops jobs + +Note: Timeout configuration is not available for Daemon and Service jobs, which are designed to run continuously. + +## Queue Timeouts + +Queue timeouts control how long a job will wait for suitable resources before failing: + +```bash +# Set queue timeout to 15 minutes +bacalhau docker run --queue-timeout 900 ubuntu -- +``` + +In YAML: + +```yaml +Timeouts: + QueueTimeout: 900 # seconds +``` + +This is useful when: + +- Your job has specific resource requirements +- You want to fail fast if resources aren't available +- You have time-sensitive workloads + +## Balancing Timeout Values + +Setting appropriate timeouts requires balancing several factors: + +1. **Job Duration**: How long your job actually needs to run +2. **Resource Usage**: Longer timeouts tie up resources for extended periods +3. **Network Stability**: Account for possible interruptions or slowdowns +4. **Data Size**: Consider the size of input/output data when setting timeouts + +## Best Practices + +1. **Set Realistic Timeouts**: Allow enough time for your job to complete, plus a buffer +2. **Use Queue Timeouts**: For time-sensitive jobs, set reasonable queue timeouts +3. **Test and Adjust**: Monitor job execution times and refine timeout values +4. **Document Timeout Requirements**: Include timeout information in job documentation +5. **Consider Resource Impact**: Shorter timeouts help prevent resource monopolization + +## Troubleshooting + +If your jobs are timing out unexpectedly: + +1. **Review Job Logs**: Check logs to understand where time is being spent +2. **Optimize Performance**: Look for ways to speed up your job +3. **Check Resource Allocation**: Insufficient resources can slow job execution +4. **Segment Large Jobs**: Break very large jobs into smaller, faster parts +5. **Verify Node Settings**: Node operators may have maximum timeout limits + +## docs/guides/webui.md + +# Web UI + +## Overview + +The Bacalhau WebUI offers an intuitive graphical interface for monitoring and managing your Bacalhau deployment. This guide provides comprehensive instructions for setting up, configuring, and utilizing the WebUI. + +## Getting Started + +### Enabling the WebUI + +The WebUI is disabled by default. To enable it: + +```bash +bacalhau config set WebUI.Enabled=true +``` + +:::note +You need to restart your Bacalhau node after enabling the WebUI for changes to take effect. +::: + +### Network Configuration + +By default, the WebUI listens on `0.0.0.0:8438` (all network interfaces). You can customize this: + +```bash +bacalhau config set WebUI.Listen=127.0.0.1:8438 # Local access only +# or +bacalhau config set WebUI.Listen=192.168.1.100:9000 # Custom IP and port +``` + +### Security Considerations + +When exposing the WebUI beyond localhost: + +- Consider setting up a reverse proxy with TLS +- Implement proper network security controls +- Be aware that the WebUI does not currently have authentication + +## Accessing the WebUI + +Once your Bacalhau node is running with the WebUI enabled, access it by opening a web browser and navigating to: + +``` +http://localhost:8438 +``` + +Or use the IP address and port you configured. + +![Bacalhau WebUI Dashboard](/img/webui-dashboard.png) + +## Main Features + +### Dashboard + +The Dashboard provides a quick overview of your Bacalhau deployment, including: + +- System status +- Resource utilization +- Recent job statistics +- Active node count + +### Jobs Management + +The Jobs page allows you to: + +- View all jobs with filtering and sorting options +- Monitor job status (Pending, Running, Completed, Failed) +- See job details including runtime, type, and error messages +- Access job-specific information and logs + +#### Job Details + +Click on any job ID to open the detailed view where you can: + +- View the complete job history and event timeline +- See execution details across all nodes +- Access real-time logs for debugging +- Examine resource utilization +- View job specifications and parameters + +### Node Management + +The Nodes page provides visibility into your cluster: + +- View all nodes in your Bacalhau deployment +- See node type (Compute, Requester, or Both) +- Monitor membership and connection status +- View available and total resources per node +- See node labels for job targeting + +#### Node Details + +Click on any node ID to access: + +- Detailed node status and health metrics +- Configuration settings +- Currently running and scheduled jobs +- Resource allocation and availability +- Connection history + +## Troubleshooting with the WebUI + +The WebUI is a valuable tool for diagnosing issues: + +- Check job logs for error messages +- Verify node availability and resource capacity +- Examine job constraints against available node labels +- Monitor resource utilization across the cluster + +## Integration with CLI + +The WebUI complements the Bacalhau CLI: + +- Use the CLI for job submission and automation +- Use the WebUI for monitoring and visual inspection +- Both tools access the same underlying API + +## docs/references/developers/running-locally.md + +# Running Locally with Devstack + +Bacalhau's devstack provides a quick way to spin up a local testing environment with multiple nodes. This is perfect for development, testing, or simply exploring Bacalhau's capabilities without setting up a full production environment. + +## Prerequisites + +- **Docker Engine**: Must be installed and running +- **Bacalhau**: Latest version installed + +## Installation + +If you haven't installed Bacalhau yet: + +```bash +curl -sL https://get.bacalhau.org/install.sh | bash +``` + +## Starting the Devstack + +Starting a local devstack is as simple as: + +```bash +bacalhau devstack +``` + +When initialization completes, you'll see a confirmation message: + +``` +Devstack is ready! +No. of requester only nodes: 1 +No. of compute only nodes: 3 +No. of hybrid nodes: 0 +``` + +## Using Your Devstack + +By default, devstack configures the orchestrator to run on the standard port (1234), so you can immediately use it without additional settings. Open a new terminal window and test your connection: + +```bash +bacalhau node list +``` + +You should see the nodes in your devstack: + +``` +ID TYPE APPROVAL STATUS LABELS +node-0 Requester APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-0 name=node-0 +node-1 Compute APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-1 name=node-1 +node-2 Compute APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-2 name=node-2 +node-3 Compute APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-3 name=node-3 +``` + +## Running a Simple Job + +Submit a simple job to test your devstack: + +```bash +bacalhau docker run alpine echo "hello devstack" +``` + +Note that no publisher is needed for basic testing - Bacalhau will handle the job execution without storing results to any external location. + +## Advanced Configuration + +Devstack accepts the same configuration options as the `bacalhau serve` command. Here are some useful configuration examples: + +### Customizing Resource Limits + +Limit the CPU and memory allocation for compute nodes: + +```bash +bacalhau devstack -c Compute.AllocatedCapacity.CPU="50%" -c Compute.AllocatedCapacity.Memory="2Gi" +``` + +### Configuring Job Defaults + +Set default resource requirements for all batch jobs: + +```bash +bacalhau devstack -c JobDefaults.Batch.Task.Resources.CPU="250m" -c JobDefaults.Batch.Task.Resources.Memory="512Mb" +``` + +## Accessing the Web UI + +The Web UI is enabled by default in devstack for easier monitoring and management. Access it by opening your browser and navigating to: + +``` +http://localhost:8438 +``` + +The Web UI allows you to: + +- View all running and completed jobs +- Inspect node status and resources +- Monitor job execution details and logs + +## Stopping Devstack + +When you're done, simply press `Ctrl+C` in the terminal where devstack is running to shut everything down. + +## docs/references/developers/workload-onboarding/docker.md + +# Docker Containers + +This guide explains how to use existing Docker containers and create custom ones for your Bacalhau workloads. + +## Prerequisites + +1. [Install the Bacalhau client](/getting-started/installation.mdx) +2. [Docker](https://docs.docker.com/install/) (for both building custom containers and running on compute nodes) + +## Understanding Docker Workloads in Bacalhau + +Bacalhau uses a syntax that closely resembles Docker, allowing you to utilize the same containers. + +### Example: Docker Command + +```bash +docker run alpine echo "Hello from Docker" +``` + +### Equivalent Bacalhau Command + +```bash +bacalhau docker run alpine echo "Hello from Bacalhau" +``` + +### Getting Job Results + +```bash +# View job logs +bacalhau job logs JOB_ID + +# Get detailed job information +bacalhau job describe JOB_ID +``` + +:::warning[Requirements for Docker Containers] + +Containers must be published to a registry that is accessible to your Bacalhau nodes + +::: + +## Creating a Custom Container + +Let's walk through creating a simple custom Docker container for Bacalhau. + +### Step 1: Create Your Container Files + +Create a simple Dockerfile: + +```dockerfile +FROM alpine:latest +RUN echo '#!/bin/sh\necho "Hello from $1"' > /usr/local/bin/greet && \ + chmod +x /usr/local/bin/greet +``` + +### Step 2: Build and Test Your Container Locally + +Build your Docker image: + +```bash +docker build -t your-registry/simple-greeter:latest . +``` + +Test it locally: + +```bash +docker run --rm your-registry/simple-greeter:latest sh -c 'greet "Local Test"' +``` + +### Step 3: Push Your Container to a Registry + +```bash +# For multi-architecture support (recommended) +docker buildx build --platform linux/amd64,linux/arm64 --push -t your-registry/simple-greeter:latest . + +# For single architecture +docker push your-registry/simple-greeter:latest +``` + +## Running Your Custom Container on Bacalhau + +Run your container on Bacalhau: + +```bash +bacalhau docker run your-registry/simple-greeter:latest \ + sh -c 'greet "Bacalhau"' +``` + +View your job logs: + +```bash +bacalhau job logs JOB_ID +``` + +## docs/references/developers/workload-onboarding/wasm.md + +# WebAssembly (Wasm) + +Bacalhau supports running programs compiled to [WebAssembly (Wasm)](https://webassembly.org/). This guide explains how to run Wasm programs on Bacalhau. + +## Prerequisites + +1. [Install the Bacalhau client](/getting-started/installation.mdx) +2. A Wasm program compiled for WebAssembly System Interface (WASI) Snapshot 1 + +## Limitations + +- Supports only WASI Snapshot 1 compatible programs +- No multi-threading (WASI doesn't expose interfaces for it) + +## Running a Wasm Program + +### Basic Usage + +Run a local Wasm file: + +```bash +bacalhau wasm run program.wasm +``` + +Run a program with arguments: + +```bash +bacalhau wasm run program.wasm arg1 arg2 +``` + +Run with environment variables: + +```bash +bacalhau wasm run program.wasm -e VAR1=value1 -e VAR2=value2 +``` + +### Working with Input Data + +Provide input data from a URL: + +```bash +bacalhau wasm run program.wasm --input https://example.com/data.txt:/inputs/data.txt +``` + +Provide input data from a local file: + +```bash +bacalhau wasm run program.wasm --input ./local-file.txt:/inputs/file.txt +``` + +### Working with Output Data + +Wasm programs can write output to: + +- Standard output (stdout) +- The filesystem at `/outputs` (default output location) +- Custom output locations specified with the `-o` flag + +```bash +bacalhau wasm run program.wasm -o results:/custom/path +``` + +## Creating Wasm Programs for Bacalhau + +### 1. Use Filesystem Operations Instead of Network Calls + +Wasm programs on Bacalhau can't make network requests. Instead: + +- Read input data from the filesystem (typically `/inputs`) +- Write output data to the filesystem (typically `/outputs`) + +### 2. Compile Your Program for WASI + +You need to compile your program to be WASI-compatible. For example, with Rust: + +```bash +rustup target add wasm32-wasi +cargo build --target wasm32-wasi --release +``` + +The resulting Wasm file can be run on Bacalhau. + +## Viewing Job Results + +Check job status: + +```bash +bacalhau job list --id-filter JOB_ID +``` + +View job output: + +```bash +bacalhau job logs JOB_ID +``` + +See job details: + +```bash +bacalhau job describe JOB_ID +``` + +## docs/references/help-and-faq/faqs.md + +# FAQs + +## What is compute over data? + +Compute over data is an architecture that runs processing near the systems where data is generated or stored. It reduces unnecessary data transfer by sending workload instructions to the data location and returning only the required results. + +## What is Bacalhau? + +Bacalhau is an open-source distributed compute orchestration framework. An orchestrator schedules jobs, and compute nodes execute those jobs close to their input data across edge, on-premises, and cloud environments. + +## When should I use Bacalhau? + +Use Bacalhau when moving raw data to a central compute system is slow, expensive, unreliable, or restricted. Common workloads include distributed log processing, fleet operations, regional analytics, machine learning, and processing data at the edge. + +## Does Bacalhau require data to move to a central cluster? + +No. Bacalhau can schedule a workload on compute nodes near local or remote data sources. A job can process data in place and publish only its output, although the exact data movement depends on the input source, job specification, and selected compute node. + +## Is Bacalhau open source? + +Yes. The Bacalhau source code is available on [GitHub](https://github.com/bacalhau-project/bacalhau) under the [Apache 2.0 license](https://github.com/bacalhau-project/bacalhau/blob/main/LICENSE). + +## Which workload formats can Bacalhau run? + +Bacalhau supports Docker containers and WebAssembly modules. Existing containerized tools can usually run without being rewritten, while WebAssembly provides a lightweight execution option for compatible workloads. + +## How do I restrict what nodes my jobs run on? + +You can describe each node with labels in a `key=value` format, which can later be used as conditions for choosing nodes to run your jobs on: + +```bash +bacalhau config set Labels=NodeType=WebServer +``` + +For multiple labels, use comma-separated values: + +```bash +bacalhau config set Labels=foo=bar,baz=qaz +``` + +## How do I specify the orchestrator for my compute node? + +The `Compute.Orchestrator` field in the config tells the Bacalhau compute node where to connect: + +```bash +bacalhau config set Compute.Orchestrators=my-great-orchestrator.com +``` + +You can add protocol and port if needed: + +```bash +bacalhau config set Compute.Orchestrators=nats://my-great-orchestrator.com:4222 +``` + +## How do I enable the WebUI? + +By default, the WebUI for Bacalhau is disabled for security reasons. To enable it: + +```bash +bacalhau config set WebUI.Enabled=true +``` + +## Can I run non-Docker jobs? + +Yes! You can run programs using WebAssembly instead. Refer to the [WebAssembly onboarding documentation](../../references/developers/workload-onboarding/wasm.md) for instructions. + +## How do I see a job's progress while it's running? + +Use the job describe command with your job ID: + +```bash +bacalhau job describe b4491a4a-7b55-4fa7-a5af-80f3c99bc379 +``` + +If your job writes to stdout or stderr while running, you can also view the output with the `logs` command. + +## Can I stop a running job? + +Yes. Given a valid `job ID`, you can use the `stop` command to cancel the job and stop it from running: + +```bash +bacalhau job stop +``` + +## docs/references/help-and-faq/glossary.md + +# Glossary + +## Compute Node + +A Compute Node in the Bacalhau platform is responsible for executing jobs and producing results. These nodes are part of a private network that allows workload distribution and communication between computers. Compute Nodes handle various types of jobs based on their capabilities and resources. They work in tandem with Requester Nodes, which manage user requests, discover and rank Compute Nodes and monitor job lifecycles. + +## CLI (Command Line Interface) + +A CLI (Command Line Interface) in the Bacalhau platform is a tool that allows users to interact with Bacalhau through text-based commands entered into a terminal or command prompt. The CLI provides a set of commands for managing and executing various tasks on the platform, including submitting jobs, monitoring job status, managing nodes and configuring the environment. + +## Data Source + +A Data Source in Bacalhau refers to the origin of the data used in jobs. This can include various types of storage such as IPFS, S3, local files or URLs. Data sources are specified in the job configuration and are essential for providing the necessary input data for job execution. + +## Docker + +Docker in Bacalhau refers to the use of Docker containers to package and run applications. Docker provides a standardized unit of software, enabling users to create and manage containers efficiently. Bacalhau supports running Docker workloads, allowing users to utilize containerized applications seamlessly on the platform. + +## IPFS + +The InterPlanetary File System (IPFS) is a protocol and peer-to-peer network for storing and sharing data in a distributed file system. In Bacalhau, IPFS is used as a data source and a way to distribute job inputs and outputs, leveraging its decentralized nature for efficient data management. + +## Job + +A Job in the Bacalhau platform is a unit of work that a user submits for execution. Jobs can be simple tasks or complex workflows involving multiple steps. They are defined by specifications that include the job type, resources required and input/output data. Jobs are managed by Requester Nodes, which ensure they are distributed to appropriate Compute Nodes for execution. + +## Job Results + +Job Results are the output generated after a job has been executed on a Compute Node. These results can include processed data, logs and any other relevant output files. Results are often stored in specified locations such as IPFS or S3, allowing users to retrieve and utilize them after job completion. + +## Node + +A Node in the Bacalhau is a fundamental component of the network, responsible for executing and managing jobs. A Node is the Bacalhau entity installed Nodes can be classified into different types based on their roles, such as Compute Nodes and Requester Nodes. Each node operates as part of a decentralized network, allowing distributed processing and resource management. + +## Node Management + +Node Management in Bacalhau involves configuring and maintaining the nodes within the network, including both Compute Nodes and Requester Nodes. This includes tasks like onboarding new nodes, managing node resources, setting access controls and ensuring nodes meet operational standards for job execution. + +## Network + +In the context of the Bacalhau, a Network refers to the interconnected system of nodes that collaborate to execute jobs, manage data and maintain communication. This network is decentralized, meaning it does not rely on a central authority, which enhances its robustness, scalability and efficiency. + +## Network Specification + +The Network Specification in Bacalhau defines the network requirements and settings for job execution. This includes configurations for network access, data transfer protocols and connectivity between nodes. Proper network specification ensures that jobs can communicate effectively and access necessary resources. + +## Workload Onboarding + +Workload Onboarding in Bacalhau is the process of preparing and integrating different types of workloads for execution on the platform. This involves setting up environments for various programming languages, configuring containers and ensuring workloads are optimized for execution across the distributed network of Compute Nodes. + +## WebAssembly (WASM) + +WebAssembly (WASM) in Bacalhau is a binary instruction format for a stack-based virtual machine. WASM is designed for safe and efficient execution, making it a suitable target for compilation from high-level languages. Bacalhau supports running WASM workloads, enabling efficient execution of lightweight and portable code. + +## Requestor Node + +A Requester Node in the Bacalhau platform is responsible for handling user requests, discovering and ranking Compute Nodes, forwarding jobs to these nodes and monitoring the lifecycle of the jobs. Requester Nodes play a crucial role in managing the flow of tasks and ensuring they are executed efficiently by the appropriate Compute Nodes in the network. + +## S3 + +Amazon Simple Storage Service (S3) is a scalable object storage service. Bacalhau supports S3 as a data source, allowing users to store and retrieve input and output data for jobs. S3's integration with Bacalhau provides robust and reliable storage options for large-scale data processing tasks. + +## docs/references/help-and-faq/troubleshooting.md + +# Troubleshooting + +This guide provides solutions for common issues encountered by Bacalhau users. By understanding these troubleshooting scenarios, you'll be able to create more reliable jobs and workflows. + +## What You'll Learn + +- How to diagnose and resolve common Bacalhau job issues +- Strategies for debugging stuck, failed, or misbehaving jobs +- Best practices to prevent common problems + +## Job Lifecycle Issues + +### Jobs Stuck in Pending State + +One of the most common issues users encounter is jobs remaining in the "Pending" state and never executing. + +### Possible Causes + +- **No available nodes**: No compute nodes are connected to the orchestrator +- **Resource constraints too high**: Requesting more CPU, memory, or GPU than any available node can provide +- **Mismatched node selector**: Job requirements don't match available node capabilities +- **Network partitioning**: Orchestrator can't communicate with compute nodes + +### Diagnosis + +Check the job status and specifications for clues: + +```bash +bacalhau job describe +# For more detailed information in YAML format +bacalhau job describe --output yaml +``` + +Look for status messages that might indicate scheduling issues. + +Check available compute nodes: + +```bash +bacalhau node list +``` + +Ensure there are active compute nodes with sufficient resources. + +### Solutions + +1. **Reduce resource requests**: Lower CPU, memory, or GPU requirements +2. **Add more compute nodes**: Add capacity to your cluster +3. **Check network connectivity**: Ensure nodes can communicate with each other +4. **Modify job requirements**: Adjust constraints to match available resources + +## Input Data Access Issues + +Problems accessing or mounting input data are another common source of failures. + +### Possible Causes + +- **Wrong path or URL**: Incorrect or inaccessible source location +- **Missing credentials**: No or invalid authentication for S3 or private URLs +- **Network limitations**: Compute node can't reach data source +- **Path mapping errors**: Incorrect source-to-destination mapping + +### Diagnosis + +Check job specs and status: + +```bash +bacalhau job describe --output yaml +``` + +If the job started but failed during execution, check logs: + +```bash +bacalhau job logs +``` + +Look for messages like "file not found" or "access denied". + +### Solutions + +1. **Validate paths**: Double-check that source paths, URLs, or S3 buckets exist and are accessible +2. **Check credentials**: Ensure proper environment variables or configuration for authenticated sources +3. **Test connectivity**: Verify the compute node can reach the data source +4. **Local testing**: Test data access locally before running on Bacalhau + +Example of corrected input mounting: + +```bash +# INCORRECT (missing file) +bacalhau docker run --input /path/does/not/exist:/data ubuntu:latest -- cat /data/file.txt + +# CORRECT +bacalhau docker run --input /path/that/exists:/data ubuntu:latest -- cat /data/file.txt +``` + +## No Output Found + +Jobs complete successfully, but expected output files are missing. + +### Possible Causes + +- **Wrong output path**: Not writing to the `/outputs` directory +- **Command errors**: The job ran but the command failed to produce output +- **Permission issues**: Container user can't write to output location +- **Publisher configuration**: Publisher not configured correctly + +### Diagnosis + +Check job specification and execution details: + +```bash +bacalhau job describe --output yaml +``` + +If the job executed, check logs for clues about what the job did: + +```bash +bacalhau job logs +``` + +Verify your job actually wrote to the `/outputs` directory. + +### Solutions + +1. **Use absolute paths**: Always use absolute paths in your commands +2. **Write to `/outputs`**: Ensure your job writes to the `/outputs` directory specifically +3. **Add debugging**: Add commands to list directories and print current working directory +4. **Check permissions**: Ensure your process has permission to write to the output location + +### Examples + +```bash +# INCORRECT (writing to wrong location) +bacalhau docker run ubuntu:latest -- echo "Hello" > result.txt + +# CORRECT +bacalhau docker run ubuntu:latest -- bash -c 'echo "Hello" > /outputs/result.txt' +``` + +## Container and Resource Issues + +### Container Errors + +Issues with container execution or container image availability. + +#### Possible Causes + +- **Image not found**: The specified container image doesn't exist or is inaccessible +- **Command errors**: The command specified doesn't exist in the container +- **Resource limitations**: The container runs out of resources during execution +- **Exit codes**: The container process exits with a non-zero code + +#### Diagnosis + +Check job specification for container configuration: + +```bash +bacalhau job describe --output yaml +``` + +If the container started, check logs for execution errors: + +```bash +bacalhau job logs +``` + +Look for messages about image pulling or command execution. + +#### Solutions + +1. **Verify image exists**: Check that the image name is correct and accessible +2. **Test locally**: Try running the container locally with Docker first +3. **Check command**: Ensure the command exists in the container and has correct syntax +4. **Adjust resources**: Provide sufficient CPU, memory, and disk for your workload + +Example of corrected container image: + +```bash +# INCORRECT (typo in image name) +bacalhau docker run ubuntuu:latest -- echo "Hello" + +# CORRECT +bacalhau docker run ubuntu:latest -- echo "Hello" + +# CORRECT (with specific image version) +bacalhau docker run ubuntu:20.04 -- echo "Hello" +``` + +### Resource Exhaustion + +Jobs fail because they run out of resources during execution. + +#### Possible Causes + +- **Out of memory (OOM)**: Job exceeds allocated memory +- **Disk space exhaustion**: Job writes more data than allocated disk space +- **CPU thrashing**: Insufficient CPU allocation causes extreme slowdown +- **GPU memory errors**: CUDA out of memory errors for GPU jobs + +#### Diagnosis + +Check job specification and status: + +```bash +bacalhau job describe --output yaml +``` + +If the job executed, check logs for error messages: + +```bash +bacalhau job logs +``` + +Look for error messages about memory, disk space, or resource limits. + +#### Solutions + +1. **Increase resources**: Allocate more memory, CPU, or disk space +2. **Optimize code**: Reduce resource usage in your application +3. **Process in batches**: Break large workloads into smaller chunks +4. **Clean up temporary files**: Remove unneeded files during processing + +Example of increased resource allocation: + +```bash +# Increased memory allocation +bacalhau docker run --memory 4GB python:3.9 -- python memory_intensive_script.py + +# Increased disk space +bacalhau docker run --disk 20GB ubuntu:latest -- dd if=/dev/zero of=/outputs/large_file bs=1M count=15000 +``` + +## Command and Syntax Issues + +### Command Line Parsing Issues + +Problems related to how commands and arguments are passed to containers. + +### Possible Causes + +- **Missing separator**: No `--` between Bacalhau flags and container command +- **Quote handling**: Issues with shell quotes and argument passing +- **Special characters**: Problems with special characters in commands + +### Diagnosis + +Check the exact command being executed: + +```bash +bacalhau job describe --output yaml +``` + +Look at the command fields to see what was actually executed. + +### Solutions + +1. **Use the separator**: Always use `--` between Bacalhau flags and the container command +2. **Quote properly**: Be careful with nested quotes in shell commands +3. **Use bash -c**: For complex commands, wrap them in `bash -c '...'` +4. **Use yaml specs**: For very complex commands, use declarative YAML specifications + +Example of corrected command syntax: + +```bash +# INCORRECT (missing separator) +bacalhau docker run ubuntu:latest echo "Hello" + +# CORRECT +bacalhau docker run ubuntu:latest -- echo "Hello" + +# CORRECT (complex command) +bacalhau docker run ubuntu:latest -- bash -c 'for i in {1..5}; do echo "Number $i"; done > /outputs/result.txt' +``` + +## docs/references/operators/configuration-reference.md + +# Configuration Reference + +This document serves as the comprehensive reference for all Bacalhau configuration options. You can set these values using a YAML file or the command line. + +## Setting Configuration + +```bash +# Using a configuration file +bacalhau serve --config config.yaml + +# Using command-line options +bacalhau serve -c NameProvider=hostname -c Labels="region=us-west" + +# Combining approaches +bacalhau serve --config base-config.yaml -c WebUI.Enabled=true +``` + +## Example Configurations + +Below are example configurations for the two primary node types in Bacalhau. + +### Compute Node Example + +This example shows a configuration for a compute node that connects to orchestrators: + +```yaml +# Basic node identification +NameProvider: 'hostname' +Labels: + region: 'us-west' + environment: 'production' + +# Compute node settings +Compute: + # Enable compute capabilities + Enabled: true + + # Connect to these orchestrators + Orchestrators: + - 'nats://orchestrator-1.example.com:4222' + + # Local paths that can be mounted + AllowListedLocalPaths: + - '/data:/data:ro' # Read-only access + - '/outputs:/outputs:rw' # Read-write access + + # Security settings + Auth: + Token: 'secure-access-token' + + # Resource allocation + AllocatedCapacity: + CPU: '80%' # Dedicate 80% of CPU to jobs + Memory: '80%' # Dedicate 80% of memory to jobs + Disk: '80%' # Dedicate 80% of disk to jobs + GPU: '100%' # Dedicate all GPUs to jobs + +# Reject jobs with network access +JobAdmissionControl: + RejectNetworkedJobs: true + +# Default resources for jobs +JobDefaults: + Batch: + Task: + Resources: + CPU: '500m' + Memory: '512Mb' + Timeouts: + ExecutionTimeout: '1h' +``` + +### Orchestrator Node Example + +This example shows a configuration for an orchestrator node that manages compute nodes: + +```yaml +# Basic node identification +NameProvider: 'hostname' +Labels: + region: 'us-west' + environment: 'production' + +# API configuration +API: + Host: '0.0.0.0' + Port: 1234 + TLS: + UseTLS: true + CertFile: '/etc/bacalhau/certs/server.crt' + KeyFile: '/etc/bacalhau/certs/server.key' + +# Orchestrator settings +Orchestrator: + # Enable orchestrator capabilities + Enabled: true + + # Listen on all interfaces + Host: '0.0.0.0' + Port: 4222 + + # Security settings + Auth: + Token: 'secure-access-token' + + # Node management + NodeManager: + DisconnectTimeout: '1m' + + # Job scheduling + Scheduler: + WorkerCount: 4 # 4 concurrent schedulers + QueueBackoff: '30s' + +# Default resources for jobs +JobDefaults: + Batch: + Task: + Resources: + CPU: '500m' + Memory: '512Mb' + +# Enable Web UI for monitoring +WebUI: + Enabled: true + Listen: '0.0.0.0:8438' +``` + +## All Configuration Options + +The following table lists all configuration options in alphabetical order. + +| Configuration Key | Default Value | Description | +| -------------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------- | +| `API.Auth.AccessPolicyPath` | `""` | Path to policy file for API access control | +| `API.Auth.Methods` | `{"ClientKey":{"Type":"challenge"}}` | Authentication methods mapping | +| `API.Auth.Oauth2` | `{}` | OAuth 2.0 configuration | +| `API.Auth.Users` | `[]` | List of users for basic authentication | +| `API.Host` | `"0.0.0.0"` | Hostname or IP address on which the API server listens | +| `API.Port` | `1234` | Port number on which the API server listens | +| `API.TLS.AutoCert` | `""` | Domain for automatic certificate generation | +| `API.TLS.AutoCertCachePath` | `""` | Directory to cache auto-generated certificates | +| `API.TLS.CAFile` | `""` | Path to Certificate Authority file | +| `API.TLS.CertFile` | `""` | Path to TLS certificate file | +| `API.TLS.Insecure` | `false` | Allow insecure TLS connections | +| `API.TLS.KeyFile` | `""` | Path to TLS private key file | +| `API.TLS.SelfSigned` | `false` | Use self-signed certificate | +| `API.TLS.UseTLS` | `false` | Enable TLS for API server | +| `Compute.AllocatedCapacity.CPU` | `"80%"` | CPU allocation (percentage or absolute) | +| `Compute.AllocatedCapacity.Disk` | `"80%"` | Disk allocation (percentage or absolute) | +| `Compute.AllocatedCapacity.GPU` | `"100%"` | GPU allocation (percentage or absolute) | +| `Compute.AllocatedCapacity.Memory` | `"80%"` | Memory allocation (percentage or absolute) | +| `Compute.AllowListedLocalPaths` | `[]` | Local paths allowed for mounting in format `path[:mode]`. Mode can be `ro` (read-only) or `rw` (read-write) | +| `Compute.Auth.Token` | `""` | Token for orchestrator access | +| `Compute.Enabled` | `false` | Enable compute capabilities | +| `Compute.Heartbeat.InfoUpdateInterval` | `"1m"` | Interval for updating node information | +| `Compute.Heartbeat.Interval` | `"15s"` | Interval between heartbeats sent to orchestrator | +| `Compute.Network.AdvertisedAddress` | `""` | Address that this compute node advertises to other nodes | +| `Compute.Network.PortRangeEnd` | `32000` | Last port in the range (inclusive) that can be allocated to jobs | +| `Compute.Network.PortRangeStart` | `20000` | First port in the range (inclusive) that can be allocated to jobs | +| `Compute.Orchestrators` | `["nats://127.0.0.1:4222"]` | List of orchestrator endpoints | +| `Compute.TLS.CACert` | `""` | CA certificate path for verifying orchestrator | +| `Compute.TLS.RequireTLS` | `false` | Require TLS for orchestrator communication | +| `DataDir` | `~/.bacalhau` | Location on disk for Bacalhau state | +| `DisableAnalytics` | `false` | Disable sharing anonymous analytics data | +| `Engines.Disabled` | `[]` | List of disabled execution engines | +| `Engines.Types.Docker.ManifestCache.Refresh` | `"1h"` | Refresh interval for cache entries | +| `Engines.Types.Docker.ManifestCache.Size` | `1000` | Size of Docker manifest cache | +| `Engines.Types.Docker.ManifestCache.TTL` | `"1h"` | Time-to-live for cache entries | +| `InputSources.Disabled` | `[]` | List of disabled input source types | +| `InputSources.MaxRetryCount` | `3` | Maximum retry attempts for source access | +| `InputSources.ReadTimeout` | `"5m"` | Timeout for reading from sources | +| `InputSources.Types.IPFS.Endpoint` | `""` | IPFS API endpoint for input sources | +| `JobAdmissionControl.AcceptNetworkedJobs` | `false` | Accept jobs that require network access | +| `JobAdmissionControl.Locality` | `"Anywhere"` | Data locality requirement: `"Anywhere"` or `"Local"` | +| `JobAdmissionControl.ProbeExec` | `""` | External program path for job admission decisions | +| `JobAdmissionControl.ProbeHTTP` | `""` | HTTP endpoint for job admission decisions | +| `JobAdmissionControl.RejectStatelessJobs` | `false` | Reject jobs without input data | +| `JobDefaults.Batch.Priority` | `0` | Default priority for batch jobs | +| `JobDefaults.Batch.Task.Publisher.Params` | `{}` | Default publisher parameters for batch jobs | +| `JobDefaults.Batch.Task.Publisher.Type` | `""` | Default publisher type for batch jobs (e.g., "s3", "ipfs") | +| `JobDefaults.Batch.Task.Resources.CPU` | `"500m"` | Default CPU for batch jobs (500m = 0.5 cores) | +| `JobDefaults.Batch.Task.Resources.Disk` | `""` | Default disk space for batch jobs | +| `JobDefaults.Batch.Task.Resources.GPU` | `""` | Default GPU count for batch jobs | +| `JobDefaults.Batch.Task.Resources.Memory` | `"512Mb"` | Default memory for batch jobs | +| `JobDefaults.Batch.Task.Timeouts.ExecutionTimeout` | `""` | Default execution timeout for batch jobs | +| `JobDefaults.Batch.Task.Timeouts.TotalTimeout` | `""` | Default total timeout for batch jobs | +| `JobDefaults.Daemon.Priority` | `0` | Default priority for daemon jobs | +| `JobDefaults.Daemon.Task.Resources.CPU` | `"500m"` | Default CPU for daemon jobs | +| `JobDefaults.Daemon.Task.Resources.Disk` | `""` | Default disk space for daemon jobs | +| `JobDefaults.Daemon.Task.Resources.GPU` | `""` | Default GPU count for daemon jobs | +| `JobDefaults.Daemon.Task.Resources.Memory` | `"512Mb"` | Default memory for daemon jobs | +| `JobDefaults.Ops.Priority` | `0` | Default priority for ops jobs | +| `JobDefaults.Ops.Task.Publisher.Params` | `{}` | Default publisher parameters for ops jobs | +| `JobDefaults.Ops.Task.Publisher.Type` | `""` | Default publisher type for ops jobs | +| `JobDefaults.Ops.Task.Resources.CPU` | `"500m"` | Default CPU for ops jobs | +| `JobDefaults.Ops.Task.Resources.Disk` | `""` | Default disk space for ops jobs | +| `JobDefaults.Ops.Task.Resources.GPU` | `""` | Default GPU count for ops jobs | +| `JobDefaults.Ops.Task.Resources.Memory` | `"512Mb"` | Default memory for ops jobs | +| `JobDefaults.Ops.Task.Timeouts.ExecutionTimeout` | `""` | Default execution timeout for ops jobs | +| `JobDefaults.Ops.Task.Timeouts.TotalTimeout` | `""` | Default total timeout for ops jobs | +| `JobDefaults.Service.Priority` | `0` | Default priority for service jobs | +| `JobDefaults.Service.Task.Resources.CPU` | `"500m"` | Default CPU for service jobs | +| `JobDefaults.Service.Task.Resources.Disk` | `""` | Default disk space for service jobs | +| `JobDefaults.Service.Task.Resources.GPU` | `""` | Default GPU count for service jobs | +| `JobDefaults.Service.Task.Resources.Memory` | `"512Mb"` | Default memory for service jobs | +| `Labels` | `{}` | Key-value pairs used to describe and categorize nodes | +| `Logging.Level` | `"info"` | Log level: trace, debug, info, warn, error, fatal, panic | +| `Logging.LogDebugInfoInterval` | `"30s"` | Debug info logging interval | +| `Logging.Mode` | `"default"` | Log format: default, json | +| `NameProvider` | `"puuid"` | Method to generate node names. Options: `"hostname"`, `"aws"`, `"gcp"`, `"uuid"`, `"puuid"` | +| `Orchestrator.Advertise` | `""` | URL to advertise to other servers | +| `Orchestrator.Auth.Token` | `""` | Token for compute node authentication | +| `Orchestrator.Cluster.Advertise` | `""` | Address to advertise to cluster members | +| `Orchestrator.Cluster.Host` | `""` | Hostname/IP for cluster communication | +| `Orchestrator.Cluster.Name` | `""` | Unique identifier for orchestrator cluster | +| `Orchestrator.Cluster.Peers` | `[]` | List of cluster members to connect to on startup | +| `Orchestrator.Cluster.Port` | `0` | Port for cluster communication | +| `Orchestrator.Enabled` | `false` | Enable orchestrator capabilities | +| `Orchestrator.EvaluationBroker.MaxRetryCount` | `10` | Maximum evaluation retry attempts | +| `Orchestrator.EvaluationBroker.VisibilityTimeout` | `"1m"` | How long an evaluation can be claimed | +| `Orchestrator.Host` | `"0.0.0.0"` | Hostname/IP for orchestrator connections | +| `Orchestrator.License.LocalPath` | `""` | Local license file path | +| `Orchestrator.NodeManager.DisconnectTimeout` | `"1m"` | Time before marking node as disconnected | +| `Orchestrator.NodeManager.ManualApproval` | `false` | Require manual approval for compute nodes | +| `Orchestrator.Port` | `4222` | Port for orchestrator connections | +| `Orchestrator.Scheduler.HousekeepingInterval` | `"30s"` | Interval for housekeeping tasks | +| `Orchestrator.Scheduler.HousekeepingTimeout` | `"2m"` | Timeout for housekeeping runs | +| `Orchestrator.Scheduler.QueueBackoff` | `"1m"` | Retry interval for failed jobs | +| `Orchestrator.Scheduler.WorkerCount` | `[system CPU count]` | Concurrent scheduling workers | +| `Orchestrator.SupportReverseProxy` | `false` | Configure for running behind reverse proxy | +| `Orchestrator.TLS.CACert` | `""` | CA certificate path | +| `Orchestrator.TLS.ServerCert` | `""` | Server certificate path | +| `Orchestrator.TLS.ServerKey` | `""` | Server private key path | +| `Orchestrator.TLS.ServerTimeout` | `0` | TLS timeout in seconds | +| `Publishers.Disabled` | `[]` | List of disabled publisher types | +| `Publishers.Types.IPFS.Endpoint` | `""` | IPFS API endpoint for publishing | +| `Publishers.Types.Local.Address` | `"127.0.0.1"` | Local publisher address | +| `Publishers.Types.Local.Port` | `6001` | Local publisher port | +| `Publishers.Types.S3.PreSignedURLDisabled` | `false` | Disable pre-signed URLs for S3 publisher | +| `Publishers.Types.S3.PreSignedURLExpiration` | `""` | Pre-signed URL expiration time | +| `ResultDownloaders.Disabled` | `[]` | List of disabled result downloader types | +| `ResultDownloaders.Timeout` | `""` | Timeout for download operations | +| `ResultDownloaders.Types.IPFS.Endpoint` | `""` | IPFS API endpoint for downloading results | +| `StrictVersionMatch` | `false` | Enforce strict version matching | +| `UpdateConfig.Interval` | `"24h"` | Update check interval (0 to disable) | +| `WebUI.Backend` | `""` | Backend API server (empty=use same as API server) | +| `WebUI.Enabled` | `false` | Enable web UI | +| `WebUI.Listen` | `"0.0.0.0:8438"` | Address and port for web UI | + +## docs/references/operators/gpu.md + +# GPU Workloads + +## Overview + +Bacalhau supports running jobs on GPUs out of the box. This guide covers how to set up and use GPUs with Bacalhau. + +## Supported GPU Types + +Bacalhau currently supports: + +- NVIDIA GPUs +- AMD GPUs +- Intel GPUs + +These are only available with the Docker executor. + +## Prerequisites + +### Basic Requirements + +1. [Docker](https://get.docker.com/) installed +2. Appropriate GPU drivers for your hardware + +### GPU-Specific Setup + +#### NVIDIA GPUs + +1. Install [NVIDIA GPU Drivers](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html) +2. Install [NVIDIA Container Toolkit (nvidia-docker2)](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) +3. Verify with `nvidia-smi` command + +#### AMD GPUs + +1. Install [AMD GPU drivers](https://www.amd.com/en/support/download/drivers.html) +2. Set up Docker for ROCm following [this guide](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/docker.html) +3. Verify with `rocm-smi` command + +#### Intel GPUs + +1. Install [Intel GPU drivers](https://www.intel.com/content/www/us/en/download-center/home.html) +2. Set up Docker for Intel GPUs following [this guide](https://github.com/Intel-Media-SDK/MediaSDK/wiki/Running-on-GPU-under-docker) +3. Verify with `xpu-smi` command + +## Running GPU Jobs + +### Command Line + +Use the `--gpu` flag to specify the number of GPUs your job requires: + +```bash +bacalhau docker run --gpu=1 nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi +``` + +### Using YAML + +You can also submit GPU jobs using YAML configuration: + +```yaml +Name: gpu-test-job +Type: batch +Count: 1 +Tasks: + - Engine: + Type: docker + Params: + Image: 'nvidia/cuda:11.6.2-base-ubuntu20.04' + Entrypoint: + - /bin/bash + Parameters: + - -c + - nvidia-smi && echo 'GPU is working!' + Name: TestGPU + ResourcesConfig: + CPU: '1' + Memory: '1GB' + Disk: '10GB' + GPU: '1' +``` + +## Important Notes + +- Your container must include the appropriate CUDA runtime and be compatible with the CUDA version on the node +- GPU access can be controlled using resource limits +- The Bacalhau network must have executor nodes with GPUs exposed + +## docs/references/operators/node-management.md + +# Node Management + +## Overview + +Bacalhau clusters consist of two types of nodes: + +1. **Orchestrator nodes**: Orchestrate jobs and manage the cluster +2. **Compute nodes**: Execute workloads and report resource availability + +This guide covers how orchestrator nodes manage compute node membership, monitor health, and maintain awareness of available resources across the cluster. + +## Node Registration and Approval + +Compute nodes register with orchestrator nodes when they join the cluster. By default, compute nodes are automatically approved when they join. However, orchestrator nodes can be configured to require manual approval for additional security. + +### Viewing Node Status + +To see all nodes in your cluster with their approval status: + +```shell +bacalhau node list + +ID TYPE APPROVAL STATUS +node-0 Requester APPROVED CONNECTED +node-1 Compute APPROVED HEALTHY +node-2 Compute APPROVED HEALTHY +node-3 Compute APPROVED HEALTHY +``` + +If manual approval is enabled, new compute nodes will show as `PENDING` until approved. + +### Approving and Rejecting Nodes + +To approve a compute node: + +```shell +bacalhau node approve node-1 +Ok +``` + +To reject a compute node: + +```shell +bacalhau node reject node-3 -m "Unauthorized node" +Ok +``` + +To permanently remove a node from the cluster: + +```shell +bacalhau node delete node-2 +``` + +## Monitoring Node Health + +Orchestrator nodes continuously monitor the health of compute nodes through a heartbeat mechanism. Compute nodes send heartbeats every 15 seconds by default. If a node fails to send heartbeats for longer than the configured disconnect timeout (1 minute by default), it will be marked as `UNHEALTHY` and eventually as `UNKNOWN` if it remains unresponsive. + +The health status affects job scheduling decisions, ensuring workloads are only assigned to healthy, responsive nodes. + +## Resource Reporting + +Compute nodes report several types of information to orchestrator nodes: + +1. **Static information**: Hardware details, architecture, and other fixed attributes (reported every minute by default) +2. **Resource availability**: Current CPU, memory, disk, and GPU availability +3. **Health status**: Heartbeat signals indicating the node is operational (sent every 15 seconds by default) + +This information enables intelligent job scheduling based on actual resource availability across the cluster. + +## Configuration Options + +### Compute Node Settings + +| Configuration Key | Description | Default | +| -------------------------------------- | --------------------------------------------- | ---------- | +| `Compute.Heartbeat.InfoUpdateInterval` | How often node static information is reported | 1 minute | +| `Compute.Heartbeat.Interval` | How often heartbeats are sent | 15 seconds | + +### Orchestrator Node Settings + +| Configuration Key | Description | Default | +| -------------------------------------------- | --------------------------------------------------------------------- | -------- | +| `Orchestrator.NodeManager.DisconnectTimeout` | Time after which a node without heartbeats is considered disconnected | 1 minute | +| `Orchestrator.NodeManager.ManualApproval` | Whether to require manual approval for compute nodes | `false` | + +Example configuration to enable manual approval in `config.yaml`: + +```yaml +Orchestrator: + NodeManager: + ManualApproval: true +``` + +## docs/references/operators/security/auth.md + +# Authentication & Authorization + +## Introduction + +Robust authentication and authorization mechanisms are essential for maintaining security while enabling seamless collaboration. As of Bacalhau 1.7 release, we introduced a significant overhaul to its authentication and authorization systems, offering more flexibility, improved security, and better integration with enterprise environments. + +## 1. Bacalhau Authentication + +With Bacalhau 1.7, we have introduced three distinct authentication paths, each designed to cater to different use cases and environments. The authentication paths are: + +1. **Basic HTTP Authentication** +2. **API Tokens Auth** +3. **Single Sign-On via OAuth 2.0** + +### 1.1 HTTP Basic Authentication + +The simplest approach leverages the time-tested HTTP Basic Authentication protocol, allowing users to access Bacalhau APIs using traditional username and password credentials. These credentials can be defined in the Node Configuration file, which offers two options for password storage: + +- _Plain text passwords for simplicity and ease of setup_ +- _Bcrypt-hashed passwords for enhanced security_ + +For CLI usage, users simply need to set the environment variables `BACALHAU_API_USERNAME` and `BACALHAU_API_PASSWORD`. For direct API calls, the standard Basic Authorization header with base64-encoded credentials can be used. + +Below is a sample orchestrator config file that defines 3 users that can authenticate through basic auth. + +```yaml +Orchestrator: + Enabled: true +API: + Port: 1234 + Auth: + Users: + # User with plain text password + - Alias: Admin User + Username: admin + Password: secureAdminPassword + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['*'] + + # User with limited permissions and plain text password + - Alias: Read Only User + Username: reader + Password: readerPassword + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:*'] + + # User with bcrypt hashed password + - Alias: Job Manager + Username: jobmanager + # This is a bcrypt password hash for the password "MySecretPassword" + Password: '$2a$10$3ZvxUe5OudgRIQQheomjMO/Ufx1Bb04SH/y0PXnR19oDRXNGps3r2' + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:job', 'write:job', 'read:node'] +``` + +In the above configuration: + +1. The first two users have plain text passwords, while the third uses a BCRYPT hashed password for added security. +2. We have three users with different permission levels. These capabilities will be covered in detail in the authorization section below. + +To help users and operators generate secure hashed passwords, a convenient CLI command was added that generates a BCRYPT hash of a password of your choosing. This command takes a plain string and converts it into a BCRYPT hash. + +```shell +bacalhau auth hash-password +``` + +To use this configuration with the Bacalhau CLI, you would set the following environment variables: + +```shell +# For admin access + +# For read-only access + +# For job management +# Please note: Set the password env variable to the actual password, +# not the hashed password. + +``` + +For direct API calls, for example by using curl, you would encode the credentials in base64: + +```shell +# For admin (base64 of "admin:secureAdminPassword") +curl -X GET -H "Authorization: Basic YWRtaW46c2VjdXJlQWRtaW5QYXNzd29yZA==" "http://orchestrator:1234/api/v1/orchestrator/nodes" + +# For reader (base64 of "reader:readerPassword") +curl -X GET -H "Authorization: Basic cmVhZGVyOnJlYWRlclBhc3N3b3Jk" "http://orchestrator:1234/api/v1/orchestrator/nodes" + +# For Job Manager (base64 of "jobmanager:MySecretPassword") +curl -X GET -H "Authorization: Basic am9ibWFuYWdlcjpNeVNlY3JldFBhc3N3b3Jk" "http://orchestrator:1234/api/v1/orchestrator/nodes" +``` + +--- + +### 1.2 Authentication through API Tokens + +For applications and scenarios where password-based authentication isn't ideal, Bacalhau 1.7 introduces API token support. Instead of username and password pairs, users can generate and use API keys as bearer tokens in authorization headers. + +Configuration is straightforward – API keys are defined in the orchestrator config under user profiles. To use them with the Bacalhau CLI, users set the `BACALHAU_API_KEY` environment variable. For direct API access, the token is included in the Authorization header using the Bearer scheme. + +Please note that API Keys are opaque tokens. + +Here's a sample configuration for API tokens in Bacalhau: + +```yaml +Orchestrator: + Enabled: true +API: + Port: 1234 + Auth: + Users: + # Administrator API token with full access + - Alias: Admin API Token + APIKey: 8F42A91D7C6E4B3DA5E9F8C12B76D3A4 + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['*'] + + # Read-only API token + - Alias: Monitoring Token + APIKey: C5D8E3F1A7B94026895C1D4E3F2A0B78 + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:*'] + + # Job management API token + - Alias: CI/CD Pipeline Token + APIKey: 2E8D7F5B3A9C41608D2E6B7F4A5C3D9E + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:job', 'write:job', 'read:node'] + + # Agent management API token + - Alias: Agent Management Token + APIKey: 1A3B5C7D9E0F2G4H6I8J0K2L4M6N8P0 + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:agent', 'write:agent'] +``` + +In this configuration: + +1. We have four API tokens with different permission levels: + - An administrator token with full access to all capabilities + - A monitoring token with read-only access to all resources + - A CI/CD pipeline token that can view nodes and has full control over jobs + - An agent management token that has full control over agents +2. Each token has a unique, randomly generated API key. You should generate strong, unique keys for your production environment using a secure random generator. + +Please note that API keys do not support BCRYPT hashing. + +To use these API tokens with the Bacalhau CLI, you would set the following environment variable: + +```shell + +``` + +For direct API calls, for example by using curl, you would use the Bearer token authentication scheme: + +```shell +curl -X GET -H "Authorization: Bearer 8F42A91D7C6E4B3DA5E9F8C12B76D3A4" "http://orchestrator:1234/api/v1/orchestrator/nodes" +``` + +--- + +### 1.3 Single Sign-On via OAuth 2.0 + +Perhaps the most significant addition since Bacalhau 1.7 is the support for OAuth 2.0 using the Device Code Flow. This enables Bacalhau to integrate seamlessly with enterprise identity providers such as Okta, Auth0, Azure Active Directory, and Google SSO. + +This approach eliminates the need to define users directly in Bacalhau's configuration, instead delegating user management to the identity provider – a considerable advantage in corporate environments with existing identity infrastructure. + +The configuration process involves specifying OAuth 2.0 endpoints, client IDs, and desired scopes. When users need to authenticate, they run `bacalhau auth sso login`, which presents a device code and URL. After completing authentication through their browser, they receive a JWT token that's automatically used for subsequent API calls (_this token exchange will be done seamlessly and the user is not required to perform any extra actions_). + +Here's a sample configuration for OAuth 2.0 SSO in Bacalhau: + +```yaml +Orchestrator: + Enabled: true +API: + Port: 1234 + Auth: + Oauth2: + # Identity provider details, those are names for your own reference only + ProviderId: 'okta' + ProviderName: 'Okta SSO' + + # OAuth 2.0 endpoints - Device Code Endpoint + DeviceAuthorizationEndpoint: 'https://your-domain.okta.com/oauth2/v1/device/authorize' + # The endpoint used to get the JWT token + TokenEndpoint: 'https://your-domain.okta.com/oauth2/v1/token' + # The Expected issuer, should match the issuer in the JWT token + Issuer: 'https://your-domain.okta.com' + # The JWKS URI + JWKSUri: 'https://your-domain.okta.com/.well-known/jwks.json' + + # Client details + DeviceClientId: '0ab2c3d4e5f6g7h8i9j0' + # CLI polling interval to check if the device code was approved + PollingInterval: 5 + + # Audience: Expected "aud" in the JWT token + Audience: 'https://bacalhau.your-company.com/api' + + # Scopes requested in the token exchange + Scopes: + - 'openid' + - 'profile' + - 'email' +``` + +For this to setup work properly: + +1. Register an OAuth 2.0 application in your identity provider (Okta, Auth0, Azure AD, etc.) +2. Configure it to support the **Device Code Flow**. Make sure the provider supports OAuth2 Device code flow. +3. Set up appropriate roles or groups in your identity provider to map to Bacalhau permissions + +The permission mapping would happen in your identity provider. For example, in Okta you might create: + +- A "Bacalhau Admins" group with permissions: `["*"]` +- A "Bacalhau Readers" group with permissions: `["read:*"]` +- A "Bacalhau Job Managers" group with permissions: `["read:job", "write:job", "read:node"]` + +These permissions should be included in the JWT token under the custom claim `permissions`. + +To authenticate using this setup, users would run: + +```shell +# Login +bacalhau auth sso login + +# Logout +bacalhau auth sso logout +``` + +Then the CLI would display something like this: + +```shell +To login, please: + +1. Open this URL in your browser: )`: A logical name to refer to the job. Defaults to job ID. +* **Namespace** `(string: "default")`: The namespace in which the job is running. `ClientID` is used as a namespace in the public demo network. +* **Type** `(string: )`: The type of the job, such as `batch`, `ops`, `daemon` or `service`. You can learn more about the supported jobs types in the [Job Types](type.md) guide. +* **Priority** `(int: 0`): Determines the scheduling priority. +* **Count** `(int: )`:: Task associated with the job, which defines a unit of work within the job. Today we are only supporting single task per job, but with future plans to extend this. + +## Server-Generated Parameters + +The following parameters are generated by the server and should not be set directly. + +* **ID** `(string)`: A unique identifier assigned to this job. It's auto-generated by the server and should not be set directly. Used for distinguishing between jobs with similar names. +* **State** `(`[`State`](../other/state.md)`)`: Represents the current state of the job. +* **Version** `(int)`: A monotonically increasing version number incremented on job specification update. +* **Revision** `(int)`: A monotonically increasing revision number incremented on each update to the job's state or specification. +* **CreateTime** `(int)`: Timestamp of job creation. +* **ModifyTime** `(int)`: Timestamp of last job modification. + +## docs/specifications/job/constraint.md + +# Constraint + +A `Constraint` represents a condition that must be met for a compute node to be eligible to run a given job. Operators have the flexibility to manually define node labels when initiating a node using the bacalhau serve command. Additionally, Bacalhau boasts features like automatic resource detection and dynamic labeling, further enhancing its capability. + +By defining constraints, you can ensure that jobs are scheduled on nodes that have the necessary requirements or conditions. + +### `Constraint` Parameters: + +1. **Key**: The name of the attribute or property to check on the compute node. This could be anything from a specific hardware feature, operating system version, or any other node property. +2. **Operator**: Determines the kind of comparison to be made against the `Key`'s value, which can be: + 1. `in`: Checks if the Key's value exists within the provided list of values. + 2. `notin`: Ensures the Key's value doesn't match any in the provided list of values. + 3. `exists`: Verifies that a value for the specified Key is present, regardless of its actual value. + 4. `!`: Confirms the absence of the specified Key. i.e DoesNotExist + 5. `gt`: Assesses if the Key's value is greater than the provided value. + 6. `lt`: Assesses if the Key's value is less than the provided value. + 7. `=` & `==`: Both are used to compare the Key's value for an exact match with the provided value. + 8. `!=`: Ensures the Key's value is not the same as the provided value. +3. **Values (optional)**: A list of values that the node attribute, specified by the `Key`, is compared against using the `Operator`. This is not needed for operators like `exists` or `!`. + +### Example: + +Consider a scenario where a job should only run on nodes with a GPU and an operating system version greater than `2.0`. The constraints for such a requirement might look like: + +```yaml +constraints: + - key: "hardware.gpu" + operator: "exists" + - key: "Operating-System" + operator: "=" + values: ["linux"] + - key: "region" + operator: "in" + values: ["eu-west-1,eu-west-2"] +``` + +In this example, the first constraint checks if the node has a GPU, the second constraint ensures the OS is linux, and deployed in eu-west-1 or eu-west-2\`. + +### Notes: + +1. Constraints are evaluated as a logical AND, meaning all constraints must be satisfied for a node to be eligible. +2. Using too many specific constraints can lead to a job not being scheduled if no nodes satisfy all the conditions. +3. It's essential to balance the specificity of constraints with the broader needs and resources available in the cluster. + +## docs/specifications/job/input-source.md + +# Input Source + +An `InputSource` defines where and how to retrieve specific artifacts needed for a [`Task`](task.md), such as files or data, and where to mount them within the task's context. This ensures the necessary data is present before the task's execution begins. + +Bacalhau's `InputSource` natively supports fetching data from remote sources like S3 and IPFS and can also mount local directories. It is intended to be flexible for future expansion. + +## `InputSource` Parameters: + +* **Source** `(`[`SpecConfig`](../other/specconfig.md) `: )`: Specifies the origin of the artifact, which could be a URL, an S3 bucket, or other locations. +* **Alias** `(string: )`: An optional identifier for this input source. It's particularly useful for dynamic operations within a task, such as dynamically importing data in WebAssembly using an alias. +* **Target** `(string: )`: Defines the path inside the task's environment where the retrieved artifact should be mounted or stored. This ensures that the task can access the data during its execution. + +## Usage Examples + +```YAML +InputSources: + - Source: + Type: s3 + Params: + Bucket: my_bucket + Region: us-west-1 + Target: /my_s3_data + - Source: + Type: localDirectory + Params: + SourcePath: /path/to/local/directory + ReadWrite: true + Target: /my_local_data +``` + +In this example, the first input source fetches data from an S3 bucket and mounts it at `/my_s3_data` within the task. The second input source mounts a local directory at `/my_local_data` and allows the task to read and write data to it. + +## docs/specifications/job/label.md + +# Labels + +The `Labels` block within a `Job` specification plays a crucial role in Bacalhau, serving as a mechanism for filtering jobs. By attaching specific labels to jobs, users can quickly and effectively filter and manage jobs via both the Command Line Interface (CLI) and Application Programming Interface (API) based on various criteria. + +## `Labels` Parameters + +Labels are essentially key-value pairs attached to jobs, allowing for detailed categorizations and filtrations. Each label consists of a `Key` and a `Value`. These labels can be filtered using operators to pinpoint specific jobs fitting certain criteria. + +### Filtering Operators + +Jobs can be filtered using the following operators: + +1. `in`: Checks if the key's value matches any within a specified list of values. +2. `notin`: Validates that the key's value isn’t within a provided list of values. +3. `exists`: Checks for the presence of a specified key, regardless of its value. +4. `!`: Validates the absence of a specified key. (i.e., DoesNotExist) +5. `gt`: Checks if the key's value is greater than a specified value. +6. `lt`: Checks if the key's value is less than a specified value. +7. `= & ==`: Used for exact match comparisons between the key’s value and a specified value. +8. `!=`: Validates that the key’s value doesn't match a specified value. + +### Example Usage + +Filter jobs with a label whose key is "environment" and value is "development": + +```shell +bacalhau job list --labels 'environment=development' +``` + +Filter jobs with a label whose key is "version" and value is greater than "2.0": + +```shell +bacalhau job list --labels 'version gt 2.0' +``` + +Filter jobs with a label "project" existing: + +```shell +bacalhau job list --labels 'project' +``` + +Filter jobs without a "project" label: + +```shell +bacalhau job list --labels '!project' +``` + +### Practical Applications + +* **Job Management**: Enables efficient management of jobs by categorizing them based on distinct attributes or criteria. +* **Automation**: Facilitates the automation of job deployment and management processes by allowing scripts and tools to target specific categories of jobs. +* **Monitoring & Analytics**: Enhances monitoring and analytics by grouping jobs into meaningful categories, allowing for detailed insights and analysis. + +## Conclusion + +The `Labels` block is instrumental in the enhanced management, filtering, and operation of jobs within Bacalhau. By understanding and utilizing the available operators and label parameters effectively, users can optimize their workflow, automate processes, and achieve detailed insights into their jobs. + +## docs/specifications/job/meta.md + +# Meta + +In both the `Job` and `Task` specifications within Bacalhau, the `Meta` block is a versatile element used to attach arbitrary metadata. This metadata isn't utilized for filtering or categorizing jobs; there's a separate [`Labels`](label.md) block specifically designated for that purpose. Instead, the `Meta` block is instrumental for embedding additional information for operators or external systems, enhancing clarity and context. + +## `Meta` Parameters in Job and Task Specs + +The `Meta` block is comprised of key-value pairs, with both keys and values being strings. These pairs aren't constrained by a predefined structure, offering flexibility for users to annotate jobs and tasks with diverse metadata. + +### User-Defined Metadata + +Users can incorporate any arbitrary key-value pairs to convey descriptive information or context about the job or task. + +#### Example: + +```json +"Meta": { + "project": "frontend", + "version": "1.2.5", + "owner": "team-alpha", + "environment": "development" +} +``` + +1. **project**: Identifies the associated project. +2. **version**: Specifies the version of the application or service. +3. **owner**: Names the responsible team or individual. +4. **environment**: Indicates the stage in the development lifecycle. + +## Auto-Generated Metadata by Bacalhau + +Beyond user-defined metadata, Bacalhau automatically injects specific metadata keys for identification and security purposes. + +### Bacalhau Auto-Generated Keys: + +1. **bacalhau.org/requester.id**: A unique identifier for the orchestrator that handled the job. +2. **bacalhau.org/requester.publicKey**: The public key of the requester, aiding in security and validation. +3. **bacalhau.org/client.id**: The ID for the client submitting the job, enhancing traceability. + +#### Example: + +```json +"Meta": { + "bacalhau.org/requester.id": "QmfZwnVWYjHSchAVxJqXn18Bvd1cpG2ATRYceBBvUGZf2f", + "bacalhau.org/requester.publicKey": "CAASpgIwggEiMA0GCSqG...BcyEhfEZKnAgMBAAE=", + "bacalhau.org/client.id": "dfadea67ab6d8c65761c3d879119e11f157923036f945d969d19a51066dc663a" +} +``` + +### Implications and Utility + +1. **Identification**: The metadata aids in uniquely identifying jobs and tasks, connecting them to their originators and executors. +2. **Context Enhancement**: Metadata can supplement jobs and tasks with additional data, offering insights and context that aren't captured by standard parameters. +3. **Security Enhancement**: Auto-generated keys like the requester's public key contribute to the secure handling and execution of jobs and tasks. + +While the `Meta` block is distinct from the [`Labels`](label.md) block used for filtering, its contribution to providing context, security, and traceability is integral in managing and understanding the diverse jobs and tasks within the Bacalhau ecosystem effectively. + +## docs/specifications/job/network.md + +# Network + +The `Network` object offers a method to specify the networking requirements of a `Task`. It defines the scope and constraints of the network connectivity based on the demands of the task. + +## `Network` Parameters: + +1. **Type** `(string: "None")`: Indicates the network configuration's nature. There are several network modes available: + * `None`: This mode implies that the task does not necessitate any networking capabilities. + * `Full`: Specifies that the task mandates unrestricted, raw IP networking without any imposed filters. + * `HTTP`: This mode constrains the task to only require HTTP networking with specific domains. In this model: + * The job specifier puts forward a job, stipulating the domain(s) it intends to communicate with. + * The compute provider assesses the inherent risk of the job based on these domains and bids accordingly. + * At runtime, the network traffic remains strictly confined to the designated domain(s). + +:::info +A typical command for this might resemble: `bacalhau docker run —network=http —domain=crates.io —domain=github.com -i ipfs://Qmy1234myd4t4,dst=/code rust/compile` +::: + +The primary risks for the compute provider center around possible violations of its terms, its hosting provider's terms, or even prevailing laws in its jurisdiction. This encompasses issues such as unauthorized access or distribution of illicit content and potential cyber-attacks. + +Conversely, the job specifier's primary risk involves operating in a paid environment. External entities might seek to exploit this environment, for instance, through a compromised package download that initiates a crypto mining operation, depleting the allocated, prepaid job time. By limiting traffic strictly to the pre-specified domains, the potential for such cyber threats diminishes considerably. + +While a compute provider might impose its limits through other means, having domains declared upfront allows it to selectively bid on jobs that it can execute without issues, improving the user experience for job specifiers. + +2. **Domains** `(string[]: )`: A list of domain strings, relevant primarily when the `Type` is set to **HTTP**. It dictates the specific domains the task can communicate with over HTTP. + +Understanding and utilizing these configurations aptly can ensure that tasks are executed in an environment that aligns with their networking requirements, bolstering efficiency and security. + +## docs/specifications/job/resources.md + +# Resources + +The `Resources` provides a structured way to detail the computational resources a `Task` requires. By specifying these requirements, you ensure that the task is scheduled on a node with adequate resources, optimizing performance and avoiding potential issues linked to resource constraints. + +## `Resources` Parameters: + +1. **CPU** `(string: )`: Defines the CPU resources required for the task. Units can be specified in cores (e.g., `2` for 2 CPU cores) or in milliCPU units (e.g., `250m` or `0.25` for 250 milliCPU units). For instance, if you have half a CPU core, you can represent it as `500m` or `0.5`. +2. **Memory** `(string: )`: Highlights the amount of RAM needed for the task. You can specify the memory in various units such as: + * `Kb` for Kilobytes + * `Mb` for Megabytes + * `Gb` for Gigabytes + * `Tb` for Terabytes +3. **Disk** `(string: )`: States the disk storage space needed for the task. Similarly, the disk space can be expressed in units like `Gb` for Gigabytes, `Mb` for Megabytes, and so on. As an example, `10Gb` indicates 10 Gigabytes of storage space. +4. **GPU** `(string: )`: Denotes the number of GPU units required. For example, `2` signifies the requirement of 2 GPU units. This is crucial for tasks involving heavy computational processes, machine learning models, or tasks that leverage GPU acceleration. + +## docs/specifications/job/result-path.md + +# ResultPath + +A `ResultPath` denotes a specific location within a `Task` that contains meaningful output or results. By specifying a `ResultPath`, you can pinpoint which files or directories are essential and should be retained or published after the task's execution. + +## `ResultPath` Parameters: + +1. **Name**: A descriptive label or identifier for the result, allowing for easier referencing and understanding of the output's nature or significance. +2. **Path**: Specifies the exact location, either a file or a directory, within the task's environment where the result or output is stored. This ensures that after the task completes, the critical data at this path can be accessed, retained, or published as necessary. + +## docs/specifications/job/task.md + +# Task + +A `Task` signifies a distinct unit of work within the broader context of a `Job`. It defines the specifics of how the task should be executed, where the results should be published, what environment variables are needed, among other configurations + +## `Task` Parameters + +1. **Name** `(string : )`: A unique identifier representing the name of the task. +2. **Engine** `(`[`SpecConfig`](../other/specconfig.md) `: required)`: Configures the execution engine for the task, such as [Docker](/components/engines/docker.md) or [WebAssembly](/components/engines/wasm.md). +3. **Publisher** `(`[`SpecConfig`](../other/specconfig.md) `: optional)`: Specifies where the results of the task should be published, such as [S3](/components/publishers/s3.md) and [IPFS](/components/publishers/ipfs.md) publishers. Only applicable for tasks of type `batch` and `ops`. +4. **Env** `(map[string]string : optional)`: A set of environment variables for the driver. +5. **Meta** `(`[`Meta`](meta.md) `: optional)`: Allows association of arbitrary metadata with this task. +6. **InputSources** `(`[`InputSource`](input-source.md)`[] : optional)`: Lists remote artifacts that should be downloaded before task execution and mounted within the task, such as from [S3](/components/sources/s3.md) or [HTTP/HTTPs](/components/sources/url.md). +7. **ResultPaths** `(`[`ResultPath`](result-path.md)`[] : optional)`: Indicates volumes within the task that should be included in the published result. Only applicable for tasks of type `batch` and `ops`. +8. **Resources** `(`[`Resources`](resources.md) `: optional)`: Details the resources that this task requires. +9. **Network** `(`[`Network`](network.md) `: optional)`: Configurations related to the networking aspects of the task. +10. **Timeouts** `(`[`Timeouts`](timeouts.md) `: optional)`: Configurations concerning any timeouts associated with the task. + +## docs/specifications/job/timeouts.md + +# Timeouts + +The `Timeouts` object provides a mechanism to impose timing constraints on specific task operations, particularly execution. By setting these timeouts, users can ensure tasks don't run indefinitely and align them with intended durations. + +## `Timeouts` Parameters: + +* **ExecutionTimeout** `(int: )`: Defines the maximum duration (in seconds) that a task is permitted to run. A value of zero indicates that there's no set timeout. This could be particularly useful for tasks that function as daemons and are designed to run indefinitely. + +Utilizing the `Timeouts` judiciously helps in managing resource utilization and ensures tasks adhere to expected timelines, thereby enhancing the efficiency and predictability of job executions. + +## docs/specifications/job/type.md + +# Type + +Bacalhau has recently introduced different job types in v1.1, providing more control and flexibility over the orchestration and scheduling of those jobs - depending on their type. + +Despite the differences in job types, all jobs benefit from core functionalities provided by Bacalhau, including: + +1. **Node selection** - the appropriate nodes are selected based on several criteria, including resource availability, priority and feedback from the nodes. +2. **Job monitoring** - jobs are monitored to ensure they complete, and that they stay in a healthy state. +3. **Retries** - within limits, Bacalhau will retry certain jobs a set number of times should it fail to complete successfully when requested. + +### Batch Jobs + +Batch jobs are executed on demand, running on a specified number of Bacalhau nodes. These jobs either run until completion or until they reach a timeout. They are designed to carry out a single, discrete task before finishing. This is the only [queueable](/guides/queueing.md) job type. + +Ideal for intermittent yet intensive data dives, for instance performing computation over large datasets before publishing the response. This approach eliminates the continuous processing overhead, focusing on specific, in-depth investigations and computation. + +
+ +Batch Job Example + +This example shows a sample Batch job [declarative](./) description with all available parameters. + +The example demonstrates a job that: + +1. Has a priority of 100 +2. Will be executed on 2 nodes +3. Will be executed only on nodes with Linux OS +4. Uses the docker engine +5. Executes a python script with multiple arguments +6. Preloads and mounts IPFS data as a local directory +7. Publishes the results to the IPFS +8. Has network access type HTTP and 2 allowed domains + +```yaml +# This example shows a sample job file. +# Parameters, marked as Optional can be skipped - the default values will be used + +# Name of the job. Optional. Default value - job ID +Name: Batch Job Example + +# Type of the job +Type: batch + +# The namespace in which the job is running. Default value - “default” +Namespace: default + +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 + +# Count - number of replicas to be scheduled. +# This is only applicable for jobs of type batch and service. +Count: 2 + +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the batch job + Meta purpose: Describe the job + +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Some option: Some text + Some other option: Some other text + +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: +- Key: "Operating-System" + Operator: "=" + Values: ["linux"] + +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: Important Calculations + + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker + + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: + + # Image: docker image to be used in the task. + Image: alek5eyk/batchjobexample:1.1 + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - python + - supercalc.py + - "5" + - /outputs/result.txt + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - DEFAULT_USER_NAME = root + - API_KEY = none + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task + # Optional + InputSources: + - Target: /data + Source: + Type: ipfs + Params: + CID: "QmSYE8dVx6RTdDFFhBu51JjFG1fwwPdUJoXZ4ZNXvfoK2V" + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs + + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 1Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Domains: + - example.com + - ghcr.io + Type: HTTP + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 +``` + +
+ +### Ops Jobs + +Similar to batch jobs, ops jobs have a broader reach. They are executed on all nodes that align with the job specification, but otherwise behave like batch jobs. + +Ops jobs are perfect for urgent investigations, granting direct access to logs on host machines, where previously you may have had to wait for the logs to arrive at a central location before being able to query them. They can also be used for delivering configuration files for other systems should you wish to deploy an update to many machines at once. + +
+ +Ops Job Example + +This example shows a sample Ops job [declarative](./) description with all available parameters. + +The example demonstrates a job that: + +1. Has a priority of 100 +2. Will be executed on all suitable nodes +3. Will be executed only on nodes with label = WebService +4. Uses the docker engine +5. Executes a query with manually specified parameters +6. Has access to a local directory +7. Publishes the results to the IPFS, if any +8. Has network access type HTTP and 2 allowed domains + +```yaml +# This example shows a sample ops job file. +# Parameters, marked as Optional can be skipped - the default values will be used +# Example from the https://blog.bacalhau.org/p/real-time-log-analysis-with-bacalhau is used + +# Name of the job. Optional. Default value - job ID +Name: Live logs processing + +# Type of the job +Type: ops + +# The namespace in which the job is running. Default value - “default” +Namespace: logging + +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 + +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the ops job + Meta purpose: Describe the job + +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Job type: ops job + Ops job feature: To be executed on all suitable nodes + +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: + - Key: service + Operator: == + Values: + - WebService + +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: LiveLogProcessing + + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker + + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: + + # Image: docker image to be used in the task. + Image: ghcr.io/bacalhau-project/nginx-access-log-query:1.0.0 + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - --query + - {{.query}} + - --start-time + - {{or (index . "start-time") ""}} + - --end-time + - {{or (index . "end-time") ""}} + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - DEFAULT_USER_NAME = root + - API_KEY = none + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task. + # Ensure that localDirectory source is enabled on the nodes + # Optional + InputSources: + - Target: /logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs + + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 1Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Domains: + - example.com + - ghcr.io + Type: HTTP + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 + +``` + +
+ +### Daemon Jobs + +Daemon jobs run continuously on all nodes that meet the criteria given in the job specification. Should any new compute nodes join the cluster after the job was started, and should they meet the criteria, the job will be scheduled to run on that node too. + +A good application of daemon jobs is to handle continuously generated data on every compute node. This might be from edge devices like sensors, or cameras, or from logs where they are generated. The data can then be aggregated and compressed them before sending it onwards. For logs, the aggregated data can be relayed at regular intervals to platforms like Kafka or Kinesis, or directly to other logging services with edge devices potentially delivering results via MQTT. + +
+ +Daemon Job Example + +This example shows a sample Daemon job [declarative](./) description with all available parameters. + +The example demonstrates a job that: + +1. Has a priority of 100 +2. Will be executed continuously on all suitable nodes +3. Will be executed only on nodes with label = WebService +4. Uses the docker engine +5. Executes a query with manually specified parameters +6. Has access to 2 local directories with logs +7. Publishes the results to the IPFS, if any +8. Has network access type Full in order to send data to the S3 storage + +```yaml +# This example shows a sample daemon job file. +# Parameters, marked as Optional can be skipped - the default values will be used +# Example from the https://blog.bacalhau.org/p/tutorial-save-25-m-yearly-by-managing is used + +# Name of the job. Optional. Default value - job ID +Name: Logstash + +# Type of the job +Type: daemon + +# The namespace in which the job is running. Default value - “default” +Namespace: logging + +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 + +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the daemon job + Meta purpose: Describe the job + +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Job type: daemon job + Daemon job feature: To be executed continuously on all suitable nodes + +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: + - Key: service + Operator: == + Values: + - WebService + +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: main + + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker + + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: + + # Image: docker image to be used in the task. + Image: ghcr.io/bacalhau-project/nginx-access-log-agent:1.0.0 + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - --query + - {{.query}} + - --start-time + - {{or (index . "start-time") ""}} + - --end-time + - {{or (index . "end-time") ""}} + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - OPENSEARCH_ENDPOINT={{.OpenSearchEndpoint}} + - S3_BUCKET={{.AccessLogBucket}} + - AWS_REGION={{.AWSRegion}} + - AGGREGATE_DURATION=10 + - S3_TIME_FILE=60 + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task. + # Ensure that localDirectory source is enabled on the nodes + # Optional + InputSources: + - Target: /app/logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs + - Target: /app/state + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/state + ReadWrite: true + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs + + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 1Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Type: Full + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 +``` + +
+ +### Service Jobs + +Service jobs run continuously on a specified number of nodes that meet the criteria given in the job specification. Bacalhau's orchestrator selects the optimal nodes to run the job, and continuously monitors its health, performance. If required, it will reschedule on other nodes. + +This job type is good for long-running consumers such as streaming or queuing services, or real-time event listeners. + +
+ +Service Job Example + +This example shows a sample Service job [declarative](./) description with all available parameters. + +The example demonstrates a job that: + +1. Has a priority of 100 +2. Will be executed continuously on all suitable nodes +3. Will be executed only on nodes with architecture = arm64 and located in the us-west-2 region +4. Uses the docker engine +5. Executes a query with multiple parameters +6. Has access to 2 local directories with logs +7. Publishes the results to the IPFS, if any +8. Has network access type Full in order to send data to the S3 storage + +```yaml +# This example shows a sample daemon job file. +# Parameters, marked as Optional can be skipped - the default values will be used +# Example from the https://blog.bacalhau.org/p/introducing-new-job-types-new-horizons is used + +# Name of the job. Optional. Default value - job ID +Name: Kinesis Consumer + +# Type of the job +Type: service + +# The namespace in which the job is running. Default value - “default” +Namespace: service + +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 + +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the service job + Meta purpose: Describe the job + +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Job type: service job + Daemon job feature: To be executed continuously on a certain amount of suitable nodes + +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: + - Key: Architecture + Operator: '=' + Values: + - arm64 + - Key: region + Operator: '=' + Values: + - us-west-2 + +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: main + + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker + + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: + + # Image: docker image to be used in the task. + Image: my-kinesis-consumer:latest + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - -stream-arn + - arn:aws:kinesis:us-west-2:123456789012:stream/my-kinesis-stream + - -shard-iterator + - TRIM_HORIZON + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - DEFAULT_USER_NAME = root + - API_KEY = none + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task. + # Ensure that localDirectory source is enabled on the nodes + # Optional + InputSources: + - Target: /app/logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs + - Target: /app/state + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/state + ReadWrite: true + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs + + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 4Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Type: Full + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 +``` + +
+ +## docs/specifications/other/README.md + +# Other Specifications + +## docs/specifications/other/specconfig.md + +# SpecConfig + +`SpecConfig` provides a unified structure to specify configurations for various components in Bacalhau, including engines, publishers, and input sources. Its flexible design allows seamless integration with multiple systems like Docker, WebAssembly (Wasm), AWS S3, and local directories, among others. + +### `SpecConfig` Parameters + +- **Type** `(string : )`: Specifies the type of the configuration. Examples include `docker` and `wasm` for execution engines, `S3` for input sources and publishers, etc. +- **Params** `(map[string]any : )`: A set of key-value pairs that provide the specific configurations for the chosen type. The keys and values are flexible and depend on the `Type`. For instance, parameters for a Docker engine might include image name and version, while an S3 publisher would require configurations like the bucket name and AWS region. If not provided, it defaults to `nil`. + +### Usage Examples + +Here are a few hypothetical examples to demonstrate how you might define `SpecConfig` for different components: + +#### Docker Engine + +Copy + +``` +{ + "Type": "docker", + "Params": { + "Image": "my_app_image", + "Entrypoint": "my_app_entrypoint", + } +} +``` + +Full Docker spec can be found [here](/components/engines/docker.md). + +#### S3 Publisher + +Copy + +``` +{ + "Type": "s3", + "Params": { + "Bucket": "my_bucket", + "Region": "us-west-1" + } +} +``` + +Full S3 Publisher can be found [here](/components/publishers/s3.md). + +#### Local Directory Input Source + +Copy + +``` +{ + "Type": "localDirectory", + "Params": { + "SourcePath": "/path/to/local/directory", + "ReadWrite": true, + } +} +``` + +Full local source can be found [here](/components/sources/local.md). + +Remember, the exact keys and values in the `Params` map will vary depending on the specific requirements of the component being configured. Always refer to the individual component's documentation to understand the available parameters. + +## docs/specifications/other/state.md + +# State + +## `State` Structure Specification + +Within Bacalhau, the `State` structure is designed to represent the status or state of an object (like a [`Job`](/docs/specifications/job/)), coupled with a human-readable message for added context. Below is a breakdown of the structure: + +### `State` Parameters + +1. **StateType** `(T : )`: Represents the current state of the object. This is a generic parameter that will take on a specific value from a set of defined state types for the object in question. For jobs, this will be one of the [`JobStateType`](state.md#job-state-types) values. +2. **Message** `(string : )`: A human-readable message giving more context about the current state. Particularly useful for states like `Failed` to provide insight into the nature of any error. + +## Job State Types + +When `State` is used for a job, the `StateType` can be one of the following: + +1. `Pending`: This indicates that the job is submitted but is not yet scheduled for execution. +2. `Running`: The job is scheduled and is currently undergoing execution. +3. `Completed`: This state signifies that a job has successfully executed its task. Only applicable for batch jobs. +4. `Failed`: A state indicating that the job encountered errors and couldn't successfully complete. +5. `JobStateTypeStopped`: The job has been intentionally halted by the user before its natural completion. + +The inclusion of the `Message` field can offer detailed insights, especially in states like `Failed`, aiding in error comprehension and debugging. diff --git a/static/llms.txt b/static/llms.txt index 9d12359..a92afeb 100644 --- a/static/llms.txt +++ b/static/llms.txt @@ -17,6 +17,8 @@ bacalhau job list ## Documentation Sections +- [Complete documentation](/llms-full.txt): The full, generated Bacalhau documentation corpus + - [Getting Started](/llms/getting-started.txt): Installation, quickstart, first jobs - [CLI Reference](/llms/cli.txt): All bacalhau commands and options - [API Reference](/llms/api.txt): REST API documentation diff --git a/static/llms/api.txt b/static/llms/api.txt index f10b589..fdeadca 100644 --- a/static/llms/api.txt +++ b/static/llms/api.txt @@ -1,6 +1,6 @@ # Bacalhau API Reference -## README +## docs/api/README.md # Overview @@ -130,8 +130,7 @@ Understanding HTTP response codes is crucial. A `2xx` series indicates a success Since `/api/v1/requester/*` was changed to `/api/v1/orchestrator/` in `v1.4.0`, all `/api/v1/requester/*` requests will result in 410 error. ::: - -## agent +## docs/api/agent.md # Agent @@ -245,8 +244,7 @@ This API provides detailed information about the node, including its peer ID and } ``` - -## jobs +## docs/api/jobs.md # Jobs @@ -394,7 +392,7 @@ Submit a new job for execution. **Request Body**: -- [**Job**](../specifications/job/): JSON definition of the job. +- [**Job**](/docs/specifications/job/): JSON definition of the job. **Response**: @@ -765,8 +763,7 @@ curl 127.0.0.1:1234/api/v1/orchestrator/jobs/j-479d160f-f9ab-4e32-aec9-a45554126 } ``` - -## nodes +## docs/api/nodes.md # Nodes @@ -1009,4 +1006,3 @@ curl --get "127.0.0.1:1234/api/v1/orchestrator/nodes?limit=2&order_by=available ] } ``` - diff --git a/static/llms/cli.txt b/static/llms/cli.txt index 0c08ff7..75eb512 100644 --- a/static/llms/cli.txt +++ b/static/llms/cli.txt @@ -1,6 +1,6 @@ # Bacalhau CLI Reference -## README +## docs/cli/README.md # Overview @@ -117,41 +117,7 @@ This will show all available options, including both global flags and command-sp **Tip:** For full details on each command's available flags, see the CLI Reference or type `bacalhau --help`. - -## README - -# Config - -The `bacalhau config` command is a parent command that offers sub-commands to modify and query information about the Bacalhau config. This can be useful for debugging, monitoring, or managing the nodes configuration. - -## Usage - -```bash -bacalhau config [command] -``` - -## Available Commands - -1. [**list**](list.md): - - - Description: Lists the configuration keys and values of the bacalhau node. This command is useful for understanding how configuration keys map to their respective values, aiding in the use of the `bacalhau config set` command. - - Usage: - - ```bash - bacalhau config list - ``` - -2. [**set**](set.md): - - - Description: Sets a value in the bacalhau node's configuration file. This command is used to modify the configuration file that the bacalhau node will reference for its settings. - - Usage: - - ```bash - bacalhau config set - ``` - - -## README +## docs/cli/agent/README.md # Agent @@ -218,206 +184,7 @@ bacalhau agent [command] --help - Description: Defines the path to the bacalhau repository. - Default: \`\`$HOME/.bacalhau\` - -## README - -# Job - -The `bacalhau job` command provides a suite of sub-commands to submit, query, and manage jobs within Bacalhau. Users can deploy jobs, obtain job details, track execution logs, and more. - -## Usage - -```bash -bacalhau job [command] -``` - -## Available Commands - -1. [**describe**](./describe.md): - - - Description: Retrieves detailed information of a job using its ID. - - Usage: - - ```bash - bacalhau job describe - ``` - -2. [**executions**](./executions.md): - - - Description: Lists all executions associated with a job, identified by its ID. - - Usage: - - ```bash - bacalhau job executions - ``` - -3. [**get**](./get.md): - - - Description: Get the results of a job, identified by its ID. - - Usage: - - ```bash - bacalhau job get - ``` - -4. [**history**](./history.md): - - - Description: Enumerates the historical events related to a job, identified by its ID. - - Usage: - - ```bash - bacalhau job history - ``` -5. [**list**](./list.md): - - - Description: Provides an overview of all submitted jobs. - - Usage: - - ```bash - bacalhau job list - ``` - -6. [**logs**](./logs.md): - - - Description: Fetches and streams the logs from a currently executing job. - - Usage: - - ```bash - bacalhau job logs - ``` - -7. [**run**](./run.md): - - - Description: Submits a job for execution using either a JSON or YAML configuration file. - - Usage: - - ```bash - bacalhau job run - ``` - -8. [**stop**](./stop.md): - - - Description: Halts a previously submitted job. - - Usage: - - ```bash - bacalhau job stop - ``` - -For comprehensive details on any of the sub-commands, run: - -```bash -bacalhau job [command] --help -``` - -## Flags - -- `-h`, `--help`: - - Description: Shows the help information for the `job` command. - -## Global Flags - -1. `--api-host string`: - - Description: Determines the host for RESTful communication between the client and server. This flag is overlooked if the `BACALHAU_API_HOST` environment variable is set. - - Default: `bootstrap.production.bacalhau.org` -2. `--api-port int`: - - Description: Designates the port for RESTful communication. This flag is bypassed if the `BACALHAU_API_PORT` environment variable is active. - - Default: `1234` -3. `--log-mode logging-mode`: - - Description: Chooses the preferred log format. Available choices are: `default`, `station`, `json`, `combined`, and `event`. - - Default: `default` -4. `--repo string`: - - Description: Specifies the path to the bacalhau repository. - - Default: `$HOME/.bacalhau` - - -## README - -# Node - -The `bacalhau node` command provides a set of sub-commands to query and manage node-related information within Bacalhau. With these tools, users can access specific details about nodes, list all network nodes, and more. - -## Usage - -```bash -bacalhau node [command] -``` - -## Available Commands - -1. [**approve**](approve.md): - - - Description: Approves a single node to join the cluster. - - Usage: - - ```bash - bacalhau node approve - ``` - -2. [**delete**](delete.md): - - - Description: Deletes a node from the cluster using its ID. - - Usage: - - ```bash - bacalhau node delete - ``` - -3. [**describe**](describe.md): - - - Description: Retrieves detailed information of a node using its ID. - - Usage: - - ```bash - bacalhau node describe - ``` - -4. [**list**](list.md): - - - Description: Lists the details of all nodes present in the network. - - Usage: - - ```bash - bacalhau node list - ``` - -5. [**reject**](reject.md): - -- Description: Reject a specific node's request to join the cluster. -- Usage: - - ```bash - bacalhau node reject - ``` - -For comprehensive details on any of the sub-commands, run: - -```bash -bacalhau node [command] --help -``` - -## Flags - -- `-h`, `--help`: - - Description: Shows the help information for the `node` command. - -## Global Flags - -- `--api-host string`: - - Description: Specifies the host for RESTful communication between the client and server. The flag will be ignored if the `BACALHAU_API_HOST` environment variable is set. - - Default: `bootstrap.production.bacalhau.org` -- `--api-port int`: - - Description: Designates the port for RESTful communication. The flag will be bypassed if the `BACALHAU_API_PORT` environment variable is active. - - Default: `1234` -- `--log-mode logging-mode`: - - Description: Chooses the preferred log format. Available choices are: `default`, `station`, `json`, `combined`, and `event`. - - Default: `default` -- `--repo string`: - - Description: Specifies the path to the bacalhau repository. - - Default: `/Users/walid/.bacalhau` - - -## alive +## docs/cli/agent/alive.md # Alive @@ -491,267 +258,543 @@ bacalhau agent alive [flags] } ``` +## docs/cli/agent/node.md -## approve - -# Approve - -The `bacalhau node approve` command offers administrators the ability to approve the cluster membership for a node using its name. +# Node ## Description -Using the `approve` sub-command under the `bacalhau node` umbrella, users can allow a node in the pending state to join the cluster and receive work. This feature is crucial for system administrators to manage the cluster. +The `bacalhau agent node` command retrieves information about the agent's node, providing insights into the agent's environment and aiding in debugging. ## Usage ```bash -bacalhau node approve [id] [flags] +bacalhau agent node [flags] ``` ## Flags -- `[id]`: - - The unique identifier of the node you wish to describe. - `-h`, `--help`: - - Displays the help documentation for the `describe` command. -- `-m message`: - - A message to be attached to the approval action. + - Displays help information for the `node` sub-command. +- `--output format`: + - Defines the output format (either JSON or YAML). + - Options: `json`, `yaml` + - Default: `yaml` +- `--pretty`: + - Beautifies the output when using JSON or YAML formats. ## Global Flags - `--api-host string`: - - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. - - Default: `"bootstrap.production.bacalhau.org"` + - The host for REST communication. Overrides the `BACALHAU_API_HOST` environment variable. + - Default: `bootstrap.production.bacalhau.org` - `--api-port int`: - - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - The port for REST communication. Overridden if `BACALHAU_API_PORT` environment variable is set. - Default: `1234` - `--log-mode logging-mode`: - - Determines the log format preference. - - Options: `'default','station','json','combined','event'` - - Default: `'default'` + - Specifies the log format. Choices are: `default`, `station`, `json`, `combined`, `event`. + - Default: `default` - `--repo string`: - - Points to the bacalhau repository's path. - - Default: `"`$HOME/.bacalhau"\` + - Path to the bacalhau repository. + - Default: \`\`$HOME/.bacalhau\` ## Examples -1. Approve a Node with ID `nodeID123`: +1. **Retrieve Node Information in Default Format (YAML)** ```bash - bacalhau node approve nodeID123 + bacalhau agent node ``` -2. Approve a Node with an audit message: +2. **Retrieve Node Information in JSON Format** ```bash - bacalhau node approve nodeID123 -m "okay" + bacalhau agent node --output json ``` +3. **Retrieve Node Information in Pretty-printed JSON Format** -## delete + ```bash + bacalhau agent node --output json --pretty + ``` -# Delete +## docs/cli/agent/version.md -The `bacalhau node delete` command offers administrators the ability to remove a node from the cluster using its name. +# Version -## Description +The `bacalhau agent version` command is used to obtain the version of the bacalhau agent. -Using the `delete` sub-command, administrators can remove a node from the list of available compute nodes in the cluster. This feature is necessary for the management of the infrastructure. +## Description: -## Usage +Using this command, users can quickly retrieve the version of the agent, allowing them to confirm the specific release of the software they are using. + +## Usage: ```bash -bacalhau node delete [id] [flags] +bacalhau agent version [flags] ``` -## Flags +## Flags: -- `[id]`: - - The unique identifier of the node you wish to describe. -- `-h`, `--help`: - - Displays the help documentation for the `describe` command. -- `-m message`: - - A message to be attached to the deletion action. +- **`-h`, `--help`**: + - Show help for the `version` command. +- **`--output format`**: + - Defines the output format of the command's results. Accepted formats include "json" and "yaml". +- **`--pretty`**: + - Used for pretty printing the output, enhancing readability. This flag is applicable only for the "json" and "yaml" output formats. -## Global Flags +## Global Flags: -- `--api-host string`: - - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. +- **`--api-host string`**: + - Designates the host for client-server communication via REST. If the `BACALHAU_API_HOST` environment variable is present, this flag will be disregarded. - Default: `"bootstrap.production.bacalhau.org"` -- `--api-port int`: - - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. +- **`--api-port int`**: + - Defines the port for client-server communication through REST. This flag becomes irrelevant if the `BACALHAU_API_PORT` environment variable is specified. - Default: `1234` -- `--log-mode logging-mode`: - - Determines the log format preference. +- **`--log-mode logging-mode`**: + - Specifies the desired logging format. - Options: `'default','station','json','combined','event'` - Default: `'default'` -- `--repo string`: - - Points to the bacalhau repository's path. +- **`--repo string`**: + - Indicates the path to the bacalhau repository. - Default: `"`$HOME/.bacalhau"\` ## Examples -1. Delete the Node with ID `nodeID123`: +1. **Retrieve the agent version**: + + Execute the command to get the agent version: ```bash - bacalhau node delete nodeID123 + bacalhau agent version ``` -2. Delete a Node with an audit message: + Expected output: ```bash - bacalhau node delete nodeID123 -m "bad actor" + Bacalhau v0.0.0-xxxxxxx + BuildDate 2023-09-22 16:03:44 +0000 UTC + GitCommit 0fe81cb488f666845ac72c73a4b804aaa658e511 ``` +2. **Retrieve the agent version in JSON format**: -## describe + ```bash + bacalhau agent version --output json + ``` -# Describe + Expected output: -## Description + ```bash + {"major":"0","minor":"0","gitversion":"v0.0.0-xxxxxxx","gitcommit":"0fe81cb488f666845ac72c73a4b804aaa658e511","builddate":"2023-09-22T16:03:44Z","goos":"linux","goarch":"amd64"} + ``` -The `bacalhau job describe` command provides a detailed description of a specific job in YAML format. This description can be particularly useful when wanting to understand the attributes and current status of a specific job. To list all available jobs, the `bacalhau job list` command can be used. +3. **Retrieve the agent version in Pretty-printed JSON format**: -## Usage + ```bash + bacalhau agent version --output json --pretty + ``` -```bash -bacalhau job describe [id] [flags] -``` + Expected output: -## Flags + ```bash + { + "major": "0", + "minor": "0", + "gitversion": "v0.0.0-xxxxxxx", + "gitcommit": "0fe81cb488f666845ac72c73a4b804aaa658e511", + "builddate": "2023-09-22T16:03:44Z", + "goos": "linux", + "goarch": "amd64" + } + ``` -- `-h`, `--help`: - - Description: Display help for the `describe` command. -- `--output format`: - - Description: Specifies the desired output format for the command. Supported values are `json` and `yaml`. - - Default: `yaml` -- `--pretty`: - - Description: Pretty prints the output. This option is applicable only to `json` and `yaml` output formats. +## docs/cli/config/README.md -## Global Flags +# Config -- `--api-host string`: - - Description: Specifies the host for the client and server to communicate through via REST. If the `BACALHAU_API_HOST` environment variable is set, this flag will be ignored. - - Default: `bootstrap.production.bacalhau.org` -- `--api-port int`: - - Description: Determines the port for the client and server to communicate on using REST. If the `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. - - Default: `1234` -- `--log-mode logging-mode`: - - Description: Specifies the desired log format. Supported values include `default`, `station`, `json`, `combined`, and `event`. - - Default: `default` -- `--repo string`: - - Description: Defines the path to the bacalhau repository. - - Default: `$HOME/.bacalhau` +The `bacalhau config` command is a parent command that offers sub-commands to modify and query information about the Bacalhau config. This can be useful for debugging, monitoring, or managing the nodes configuration. -## Examples +## Usage -1. **Describe a Job with Full ID**: +```bash +bacalhau config [command] +``` - ```bash - bacalhau job describe j-e3f8c209-d683-4a41-b840-f09b88d087b9 - ``` +## Available Commands -2. **Describe a Job with Shortened ID**: +1. [**list**](list.md): - ```bash - bacalhau job describe j-47805f5c - ``` + - Description: Lists the configuration keys and values of the bacalhau node. This command is useful for understanding how configuration keys map to their respective values, aiding in the use of the `bacalhau config set` command. + - Usage: -3. **Describe a Job with JSON Output**: + ```bash + bacalhau config list + ``` - ```bash - bacalhau job describe --output json --pretty j-b6ad164a - ``` +2. [**set**](set.md): + - Description: Sets a value in the bacalhau node's configuration file. This command is used to modify the configuration file that the bacalhau node will reference for its settings. + - Usage: -## describe + ```bash + bacalhau config set + ``` -# Describe +## docs/cli/config/list.md -The `bacalhau node describe` command offers users the ability to retrieve detailed information about a specific node using its unique identifier. +# Config List ## Description -Using the `describe` sub-command under the `bacalhau node` umbrella, users can get comprehensive details of a node by providing its ID. This information is crucial for system administrators and network managers to understand the state, specifications, and other attributes of nodes in their infrastructure. +The `bacalhau config list` command lists the configuration keys and values of the bacalhau node. This command is useful for understanding how configuration keys map to their respective values, aiding in the use of the `bacalhau config set` command. + +Note: Configuration values displayed by this command represent the settings that will be applied when the bacalhau node is next restarted. It is important to note that these values may not reflect the current operational configuration of an active bacalhau node. The displayed configuration is relevant and accurate for a node that is either not currently running or that has been restarted after the execution of this command. ## Usage ```bash -bacalhau node describe [id] [flags] +bacalhau config list [flags] ``` ## Flags -- `[id]`: - - The unique identifier of the node you wish to describe. - `-h`, `--help`: - - Displays the help documentation for the `describe` command. + - Description: Displays help information for the `list` sub-command. +- `--hide-header`: + - Description: Do not print the column headers when displaying the results. + - Default: `false` +- `--no-style`: + - Description: Removes all styling from the table output, displaying raw data. + - Default: `false` - `--output format`: - - Defines the desired format for the command's output. - - Options: `"json"` or `"yaml"` - - Default: `"yaml"` + - Description: Determines the format in which the output is displayed. Available formats include Table, JSON, and YAML. + - Options: `json`, `yaml`, `table` + - Default: `table` - `--pretty`: - - When this flag is used, the command will pretty print the output. This is applicable only for outputs in `json` and `yaml` formats. + - Description: Formats the output for enhanced readability. This flag is relevant only when using JSON or YAML output formats. + - Default: `true` +- `--wide`: + - Description: Prints full values in the table results without truncating any information. + - Default: `false` -## Global Flags +## Examples -- `--api-host string`: - - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. - - Default: `"bootstrap.production.bacalhau.org"` -- `--api-port int`: - - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. - - Default: `1234` -- `--log-mode logging-mode`: - - Determines the log format preference. - - Options: `'default','station','json','combined','event'` - - Default: `'default'` -- `--repo string`: - - Points to the bacalhau repository's path. - - Default: `"`$HOME/.bacalhau"\` +### Listing the Bacalhau nodes configuration settings -## Examples +1. **Basic Usage**: -1. Describing a Node with ID `nodeID123`: + **Command**: ```bash - bacalhau node describe nodeID123 + bacalhau config list ``` -2. Describing a Node with Output in JSON Format: + **Output**: ```bash - bacalhau node describe nodeID123 --output json + KEY VALUE + + ... ``` -3. Pretty Printing the Description of a Node: +2. **Output in JSON format**: + + **Command**: ```bash - bacalhau node describe nodeID123 --pretty + bacalhau config list --output json --pretty ``` + **Output**: -## executions + ```json + [ + { + "Key": "", + "Value": + }, + ... + ] + ``` -# Executions +## docs/cli/config/set.md -## Description +# Config Set -The `bacalhau job executions` command retrieves a list of executions for a specific job based on its ID. This can be essential when tracking the various runs and their respective states for a particular job. +## Description: + +The `bacalhau config set` command sets a value in the bacalhau node's configuration file. This command is used to modify the configuration file that the bacalhau node will reference for its settings. Key names in the configuration are case-insensitive. Additionally, the command validates the value being set based on the type of the configuration key, ensuring that only appropriate and valid configurations are applied. + +:::note +Changes made using this command will be applied to the configuration file, but they do not immediately affect the running configuration of an active bacalhau node. The modifications will take effect only after the node is restarted. +::: ## Usage ```bash -bacalhau job executions [id] [flags] +bacalhau config set ``` ## Flags - `-h`, `--help`: - - Description: Display help for the `executions` command. -- `--hide-header`: - - Description: Do not print the column headers when displaying the results. -- `--limit uint32`: - - Description: Restricts the number of results returned. + - Description: Displays help information for the `set` sub-command. + +## Examples + +### Configuring the Server API Port Value + +```bash +bacalhau config set node.serverapi.port 9999 + +bacalhau config list | grep serverapi.port + node.serverapi.port 9999 + +cat ~/.bacalhau/config.yaml +node: + serverapi: + port: 9999 +``` + +### Configuring the Logging Mode Value + +```bash +bacalhau config set node.loggingmode json + +bacalhau config list | grep loggingmode + node.loggingmode json + +cat ~/.bacalhau/config.yaml +node: + loggingmode: json +``` + +### Multiple Set commands append to the file + +```bash +bacalhau config set node.serverapi.port 9999 +bacalhau config set node.serverapi.host 0.0.0.0 +bacalhau config set node.loggingmode json + +cat ~/.bacalhau/config.yaml +node: + loggingmode: json + serverapi: + host: 0.0.0.0 + port: 9999 +``` + +### Set command value validation + +#### Example of invalid logging mode value + +```bash +bacalhau config set node.loggingmode some-invalid-value + +Error: setting "node.loggingmode": "some-invalid-value" is an invalid log-mode (valid modes: ["default" "station" "json" "combined" "event"]) +``` + +#### Example of invalid time duration value + +```bash +bacalhau config set node.volumesizerequesttimeout 10days + +Error: setting "node.volumesizerequesttimeout": time: unknown unit "days" in duration "10days" +``` + +## docs/cli/job/README.md + +# Job + +The `bacalhau job` command provides a suite of sub-commands to submit, query, and manage jobs within Bacalhau. Users can deploy jobs, obtain job details, track execution logs, and more. + +## Usage + +```bash +bacalhau job [command] +``` + +## Available Commands + +1. [**describe**](./describe.md): + + - Description: Retrieves detailed information of a job using its ID. + - Usage: + + ```bash + bacalhau job describe + ``` + +2. [**executions**](./executions.md): + + - Description: Lists all executions associated with a job, identified by its ID. + - Usage: + + ```bash + bacalhau job executions + ``` + +3. [**get**](./get.md): + + - Description: Get the results of a job, identified by its ID. + - Usage: + + ```bash + bacalhau job get + ``` + +4. [**history**](./history.md): + + - Description: Enumerates the historical events related to a job, identified by its ID. + - Usage: + + ```bash + bacalhau job history + ``` +5. [**list**](./list.md): + + - Description: Provides an overview of all submitted jobs. + - Usage: + + ```bash + bacalhau job list + ``` + +6. [**logs**](./logs.md): + + - Description: Fetches and streams the logs from a currently executing job. + - Usage: + + ```bash + bacalhau job logs + ``` + +7. [**run**](./run.md): + + - Description: Submits a job for execution using either a JSON or YAML configuration file. + - Usage: + + ```bash + bacalhau job run + ``` + +8. [**stop**](./stop.md): + + - Description: Halts a previously submitted job. + - Usage: + + ```bash + bacalhau job stop + ``` + +For comprehensive details on any of the sub-commands, run: + +```bash +bacalhau job [command] --help +``` + +## Flags + +- `-h`, `--help`: + - Description: Shows the help information for the `job` command. + +## Global Flags + +1. `--api-host string`: + - Description: Determines the host for RESTful communication between the client and server. This flag is overlooked if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +2. `--api-port int`: + - Description: Designates the port for RESTful communication. This flag is bypassed if the `BACALHAU_API_PORT` environment variable is active. + - Default: `1234` +3. `--log-mode logging-mode`: + - Description: Chooses the preferred log format. Available choices are: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +4. `--repo string`: + - Description: Specifies the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## docs/cli/job/describe.md + +# Describe + +## Description + +The `bacalhau job describe` command provides a detailed description of a specific job in YAML format. This description can be particularly useful when wanting to understand the attributes and current status of a specific job. To list all available jobs, the `bacalhau job list` command can be used. + +## Usage + +```bash +bacalhau job describe [id] [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Display help for the `describe` command. +- `--output format`: + - Description: Specifies the desired output format for the command. Supported values are `json` and `yaml`. + - Default: `yaml` +- `--pretty`: + - Description: Pretty prints the output. This option is applicable only to `json` and `yaml` output formats. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host for the client and server to communicate through via REST. If the `BACALHAU_API_HOST` environment variable is set, this flag will be ignored. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Determines the port for the client and server to communicate on using REST. If the `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Specifies the desired log format. Supported values include `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Defines the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` + +## Examples + +1. **Describe a Job with Full ID**: + + ```bash + bacalhau job describe j-e3f8c209-d683-4a41-b840-f09b88d087b9 + ``` + +2. **Describe a Job with Shortened ID**: + + ```bash + bacalhau job describe j-47805f5c + ``` + +3. **Describe a Job with JSON Output**: + + ```bash + bacalhau job describe --output json --pretty j-b6ad164a + ``` + +## docs/cli/job/executions.md + +# Executions + +## Description + +The `bacalhau job executions` command retrieves a list of executions for a specific job based on its ID. This can be essential when tracking the various runs and their respective states for a particular job. + +## Usage + +```bash +bacalhau job executions [id] [flags] +``` + +## Flags + +- `-h`, `--help`: + - Description: Display help for the `executions` command. +- `--hide-header`: + - Description: Do not print the column headers when displaying the results. +- `--limit uint32`: + - Description: Restricts the number of results returned. - Default: `20` - `--next-token string`: - Description: Uses the specified token for pagination. Useful for fetching the next set of results. @@ -832,8 +875,7 @@ bacalhau job executions [id] [flags] ... [The YAML formatted output] ... ``` - -## get +## docs/cli/job/get.md # Get @@ -883,8 +925,7 @@ bacalhau job get [id] [flags] `bacalhau job get 51225160` - -## history +## docs/cli/job/history.md # History @@ -1008,88 +1049,9 @@ bacalhau job history [id] [flags] ... [The YAML formatted output] ... ``` +## docs/cli/job/list.md -## list - -# Config List - -## Description - -The `bacalhau config list` command lists the configuration keys and values of the bacalhau node. This command is useful for understanding how configuration keys map to their respective values, aiding in the use of the `bacalhau config set` command. - -Note: Configuration values displayed by this command represent the settings that will be applied when the bacalhau node is next restarted. It is important to note that these values may not reflect the current operational configuration of an active bacalhau node. The displayed configuration is relevant and accurate for a node that is either not currently running or that has been restarted after the execution of this command. - -## Usage - -```bash -bacalhau config list [flags] -``` - -## Flags - -- `-h`, `--help`: - - Description: Displays help information for the `list` sub-command. -- `--hide-header`: - - Description: Do not print the column headers when displaying the results. - - Default: `false` -- `--no-style`: - - Description: Removes all styling from the table output, displaying raw data. - - Default: `false` -- `--output format`: - - Description: Determines the format in which the output is displayed. Available formats include Table, JSON, and YAML. - - Options: `json`, `yaml`, `table` - - Default: `table` -- `--pretty`: - - Description: Formats the output for enhanced readability. This flag is relevant only when using JSON or YAML output formats. - - Default: `true` -- `--wide`: - - Description: Prints full values in the table results without truncating any information. - - Default: `false` - -## Examples - -### Listing the Bacalhau nodes configuration settings - -1. **Basic Usage**: - - **Command**: - - ```bash - bacalhau config list - ``` - - **Output**: - - ```bash - KEY VALUE - - ... - ``` - -2. **Output in JSON format**: - - **Command**: - - ```bash - bacalhau config list --output json --pretty - ``` - - **Output**: - - ```json - [ - { - "Key": "", - "Value": - }, - ... - ] - ``` - - -## list - -# List +# List ## Description @@ -1226,153 +1188,7 @@ bacalhau job list [flags] ... [The JSON formatted output] ... ``` - -## list - -# List - -The `bacalhau node list` command is designed to provide users with a comprehensive list of network nodes along with details based on specified flags. - -## Description - -The `list` sub-command under the `bacalhau node` category enumerates information about nodes in the network. It supports various filtering, ordering, and output formatting options, allowing users to tailor the output to their needs. - -## Usage - -```bash -bacalhau node list [flags] -``` - -## Flags - -- `-h`, `--help`: - - Show the help message for the `list` command. -- `--hide-header`: - - Do not display the column headers in the output. -- `--filter-approval`: - - Only show nodes with the specified approval status. Valid values are: `approved`, `pending`, `rejected`. -- `--filter-status`: - - Only show nodes with the specified state. Valid values are: `healthy`, `unhealthy`, `unknown`. -- `--labels string`: - - Filter nodes based on labels. This follows the filtering format provided by Kubernetes, as shown in their documentation about labels. -- `--limit uint32`: - - Restrict the number of results displayed. -- `--next-token string`: - - Provide the next token for pagination. -- `--no-style`: - - Output the table without any style. -- `--order-by string`: - - Sort the results based on a specific field. Valid sorting fields are: `id`, `type`, `available_cpu`, `available_memory`, `available_disk`, `available_gpu`. -- `--order-reversed`: - - Display the results in reverse order. -- `--output format`: - - Choose the output format. Available options: `table`, `csv`, `json`, `yaml`. - - Default: `table`. -- `--pretty`: - - Enhance the visual appeal of the output. This is applicable only to `json` and `yaml` formats. -- `--show strings`: - - Determine the column groups to be displayed. Acceptable values are: `labels`, `version`, `features`, `capacity`. - - Default: `labels`, `capacity`. -- `--wide`: - - Display full values in the output table, without truncation. - -## Global Flags - -- `--api-host string`: - - Specify the host for client-server communication via REST. This gets ignored if the `BACALHAU_API_HOST` environment variable is defined. - - Default: `"bootstrap.production.bacalhau.org"`. -- `--api-port int`: - - Specify the port for RESTful communication between client and server. Gets overlooked if the `BACALHAU_API_PORT` environment variable is set. - - Default: `1234`. -- `--log-mode logging-mode`: - - Choose the desired log format. - - Options: `'default', 'station', 'json', 'combined', 'event'`. - - Default: `'default'`. -- `--repo string`: - - Point to the directory path of the bacalhau repository. - - Default: `"`$HOME/.bacalhau"\`. - -## Examples - -1. **Retrieve the list of nodes**: - - Execute the command to get a list of all nodes: - - ```bash - bacalhau node list - ``` - - Expected output: - - ```plaintext - ID TYPE LABELS CPU MEMORY DISK GPU - QmTSJgdN Compute Architecture=amd64 Operating-System=linux 3.2 / 11.7 GB / 77.8 GB / 1 / - git-lfs=True owner=bacalhau 3.2 11.7 GB 77.8 GB 1 - QmVXwmdZ Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 77.8 GB / 0 / - git-lfs=True owner=bacalhau 3.2 12.5 GB 77.8 GB 0 - QmXRdLru Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 78.0 GB / 0 / - git-lfs=True owner=bacalhau 3.2 12.5 GB 78.0 GB 0 - ... [Additional nodes information] ... - ``` - -2. **Filter the list of nodes by labels**: - - Execute the command to get a list of nodes with specific labels: - - ```bash - bacalhau node list --labels "Operating-System=linux,owner=bacalhau" - ``` - - Expected output: - - ```plaintext - ID TYPE LABELS CPU MEMORY DISK GPU - QmTSJgdN Compute Architecture=amd64 Operating-System=linux 3.2 / 11.7 GB / 77.8 GB / 1 / - git-lfs=True owner=bacalhau 3.2 11.7 GB 77.8 GB 1 - ... [Additional nodes information] ... - ``` - -3. **Order the list of nodes by available memory**: - - Execute the command to get the list of nodes ordered by available memory: - - ```bash - bacalhau node list --order-by available_memory - ``` - - Expected output: - - ```plaintext - ID TYPE LABELS CPU MEMORY DISK GPU - QmVXwmdZ Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 77.8 GB / 0 / - git-lfs=True owner=bacalhau 3.2 12.5 GB 77.8 GB 0 - ... [Additional nodes information] ... - ``` - -4. **Limit the number of nodes displayed and output in JSON format**: - - Execute the command to get a limited list of nodes in JSON format: - - ```bash - bacalhau node list --limit 3 --output json --pretty - ``` - - Expected output: - - ```json - [ - { - "PeerInfo": { - "ID": "QmTSJgdN7zCPAqBCkmdsdpFbiJV8bJ6zhoxK9N5xfar1sz", - ... [Additional node details] ... - }, - ... [Other nodes] ... - } - ] - ``` - - -## logs +## docs/cli/job/logs.md # Logs @@ -1462,216 +1278,384 @@ bacalhau job logs [id] [flags] [2023-09-24 10:16:00] ERROR - Failed to send email notification to user@example.com. ``` +## docs/cli/job/run.md -## node - -# Node +# Run ## Description -The `bacalhau agent node` command retrieves information about the agent's node, providing insights into the agent's environment and aiding in debugging. +The `bacalhau job run` command facilitates the initiation of a job from a file or directly from the standard input (stdin). The command supports both JSON and YAML data formats. This command is particularly useful for quickly executing a job without the need for manual configurations. ## Usage ```bash -bacalhau agent node [flags] +bacalhau job run [flags] ``` ## Flags +- `--dry-run`: + - Description: With this flag, the job will not be submitted. Instead, it will display what would have been submitted, providing a way to preview before actual submission. +- `-f`, `--follow`: + - Description: If provided, the command will continuously display the output from the job as it runs. +- `--id-only`: + - Description: On successful job submission, only the Job ID will be printed. +- `--node-details`: + - Description: Displays details of all nodes. Note that this flag is overridden if `--id-only` is provided. +- `--show-warnings`: + - Description: Shows any warnings that occur during the job submission. +- `--wait`: + - Description: Waits for the job to finish execution. To set this to false, use --wait=false + - Default: `true` +- `--wait-timeout-secs int`: + - Description: If `--wait` is provided, this flag sets the maximum time (in seconds) the command will wait for the job to finish before it terminates. + - Default: `600` seconds - `-h`, `--help`: - - Displays help information for the `node` sub-command. -- `--output format`: - - Defines the output format (either JSON or YAML). - - Options: `json`, `yaml` - - Default: `yaml` -- `--pretty`: - - Beautifies the output when using JSON or YAML formats. + - Description: Displays help information for the `run` command. ## Global Flags - `--api-host string`: - - The host for REST communication. Overrides the `BACALHAU_API_HOST` environment variable. + - Description: Specifies the host used for RESTful communication between the client and server. The flag is disregarded if `BACALHAU_API_HOST` environment variable is set. - Default: `bootstrap.production.bacalhau.org` - `--api-port int`: - - The port for REST communication. Overridden if `BACALHAU_API_PORT` environment variable is set. + - Description: Determines the port for REST communication. If `BACALHAU_API_PORT` environment variable is set, this flag will be ignored. - Default: `1234` - `--log-mode logging-mode`: - - Specifies the log format. Choices are: `default`, `station`, `json`, `combined`, `event`. + - Description: Selects the desired log format. Options include: `default`, `station`, `json`, `combined`, and `event`. - Default: `default` - `--repo string`: - - Path to the bacalhau repository. - - Default: \`\`$HOME/.bacalhau\` + - Description: Defines the path to the bacalhau repository. + - Default: `$HOME/.bacalhau` ## Examples -1. **Retrieve Node Information in Default Format (YAML)** +**Sample Job (`job.yaml`)** - ```bash - bacalhau agent node - ``` +A sample job used in the following examples is provided below: -2. **Retrieve Node Information in JSON Format** +```bash +cat job.yaml +``` - ```bash - bacalhau agent node --output json - ``` +```yaml +name: A Simple Docker Job +type: batch +count: 1 +tasks: + - name: My main task + engine: + type: docker + params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo Hello Bacalhau! +``` -3. **Retrieve Node Information in Pretty-printed JSON Format** +This configuration describes a batch job that runs a Docker task. It utilizes the `ubuntu:latest` image and executes the command `echo Hello Bacalhau!`. + +1. **Running a Job using a YAML Configuration**: + + To run a job with a configuration provided in a `job.yaml` file: + + **Command:** ```bash - bacalhau agent node --output json --pretty + bacalhau job run job.yaml ``` + **Expected Output:** -## reject + ```plaintext + Job successfully submitted. Job ID: j-2d0f513a-9eb1-49c2-8bc8-246c6fb41520 + Checking job status... (Enter Ctrl+C to exit at any time, your job will continue running): -# Reject + Communicating with the network ................ done ✅ 0.1s + Creating job for submission ................ done ✅ 0.6s -The `bacalhau node reject` command offers administrators the ability to reject a compute node's request to join the cluster. + To get more details about the run, execute: + bacalhau job describe j-2d0f513a-9eb1-49c2-8bc8-246c6fb41520 -## Description + To get more details about the run executions, execute: + bacalhau job executions j-2d0f513a-9eb1-49c2-8bc8-246c6fb41520 + ``` -Using the `reject` sub-command, administrators can reject a node in the pending state from joining the cluster and receiving work. This feature is crucial for system administrators to manage the cluster and will stop the node from taking part in the cluster until approved. +2. **Running a Job and Following its Logs**: -## Usage + **Command:** -```bash -bacalhau node rejected [id] [flags] -``` + ```bash + bacalhau job run job.yaml --follow + ``` -## Flags + **Expected Output:** -- `[id]`: - - The unique identifier of the node you wish to describe. -- `-h`, `--help`: - - Displays the help documentation for the `describe` command. -- `-m message`: - - A message to be attached to the rejection action. + ```plaintext + Job successfully submitted. Job ID: j-b89df816-7564-4f04-b270-e6cda89eda72 + Waiting for logs... (Enter Ctrl+C to exit at any time, your job will continue running): -## Global Flags + Hello Bacalhau! + ``` -- `--api-host string`: - - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. - - Default: `"bootstrap.production.bacalhau.org"` -- `--api-port int`: - - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. - - Default: `1234` -- `--log-mode logging-mode`: - - Determines the log format preference. - - Options: `'default','station','json','combined','event'` - - Default: `'default'` -- `--repo string`: - - Points to the bacalhau repository's path. - - Default: `"`$HOME/.bacalhau"\` +3. **Running a Job Without Waiting**: -## Examples + **Command:** -1. Reject a Node with ID `nodeID123`: + ```bash + bacalhau job run job.yaml --wait=false + ``` + + **Expected Output:** + + ```plaintext + j-3fd396b3-e92e-42ca-bd87-0dc9eb15e6f9 + ``` + +4. **Fetching Only the Job ID Upon Submission**: + + **Command:** ```bash - bacalhau node reject nodeID123 + bacalhau job run job.yaml --id-only ``` -2. Reject a Node with an audit message: + **Expected Output:** + + ```plaintext + j-5976ffb6-3465-4fec-8b3b-2c822cbaf417 + ``` + +5. **Fetching Only the Job ID and Wait for Completion**: + + **Command:** ```bash - bacalhau node reject nodeID123 -m "potentially bad" + bacalhau job run job.yaml --id-only --wait ``` + **Expected Output:** -## run + ```plaintext + j-293f1302-3298-4aca-b06d-33fd1e3f9d2c + ``` -[Content truncated - see full docs] +6. **Running a Job with Node Details**: + **Command:** -## set + ```bash + bacalhau job run job.yaml --node-details + ``` -# Config Set + **Expected Output:** -## Description: + ```plaintext + Job successfully submitted. Job ID: j-05e65dd3-4e9e-4e20-a104-3c91ba934435 + Checking job status... (Enter Ctrl+C to exit at any time, your job will continue running): -The `bacalhau config set` command sets a value in the bacalhau node's configuration file. This command is used to modify the configuration file that the bacalhau node will reference for its settings. Key names in the configuration are case-insensitive. Additionally, the command validates the value being set based on the type of the configuration key, ensuring that only appropriate and valid configurations are applied. + Communicating with the network ................ done ✅ 0.1s + Creating job for submission ................ done ✅ 0.6s -:::note -Changes made using this command will be applied to the configuration file, but they do not immediately affect the running configuration of an active bacalhau node. The modifications will take effect only after the node is restarted. -::: + Job Results By Node: + • Node QmVXwmdZ: + Hello Bacalhau! -## Usage + To get more details about the run, execute: + bacalhau job describe j-05e65dd3-4e9e-4e20-a104-3c91ba934435 -```bash -bacalhau config set -``` + To get more details about the run executions, execute: + bacalhau job executions j-05e65dd3-4e9e-4e20-a104-3c91ba934435 + ``` -## Flags +7. **Rerunning a previously submitting job**: -- `-h`, `--help`: - - Description: Displays help information for the `set` sub-command. + **Command:** -## Examples + ```bash + bacalhau job describe j-05e65dd3-4e9e-4e20-a104-3c91ba934435 | bacalhau job run + ``` -### Configuring the Server API Port Value + **Expected Output:** -```bash -bacalhau config set node.serverapi.port 9999 + ```plaintext + Reading from /dev/stdin; send Ctrl-d to stop.Job successfully submitted. Job ID: j-d8625929-83f4-411a-b9aa-7bcfecb27a8b + Checking job status... (Enter Ctrl+C to exit at any time, your job will continue running): -bacalhau config list | grep serverapi.port - node.serverapi.port 9999 + Communicating with the network ................ done ✅ 0.1s + Creating job for submission ................ done ✅ 0.6s -cat ~/.bacalhau/config.yaml -node: - serverapi: - port: 9999 + To get more details about the run, execute: + bacalhau job describe j-d8625929-83f4-411a-b9aa-7bcfecb27a8b + + To get more details about the run executions, execute: + bacalhau job executions j-d8625929-83f4-411a-b9aa-7bcfecb27a8b + ``` + +## Job Templating + +The `bacalhau job run` command also supports templating, which allows users to dynamically inject variables into their job specifications. Additional flags related to templating include: + +- `--no-template`: + - Description: Disable the templating feature. When this flag is set, the job spec will be used as-is, without any placeholder replacements. +- `-E, --template-envs`: + - Description: Specify a regular expression pattern for selecting environment variables to be included as template variables in the job spec. e.g. `--template-envs ".*"` will include all environment variables. +- `-V, --template-vars`: + - Description: Replace a placeholder in the job spec with a value. e.g. `--template-vars foo=bar` + +### Overview + +Templating is particularly useful when running multiple jobs with varying parameters such as DuckDB query, S3 buckets, prefixes, and time ranges without the need to edit each job specification file manually. + +### Templating Implementation + +The templating functionality in Bacalhau is built upon the Go text/template package. This powerful library offers a wide range of features for manipulating and formatting text based on template definitions and input variables. + +For more detailed information about the Go text/template library and its syntax, please refer to the official documentation: [Go text/template Package](https://golang.org/pkg/text/template/). + +### Basic Templating Example + +**Sample Job Spec with Templating Variables**: + +```yaml +Name: docker job +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo {{.greeting}} {{.name}} ``` -### Configuring the Logging Mode Value +**Running with Templating**: -```bash -bacalhau config set node.loggingmode json +``` +bacalhau job run job.yaml --template-vars "greeting=Hello,name=World" +``` -bacalhau config list | grep loggingmode - node.loggingmode json +**Defining Flag Multiple Times**: -cat ~/.bacalhau/config.yaml -node: - loggingmode: json +``` +bacalhau job run job.yaml --template-vars "greeting=Hello" --template-vars "name=World" ``` -### Multiple Set commands append to the file +**Disabling Templating**: -```bash -bacalhau config set node.serverapi.port 9999 -bacalhau config set node.serverapi.host 0.0.0.0 -bacalhau config set node.loggingmode json +``` +bacalhau job run job.yaml --no-template +``` + +### Using Environment Variables for Templates + +You can also use environment variables for templating: -cat ~/.bacalhau/config.yaml -node: - loggingmode: json - serverapi: - host: 0.0.0.0 - port: 9999 ``` -### Set command value validation +bacalhau job run job.yaml --template-envs "*" +``` -#### Example of invalid logging mode value +**Passing A Subset of Environment Variables**: -```bash -bacalhau config set node.loggingmode some-invalid-value +``` +bacalhau job run job.yaml --template-envs "greeting|name" +``` + +### Dry Run to Preview Templated Spec + +To preview the final templated job spec without actually submitting the job, you can use the `--dry-run` flag: -Error: setting "node.loggingmode": "some-invalid-value" is an invalid log-mode (valid modes: ["default" "station" "json" "combined" "event"]) +``` +bacalhau job run job.yaml --template-vars "greeting=Hello,name=World" --dry-run ``` -#### Example of invalid time duration value +This will output the processed job specification, showing you how the placeholders have been replaced with the provided values. + +### Advanced Templating Examples + +#### Query Live Logs + +```yaml +Name: Live logs processing +Type: ops +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/nginx-access-log-query:1.0.0 + Parameters: + - --query + - { { .query } } + - --start-time + - { { or (index . "start-time") "" } } + - --end-time + - { { or (index . "end-time") "" } } + InputSources: + - Target: /logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs +``` -```bash -bacalhau config set node.volumesizerequesttimeout 10days +This is an ops job that runs on all nodes that match the job selection criteria. It accepts duckdb query variable, and two optional start-time and end-time variables to define the time range for the query. -Error: setting "node.volumesizerequesttimeout": time: unknown unit "days" in duration "10days" +To run this job, you can use the following command: + +``` +bacalhau job run job.yaml \ + -V "query=SELECT status FROM logs WHERE status LIKE '5__'" \ + -V "start-time=-5m" +``` + +#### Query S3 Logs + +```yaml +Name: S3 logs processing +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/nginx-access-log-query:1.0.0 + Parameters: + - --query + - { { .query } } + InputSources: + - Target: /logs + Source: + Type: s3 + Params: + Bucket: { { .AccessLogBucket } } + Key: { { .AccessLogPrefix } } + Filter: { { or (index . "AccessLogPattern") ".*" } } + Region: { { .AWSRegion } } ``` +This is a batch job that runs on a single node. It accepts the duckdb query variable, and four other variables to define the S3 bucket, prefix, and pattern for the logs and the AWS region. + +To run this job, you can use the following command: + +``` +bacalhau job run job.yaml \ + -V "AccessLogBucket=my-bucket" \ + -V "AWSRegion=us-east-1" \ + -V "AccessLogPrefix=2023-11-19-*" \ + -V "AccessLogPattern=^[10-12].*" +``` -## stop +## docs/cli/job/stop.md # Stop @@ -1724,9 +1708,9 @@ bacalhau job stop [id] [flags] ```plaintext Checking job status - Connecting to network ................ done ✅ 0.0s - Verifying job state ................ done ✅ 0.2s - Stopping job ................ done ✅ 0.1s + Connecting to network ................ done ✅ 0.0s + Verifying job state ................ done ✅ 0.2s + Stopping job ................ done ✅ 0.1s Job stop successfully submitted with evaluation ID: 397fd425-8b1a-491e-952a-0632492e7ece ``` @@ -1747,95 +1731,461 @@ bacalhau job stop [id] [flags] [No output displayed as the operation is run quietly.] ``` +## docs/cli/node/README.md -## version - -# Version - -The `bacalhau agent version` command is used to obtain the version of the bacalhau agent. - -## Description: +# Node -Using this command, users can quickly retrieve the version of the agent, allowing them to confirm the specific release of the software they are using. +The `bacalhau node` command provides a set of sub-commands to query and manage node-related information within Bacalhau. With these tools, users can access specific details about nodes, list all network nodes, and more. -## Usage: +## Usage ```bash -bacalhau agent version [flags] +bacalhau node [command] ``` -## Flags: - -- **`-h`, `--help`**: - - Show help for the `version` command. -- **`--output format`**: - - Defines the output format of the command's results. Accepted formats include "json" and "yaml". -- **`--pretty`**: - - Used for pretty printing the output, enhancing readability. This flag is applicable only for the "json" and "yaml" output formats. +## Available Commands -## Global Flags: +1. [**approve**](approve.md): -- **`--api-host string`**: - - Designates the host for client-server communication via REST. If the `BACALHAU_API_HOST` environment variable is present, this flag will be disregarded. - - Default: `"bootstrap.production.bacalhau.org"` -- **`--api-port int`**: - - Defines the port for client-server communication through REST. This flag becomes irrelevant if the `BACALHAU_API_PORT` environment variable is specified. - - Default: `1234` -- **`--log-mode logging-mode`**: - - Specifies the desired logging format. - - Options: `'default','station','json','combined','event'` - - Default: `'default'` -- **`--repo string`**: - - Indicates the path to the bacalhau repository. - - Default: `"`$HOME/.bacalhau"\` + - Description: Approves a single node to join the cluster. + - Usage: -## Examples + ```bash + bacalhau node approve + ``` -1. **Retrieve the agent version**: +2. [**delete**](delete.md): - Execute the command to get the agent version: + - Description: Deletes a node from the cluster using its ID. + - Usage: - ```bash - bacalhau agent version - ``` + ```bash + bacalhau node delete + ``` - Expected output: +3. [**describe**](describe.md): - ```bash - Bacalhau v0.0.0-xxxxxxx - BuildDate 2023-09-22 16:03:44 +0000 UTC - GitCommit 0fe81cb488f666845ac72c73a4b804aaa658e511 - ``` + - Description: Retrieves detailed information of a node using its ID. + - Usage: -2. **Retrieve the agent version in JSON format**: + ```bash + bacalhau node describe + ``` - ```bash - bacalhau agent version --output json - ``` +4. [**list**](list.md): - Expected output: + - Description: Lists the details of all nodes present in the network. + - Usage: - ```bash - {"major":"0","minor":"0","gitversion":"v0.0.0-xxxxxxx","gitcommit":"0fe81cb488f666845ac72c73a4b804aaa658e511","builddate":"2023-09-22T16:03:44Z","goos":"linux","goarch":"amd64"} - ``` + ```bash + bacalhau node list + ``` -3. **Retrieve the agent version in Pretty-printed JSON format**: +5. [**reject**](reject.md): - ```bash - bacalhau agent version --output json --pretty - ``` +- Description: Reject a specific node's request to join the cluster. +- Usage: - Expected output: + ```bash + bacalhau node reject + ``` + +For comprehensive details on any of the sub-commands, run: + +```bash +bacalhau node [command] --help +``` + +## Flags + +- `-h`, `--help`: + - Description: Shows the help information for the `node` command. + +## Global Flags + +- `--api-host string`: + - Description: Specifies the host for RESTful communication between the client and server. The flag will be ignored if the `BACALHAU_API_HOST` environment variable is set. + - Default: `bootstrap.production.bacalhau.org` +- `--api-port int`: + - Description: Designates the port for RESTful communication. The flag will be bypassed if the `BACALHAU_API_PORT` environment variable is active. + - Default: `1234` +- `--log-mode logging-mode`: + - Description: Chooses the preferred log format. Available choices are: `default`, `station`, `json`, `combined`, and `event`. + - Default: `default` +- `--repo string`: + - Description: Specifies the path to the bacalhau repository. + - Default: `/Users/walid/.bacalhau` + +## docs/cli/node/approve.md + +# Approve + +The `bacalhau node approve` command offers administrators the ability to approve the cluster membership for a node using its name. + +## Description + +Using the `approve` sub-command under the `bacalhau node` umbrella, users can allow a node in the pending state to join the cluster and receive work. This feature is crucial for system administrators to manage the cluster. + +## Usage + +```bash +bacalhau node approve [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `-m message`: + - A message to be attached to the approval action. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Approve a Node with ID `nodeID123`: ```bash - { - "major": "0", - "minor": "0", - "gitversion": "v0.0.0-xxxxxxx", - "gitcommit": "0fe81cb488f666845ac72c73a4b804aaa658e511", - "builddate": "2023-09-22T16:03:44Z", - "goos": "linux", - "goarch": "amd64" - } + bacalhau node approve nodeID123 + ``` + +2. Approve a Node with an audit message: + + ```bash + bacalhau node approve nodeID123 -m "okay" + ``` + +## docs/cli/node/delete.md + +# Delete + +The `bacalhau node delete` command offers administrators the ability to remove a node from the cluster using its name. + +## Description + +Using the `delete` sub-command, administrators can remove a node from the list of available compute nodes in the cluster. This feature is necessary for the management of the infrastructure. + +## Usage + +```bash +bacalhau node delete [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `-m message`: + - A message to be attached to the deletion action. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Delete the Node with ID `nodeID123`: + + ```bash + bacalhau node delete nodeID123 ``` +2. Delete a Node with an audit message: + + ```bash + bacalhau node delete nodeID123 -m "bad actor" + ``` + +## docs/cli/node/describe.md + +# Describe + +The `bacalhau node describe` command offers users the ability to retrieve detailed information about a specific node using its unique identifier. + +## Description + +Using the `describe` sub-command under the `bacalhau node` umbrella, users can get comprehensive details of a node by providing its ID. This information is crucial for system administrators and network managers to understand the state, specifications, and other attributes of nodes in their infrastructure. + +## Usage + +```bash +bacalhau node describe [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `--output format`: + - Defines the desired format for the command's output. + - Options: `"json"` or `"yaml"` + - Default: `"yaml"` +- `--pretty`: + - When this flag is used, the command will pretty print the output. This is applicable only for outputs in `json` and `yaml` formats. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Describing a Node with ID `nodeID123`: + + ```bash + bacalhau node describe nodeID123 + ``` + +2. Describing a Node with Output in JSON Format: + + ```bash + bacalhau node describe nodeID123 --output json + ``` + +3. Pretty Printing the Description of a Node: + + ```bash + bacalhau node describe nodeID123 --pretty + ``` + +## docs/cli/node/list.md + +# List + +The `bacalhau node list` command is designed to provide users with a comprehensive list of network nodes along with details based on specified flags. + +## Description + +The `list` sub-command under the `bacalhau node` category enumerates information about nodes in the network. It supports various filtering, ordering, and output formatting options, allowing users to tailor the output to their needs. + +## Usage + +```bash +bacalhau node list [flags] +``` + +## Flags + +- `-h`, `--help`: + - Show the help message for the `list` command. +- `--hide-header`: + - Do not display the column headers in the output. +- `--filter-approval`: + - Only show nodes with the specified approval status. Valid values are: `approved`, `pending`, `rejected`. +- `--filter-status`: + - Only show nodes with the specified state. Valid values are: `healthy`, `unhealthy`, `unknown`. +- `--labels string`: + - Filter nodes based on labels. This follows the filtering format provided by Kubernetes, as shown in their documentation about labels. +- `--limit uint32`: + - Restrict the number of results displayed. +- `--next-token string`: + - Provide the next token for pagination. +- `--no-style`: + - Output the table without any style. +- `--order-by string`: + - Sort the results based on a specific field. Valid sorting fields are: `id`, `type`, `available_cpu`, `available_memory`, `available_disk`, `available_gpu`. +- `--order-reversed`: + - Display the results in reverse order. +- `--output format`: + - Choose the output format. Available options: `table`, `csv`, `json`, `yaml`. + - Default: `table`. +- `--pretty`: + - Enhance the visual appeal of the output. This is applicable only to `json` and `yaml` formats. +- `--show strings`: + - Determine the column groups to be displayed. Acceptable values are: `labels`, `version`, `features`, `capacity`. + - Default: `labels`, `capacity`. +- `--wide`: + - Display full values in the output table, without truncation. + +## Global Flags + +- `--api-host string`: + - Specify the host for client-server communication via REST. This gets ignored if the `BACALHAU_API_HOST` environment variable is defined. + - Default: `"bootstrap.production.bacalhau.org"`. +- `--api-port int`: + - Specify the port for RESTful communication between client and server. Gets overlooked if the `BACALHAU_API_PORT` environment variable is set. + - Default: `1234`. +- `--log-mode logging-mode`: + - Choose the desired log format. + - Options: `'default', 'station', 'json', 'combined', 'event'`. + - Default: `'default'`. +- `--repo string`: + - Point to the directory path of the bacalhau repository. + - Default: `"`$HOME/.bacalhau"\`. + +## Examples + +1. **Retrieve the list of nodes**: + + Execute the command to get a list of all nodes: + + ```bash + bacalhau node list + ``` + + Expected output: + + ```plaintext + ID TYPE LABELS CPU MEMORY DISK GPU + QmTSJgdN Compute Architecture=amd64 Operating-System=linux 3.2 / 11.7 GB / 77.8 GB / 1 / + git-lfs=True owner=bacalhau 3.2 11.7 GB 77.8 GB 1 + QmVXwmdZ Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 77.8 GB / 0 / + git-lfs=True owner=bacalhau 3.2 12.5 GB 77.8 GB 0 + QmXRdLru Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 78.0 GB / 0 / + git-lfs=True owner=bacalhau 3.2 12.5 GB 78.0 GB 0 + ... [Additional nodes information] ... + ``` + +2. **Filter the list of nodes by labels**: + + Execute the command to get a list of nodes with specific labels: + + ```bash + bacalhau node list --labels "Operating-System=linux,owner=bacalhau" + ``` + + Expected output: + + ```plaintext + ID TYPE LABELS CPU MEMORY DISK GPU + QmTSJgdN Compute Architecture=amd64 Operating-System=linux 3.2 / 11.7 GB / 77.8 GB / 1 / + git-lfs=True owner=bacalhau 3.2 11.7 GB 77.8 GB 1 + ... [Additional nodes information] ... + ``` + +3. **Order the list of nodes by available memory**: + + Execute the command to get the list of nodes ordered by available memory: + + ```bash + bacalhau node list --order-by available_memory + ``` + + Expected output: + + ```plaintext + ID TYPE LABELS CPU MEMORY DISK GPU + QmVXwmdZ Compute Architecture=amd64 Operating-System=linux 3.2 / 12.5 GB / 77.8 GB / 0 / + git-lfs=True owner=bacalhau 3.2 12.5 GB 77.8 GB 0 + ... [Additional nodes information] ... + ``` + +4. **Limit the number of nodes displayed and output in JSON format**: + + Execute the command to get a limited list of nodes in JSON format: + + ```bash + bacalhau node list --limit 3 --output json --pretty + ``` + + Expected output: + + ```json + [ + { + "PeerInfo": { + "ID": "QmTSJgdN7zCPAqBCkmdsdpFbiJV8bJ6zhoxK9N5xfar1sz", + ... [Additional node details] ... + }, + ... [Other nodes] ... + } + ] + ``` + +## docs/cli/node/reject.md + +# Reject + +The `bacalhau node reject` command offers administrators the ability to reject a compute node's request to join the cluster. + +## Description + +Using the `reject` sub-command, administrators can reject a node in the pending state from joining the cluster and receiving work. This feature is crucial for system administrators to manage the cluster and will stop the node from taking part in the cluster until approved. + +## Usage + +```bash +bacalhau node rejected [id] [flags] +``` + +## Flags + +- `[id]`: + - The unique identifier of the node you wish to describe. +- `-h`, `--help`: + - Displays the help documentation for the `describe` command. +- `-m message`: + - A message to be attached to the rejection action. + +## Global Flags + +- `--api-host string`: + - Specifies the host for client-server communication through REST. This flag is overridden if the `BACALHAU_API_HOST` environment variable is set. + - Default: `"bootstrap.production.bacalhau.org"` +- `--api-port int`: + - Designates the port for REST-based communication between client and server. This flag is overlooked if the `BACALHAU_API_PORT` environment variable is defined. + - Default: `1234` +- `--log-mode logging-mode`: + - Determines the log format preference. + - Options: `'default','station','json','combined','event'` + - Default: `'default'` +- `--repo string`: + - Points to the bacalhau repository's path. + - Default: `"`$HOME/.bacalhau"\` + +## Examples + +1. Reject a Node with ID `nodeID123`: + + ```bash + bacalhau node reject nodeID123 + ``` + +2. Reject a Node with an audit message: + + ```bash + bacalhau node reject nodeID123 -m "potentially bad" + ``` diff --git a/static/llms/concepts.txt b/static/llms/concepts.txt index 7e1cc69..f2e59bc 100644 --- a/static/llms/concepts.txt +++ b/static/llms/concepts.txt @@ -1,6 +1,948 @@ -# Bacalhau Concepts & Architecture +# Bacalhau Concepts and Architecture -## architecture +## docs/README.md + +# What is Bacalhau? + +Bacalhau is an open-source distributed compute orchestration framework designed to bring compute to the data. Instead of moving large datasets around networks, Bacalhau makes it easy to execute jobs close to the data's location, drastically reducing latency and resource overhead. + +### Why It Matters + +* **Highly Distributed Architecture**: Deploy compute networks that span regions, cloud providers, and on-premises datacenters—all working together as a unified system. +* **Resilient Operation**: Compute nodes operate effectively even with intermittent connectivity to orchestrators, maintaining service availability during network partitioning or isolation. +* **Data Sovereignty & Security**: Process sensitive data within security boundaries without requiring it to leave your premises, enabling computation while preserving data control. +* **Cross-Organizational Computation**: Allow specific vetted computations on protected datasets without exposing raw data, breaking data silos between organizations. +* **Resource Efficiency**: By minimizing data transfers, Bacalhau saves bandwidth costs and ensures jobs run faster. +* **High Scalability**: As your data and processing needs grow, simply add more compute nodes on demand—whether on-premises or in the cloud. +* **Ease of Integration**: Bacalhau works with existing container images (Docker, etc.), meaning you can leverage your current workflows without major rewrites. + +### Key Features + +1. **Single Binary Simplicity**: Bacalhau is a single self-contained binary that functions as a client, orchestrator, and compute node—making it incredibly easy to set up and scale your distributed compute network. +2. **Modular Architecture**: Bacalhau's design supports multiple execution engines (Docker, WebAssembly) and storage providers through clean interfaces, allowing for easy extension. +3. **Orchestrator-Compute Model**: A dedicated orchestrator coordinates job scheduling, while compute nodes run tasks—all from the same binary with different runtime modes. +4. **Flexible Storage Integrations**: Bacalhau integrates with S3, HTTP/HTTPS, and other storage systems, letting you pull data from various sources. +5. **Multiple Job Types**: Support for batch, ops, daemon, and service job types to accommodate different workflow requirements. +6. **Declarative & Imperative Submissions**: Define jobs in a YAML spec (declarative) or pass all arguments via CLI (imperative). +7. **Publisher Support**: Output results to local volumes, S3, or other storage backends—so your artifacts are readily accessible. + +### Use Cases + +Bacalhau's distributed compute framework enables a wide range of applications across different industries: + +
+ +Log Processing + +Process logs efficiently at scale by running distributed jobs directly at the source, reducing costs by up to 93% in bandwidth usage while improving real-time insights. Bacalhau supports various job types for log management: + +* **Daemon Jobs**: Continuously run on each node for real-time log aggregation and compression +* **Service Jobs**: Handle ongoing processing tasks like log aggregation and issue detection +* **Batch Jobs**: Execute on-demand in-depth analysis of historical log data +* **Ops Jobs**: Enable real-time querying of live logs for urgent investigations + +
+ +
+ +Distributed Data Warehousing + +Query and analyze data across multiple regions by deploying compute tasks directly where your data resides. This approach reduces latency, enhances performance, and ensures compliance with data sovereignty regulations. Bacalhau integrates with modern data tools like Apache Iceberg and DuckDB to enable: + +* Reduced data movement with local query execution +* Improved query performance through compute-data proximity +* Seamless scalability with dynamic node addition +* Compliance with data regulations through region-specific processing + +
+ +
+ +Fleet Management + +Efficiently manage distributed nodes across multiple environments with capabilities for: + +* Remote execution of commands without requiring SSH access +* Automated software deployment and configuration updates +* Real-time metrics and logs collection +* Targeted job execution based on node attributes +* Rapid incident response and automated recovery + +
+ +
+ +Distributed Machine Learning + +Train and deploy ML models across a distributed compute fleet, optimizing performance while keeping data in place: + +* Distribute training across multiple machines to handle larger models +* Process data locally to minimize network transfers +* Deploy inference jobs near users for low-latency predictions +* Support federated learning for privacy-sensitive applications + +
+ +
+ +Edge Computing + +Run compute tasks closer to the data source for applications requiring low latency and minimal bandwidth usage: + +* Process and analyze sensor, IoT, or video data in real time +* Perform pre-processing and filtering at the edge before sending refined data +* Distribute tasks across available edge resources dynamically +* Ensure data privacy by keeping computations near the source + +
+ +### How It Works + +Bacalhau's architecture enables you to create compute networks that bridge traditional infrastructure boundaries. When you submit a job, Bacalhau intelligently determines which compute nodes are best positioned to process the data based on locality, availability, and your defined constraints—without requiring data movement or constant connectivity. + +This approach is particularly valuable for: + +* Organizations with data that cannot leave certain security boundaries +* Multi-region operations where data transfer is expensive or impractical +* Scenarios where multiple parties need to collaborate on analysis without sharing raw data +* Edge computing environments with intermittent connectivity + +### Community + +Bacalhau has a very friendly community and we are always happy to help you get started: + +* [Join the Slack Community](https://bit.ly/bacalhau-project-slack) Go to **#bacalhau** channel – it is the easiest way to engage with other members in the community and get help. +* [Contributing](/community/ways-to-contribute) – learn how to contribute to the Bacalhau project. + +## docs/components/engines/README.mdx + +# Engines + + + +## docs/components/engines/docker.md + +# Docker + +Docker Engine is one of the execution engines supported in Bacalhau. It allows users to run tasks inside Docker containers, offering an isolated and consistent environment for execution. Below are the parameters to configure the Docker Engine. + +## `Docker` Engine Parameters + +* **Image** `(string: )`: Specifies the Docker image to use for task execution. It should be an image that can be pulled by Docker. +* **Entrypoint** `(string[]: )`: Allows overriding the default entrypoint set in the Docker image. Each string in the array represents a segment of the entrypoint command. +* **Parameters** `(string[]: )`: Additional command-line arguments to be included in the container’s startup command, appended after the entrypoint. +* **EnvironmentVariables** `(string[]: )`: Sets environment variables within the Docker container during task execution. Each string should be formatted as `KEY=value`. +* **WorkingDirectory** `(string: )`: Sets the path inside the container where the task executes. If not specified, it defaults to the working directory defined in the Docker image. + +### Example + +Here’s an example of configuring the Docker Engine within a job or task using YAML: + +```yaml +Engine: + Type: "Docker" + Params: + Image: "ubuntu:20.04" + Entrypoint: + - "/bin/bash" + - "-c" + Parameters: + - "echo Hello, World!" + EnvironmentVariables: + - "MY_ENV_VAR=myvalue" + WorkingDirectory: "/app" +``` + +In this example, the task will be executed inside an Ubuntu 20.04 Docker container. The entrypoint is overridden to execute a bash shell that runs an echo command. An environment variable MY\_ENV\_VAR is set with the value myvalue, and the working directory inside the container is set to /app. + +## docs/components/engines/wasm.md + +# WebAssembly (WASM) + +The WASM Engine in Bacalhau allows tasks to be executed in a WebAssembly environment, offering compatibility and speed. This engine supports WASM and WASI (WebAssembly System Interface) jobs, making it highly adaptable for various use cases. Below are the parameters for configuring the WASM Engine. + +## `WASM` Engine Parameters + +- **EntryModule** `(`[`InputSource`](../../specifications/job/input-source.md) `: required)`: Specifies the WASM module that contains the start function or the main execution code of the task. The InputSource should point to the location of the WASM binary. +- **Entrypoint** `(string: )`: The name of the function within the EntryModule to execute. For WASI jobs, this should typically be `_start`. The entrypoint function should have zero parameters and zero results. +- **Parameters** `(string[]: )`: An array of strings containing arguments that will be supplied to the program as ARGV. This allows parameterized execution of the WASM task. +- **EnvironmentVariables** `(map[string]string: )`: A mapping of environment variable keys to their values, made available within the executing WASM environment. +- **ImportModules** `(`[`InputSource`](../../specifications/job/input-source.md)`[] : optional)`: An array of InputSources pointing to additional WASM modules. The exports from these modules will be available as imports to the EntryModule, enabling modular and reusable WASM code. + +## Examples + +### Using S3 bucket + +```yaml +Engine: +Type: 'WASM' +Params: + EntryModule: + Source: + Type: 's3' + Params: + Bucket: 'my-bucket' + Key: 'entry.wasm' + Entrypoint: '_start' + Parameters: + - '--option' + - 'value' + EnvironmentVariables: + VAR1: 'value1' + VAR2: 'value2' + ImportModules: + - Source: + Type: 'localDirectory' + Params: + Path: '/local/path/to/module.wasm' +``` + +In this example, the task is configured to run in a WASM environment. The EntryModule is fetched from an S3 bucket, the entrypoint is `_start`, and parameters and environment variables are passed into the WASM environment. Additionally, an ImportModule is loaded from a local directory, making its exports available to the EntryModule. + +## Using Local Provider + +```yaml +Engine: + Type: wasm + Params: + EntryModule: + Source: + Type: 'localDirectory' + Params: + SourcePath: '/app/main.wasm' + Target: '/main.wasm' + Entrypoint: 'start_app' + Parameters: + - '--assets' + - '/app/data' +InputSources: + - Source: + Type: 'urlDownload' + Params: + URL: 'https://example.com/data/file.txt' + Target: '/app/data' +``` + +In this example, the main WASM module is fetched from the local file system on the compute node. The entrypoint function is `start_app`, and it is given two arguments `"--assets"` and `"/app/data"`. Additionally, the WASM environment has access to `/app/data/file.txt` file downloaded from the given URL. + +:::info +Parameters are passed to the WASM module as command-line arguments. To access these arguments in your WASM module, you'll need to implement the appropriate code based on your programming language. For example, in Rust, you can retrieve the parameters as follows: + +```rust +use std::env; + +fn _start() { + let args: Vec = env::args().collect(); + // &args[0] is the program name, &args[1] is the first parameter +} +``` + +::: + +## docs/components/publishers/README.mdx + +# Publishers + + + +## docs/components/publishers/ipfs.md + +# IPFS + +The IPFS Publisher in Bacalhau amplifies the versatility of task result storage by integrating with the [InterPlanetary File System (IPFS)](https://ipfs.tech/). IPFS is a protocol and network designed to create a peer-to-peer method of storing and sharing hypermedia in a distributed file system. Bacalhau's seamless integration with IPFS ensures that users have a decentralized option for publishing their task results, enhancing accessibility and resilience while reducing dependence on a single point of failure. + +## `IPFS` Publisher Parameters + +For the IPFS publisher, no specific parameters need to be defined in the publisher specification. The user only needs to indicate the publisher type as IPFS, and Bacalhau handles the rest. Here is an example of how to set up an IPFS Publisher in a job specification. + +```yaml +Publisher: + Type: ipfs +``` + +## Published Result Specification + +Once the job is executed, the results are published to IPFS, and a unique CID (Content Identifier) is generated for each file or piece of data. This CID acts as an address to the file in the IPFS network and can be used to access the file globally. + +### Result Parameters + +- CID `(string)`: This is the unique content identifier generated by IPFS, which can be used to access the published content from anywhere in the world. Every data piece stored on IPFS has its unique CID. Here's a sample of how the published result might appear: + +```yaml +PublishedResult: + Type: ipfs + Params: + CID: 'QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco' +``` + +In this example, the task results will be stored in IPFS, and can be referenced and retrieved using the specified CID. This is indicative of Bacalhau's commitment to offering flexible, reliable, and decentralized options for result storage, catering to a diverse set of user needs and preferences. + +## docs/components/publishers/local.md + +# Local + +Bacalhau's Local Publisher provides a useful option for storing task results on the compute node, allowing for ease of access and retrieval for testing or trying our Bacalhau. + +:::warning +The Local Publisher should not be used for Production use as it is not a reliable storage option. For production use, we recommend using a more reliable option such as an S3-compatible storage service. +::: + +## Local Publisher Parameters + +The local publisher requires no specific parameters to be defined in the publisher specification. The user only needs to indicate the publisher type as "local", and Bacalhau handles the rest. Here is an example of how to set up a Local Publisher in a job specification. + +```yaml +Publisher: + Type: local +``` + +## Published Result Specification + +Once the job is executed, the results are published to the local compute node, and stored as compressed tar file, which can be accessed and retrieved over HTTP from the command line using the `get` command. TAhis will download and extract the contents for the user from the remove compute node. + +### Result Parameters + +**URL** `(string)`: This is the HTTP URL to the results of the computation, which is hosted on the compute node where it ran. Here's a sample of how the published result might appear: + +```yaml +PublishedResult: + Type: local + Params: + URL: "http://192.168.0.11:6001/e-c4b80d04-ff2b-49d6-9b99-d3a8e669a6bf.tgz" +``` + +In this example, the task results will be stored on the compute node, and can be referenced and retrieved using the specified URL. + +## Caveats + +1. By default the compute node will attempt to use a public address for the HTTP server delivering task output, but there is no guarantee that the compute node is accessible on that address. If the compute node is behind a NAT or firewall, the user may need to manually specify the address to use for the HTTP server in the `config.yaml` file. +2. There is no lifecycle management for the content stored on the compute node. The user is responsible for managing the content and ensuring that it is removed when no longer needed before the compute node runs out of disk space. +3. If the address/port of the compute node changes, then previously stored content will no longer be accessible. The user will need to manually update the address in the `config.yaml` file and re-publish the content to make it accessible again. + +## docs/components/publishers/s3.md + +# S3 + +Bacalhau's S3 Publisher provides users with a secure and efficient method to publish task results to any S3-compatible storage service. This publisher supports not just AWS S3, but other S3-compatible services offered by cloud providers like Google Cloud Storage and Azure Blob Storage, as well as open-source options like MinIO. The integration is designed to be highly flexible, ensuring users can choose the storage option that aligns with their needs, privacy preferences, and operational requirements. + +## Publisher Parameters + +1. **Bucket** `(string: )`: The name of the S3 bucket where the task results will be stored. +2. **Key** `(string: )`: The object key within the specified bucket where the task results will be stored. +3. **Endpoint** `(string: )`: The endpoint URL of the S3 service (useful for S3-compatible services). +4. **Region** `(string: )`: The region where the S3 bucket is located. + +## Published Result Spec + +Results published to S3 are stored as objects that can also be used as inputs to other Bacalhau jobs by using [S3 Input Source](../../specifications/job/input-source.md). The published result specification includes the following parameters: + +1. **Bucket**: Confirms the name of the bucket containing the stored results. +2. **Key**: Identifies the unique object key within the specified bucket. +3. **Region**: Notes the AWS region of the bucket. +4. **Endpoint**: Records the endpoint URL for S3-compatible storage services. +5. **VersionID**: The version ID of the stored object, enabling versioning support for retrieving specific versions of stored data. +6. **ChecksumSHA256**: The SHA-256 checksum of the stored object, providing a method to verify data integrity. + +## Dynamic Naming + +With the S3 Publisher in Bacalhau, you have the flexibility to use dynamic naming for the objects you publish to S3. This allows you to incorporate specific job and execution details into the object key, making it easier to trace, manage, and organize your published artifacts. + +Bacalhau supports the following dynamic placeholders that will be replaced with their actual values during the publishing process: + +1. `{executionID}`: Replaced with the specific execution ID. +2. `{jobID}`: Replaced with the ID of the job. +3. `{nodeID}`: Replaced with the ID of the node where the execution took place +4. `{date}`: Replaced with the current date in the format `YYYYMMDD`. +5. `{time}`: Replaced with the current time in the format `HHMMSS`. + +Additionally, if you are publishing an archive and the object key does not end with `.tar.gz`, it will be automatically appended. Conversely, if you're not archiving and the key doesn't end with a `/`, a trailing slash will be added. + +### Example + +Imagine you've specified the following object key pattern for publishing: + +```bash +results/{jobID}/{date}/{time}/ +``` + +Given a job with ID `abc123`, executed on `2023-09-26` at `14:05:30`, the published object key would be: + +```bash +results/abc123/20230926/140530/ +``` + +This dynamic naming feature offers a powerful way to create organized, intuitive naming conventions for your Bacalhau published objects in S3. + +## Examples + +### Declarative Examples + +Here's an example YAML configuration that outlines the process of using the S3 Publisher with Bacalhau: + +```yaml +Publisher: + Type: 's3' + Params: + Bucket: 'my-task-results' + Key: 'task123/result.tar.gz' + Endpoint: 'https://s3.us-west-2.amazonaws.com' +``` + +In this configuration, task results will be published to the specified S3 bucket and object key. If you're using an S3-compatible service, simply update the `Endpoint` parameter with the appropriate URL. + +The results will be compressed into a single object, and the published result specification will look like: + +```yaml +PublishedResult: + Type: 's3' + Params: + Bucket: 'my-task-results' + Key: 'task123/result.tar.gz' + Endpoint: 'https://s3.us-west-2.amazonaws.com' + Region: 'us-west-2' + ChecksumSHA256: '0x9a3a...' + VersionID: '3/L4kqtJlcpXroDTDmJ+rmDbwQaHWyOb...' +``` + +### Imperative Examples + +The Bacalhau command-line interface (CLI) provides an imperative approach to specify the S3 Publisher. Below are a few examples showcasing how to define an S3 publisher using CLI commands: + +1. **Basic Docker job writing to S3 with default configurations**: + + ```bash + bacalhau docker run -p s3://bucket/key ubuntu ... + ``` + + This command writes to the S3 bucket using default endpoint and region settings. + +2. **Docker job writing to S3 with a specific endpoint and region**: + + ```bash + bacalhau docker run -p s3://bucket/key,opt=endpoint=http://s3.example.com,opt=region=us-east-1 ubuntu ... + ``` + + This command specifies a unique endpoint and region for the S3 bucket. + +3. **Using naming placeholders**: + + ```bash + bacalhau docker run -p s3://bucket/result-{date}-{jobID} ubuntu ... + ``` + + Dynamic naming placeholders like `{date}` and `{jobID}` allow for organized naming structures, automatically replacing these placeholders with appropriate values upon execution. + +Remember to replace the placeholders like `bucket`, `key`, and other parameters with your specific values. These CLI commands offer a quick and customizable way to submit jobs and specify how the results should be published to S3. + +## Credential Requirements + +To support this publisher, no extra dependencies are necessary. However, valid AWS credentials are essential to sign the requests. The publisher employs the default credentials chain to retrieve credentials, primarily sourcing them from: + +1. **Environment variables**: AWS credentials can be specified using `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +2. **Credentials file**: The credentials file typically located at `~/.aws/credentials` can also be used to fetch the necessary AWS credentials. +3. **IAM Roles for Amazon EC2 Instances**: If you're running your tasks within an Amazon EC2 instance, IAM roles can be utilized to provide the necessary permissions and credentials. + +For a more detailed overview on AWS credential management and other ways to provide these credentials, please refer to the AWS official documentation on [standardized credentials](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html). + +## Required IAM Policies + +### Compute Nodes + +Compute nodes must run with the following policies to publish to S3: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:PutObject"], + "Resource": "arn:aws:s3:::BUCKET_NAME/*" + } + ] +} +``` + +- **PutObject Permissions:** The `s3:PutObject` permission is necessary to publish objects to the specified S3 bucket. +- **Resource:** The `Resource` field in the policy specifies the Amazon Resource Name (ARN) of the S3 bucket. The `/*` suffix is necessary to allow publishing with any prefix within the bucket or can be replaced with a prefix to limit the scope of the policy. You can also specify multiple resources in the policy to allow publishing to multiple buckets, or `*` to allow publishing to all buckets in the account. + +### Requester Node + +To enable downloading published results using `bacalhau job get ` command, the requester node must run with the following policies: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject"], + "Resource": "arn:aws:s3:::BUCKET_NAME/*" + } + ] +} +``` + +- **GetObject Permissions:** The `s3:GetObject` permission is necessary for the requester node to provide a pre-signed URL to download the published results by the client. + +For more information on IAM policies specific to Amazon S3 buckets and users, please refer to the [AWS documentation on Using IAM Policies with Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html). + +## docs/components/publishers/s3managed.md + +# Managed S3 + +Bacalhau's S3 Managed Publisher provides a secure method to publish job results to AWS S3 storage service without requiring compute nodes to have AWS credentials. Only the orchestrator requires access to the S3 bucket, significantly enhancing security in distributed environments. This publisher supports both AWS S3 and other S3-compatible services like MinIO. + +## Publisher Parameters +The S3 managed publisher requires no specific parameters to be defined in the job publisher specification. The user only needs to indicate the publisher type as `s3managed`: + +```yaml +Publisher: + Type: "s3managed" +``` + +## Orchestrator Configuration + +The S3 Managed Publisher must be configured in the orchestrator with the following parameters: + +1. **Bucket** `(string: )`: The name of the S3 bucket where job results will be stored. +2. **Key** `(string: )`: The object key within the specified bucket where the task results will be stored. +3. **Region** `(string: )`: The region where the S3 bucket is located. +4. **Endpoint** `(string: )`: The endpoint URL of the S3 service (for S3-compatible services). +5. **PreSignedURLExpiration** `(string: "1h")`: The duration for which the generated pre-signed URLs are valid. Optional, default duration is 1 hour. + +### YAML Configuration Example + +```yaml +Publishers: + Types: + S3Managed: + Bucket: "my-result-bucket" + Key: "bacalhau-managed-publisher" + Region: "us-east-1" + Endpoint: "https://custom-s3.example.com" + PreSignedURLExpiration: "1h" +``` + +### CLI Configuration Example + +```bash +bacalhau serve \ + -c Publishers.Types.S3Managed.Bucket="my-result-bucket" \ + -c Publishers.Types.S3Managed.Key="bacalhau-managed-publisher" \ + -c Publishers.Types.S3Managed.Region="us-east-1" \ + -c Publishers.Types.S3Managed.Endpoint="https://custom-s3.example.com" \ + -c Publishers.Types.S3Managed.PreSignedURLExpiration="1h" +``` + +## Required AWS Resources +### S3 Bucket + +To support this publisher, the S3 bucket specified in the orchestrator configuration must exist. The orchestrator will not attempt to create a bucket if it doesn't exist. + +### AWS Credentials + +The orchestrator needs to be given AWS credentials that grant both read and write access to the bucket. The orchestrator utilizes the default chain to retrieve them: +1. **Environment variables**: AWS credentials can be specified using `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +2. **Credentials file**: The credentials file typically located at `~/.aws/credentials`. +3. **IAM Roles for Amazon EC2 Instances**: If you're running your tasks within an Amazon EC2 instance, IAM roles can be utilized to provide the necessary permissions and credentials. + +For a more detailed overview on AWS credential management and other ways to provide these credentials, please refer to the AWS official documentation on [standardized credentials](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html). + +### IAM Policy +To use this publisher, only the orchestrator node needs permissions to access the bucket. The compute nodes and requester nodes do not need any additional permissions. + +#### Orchestrator Node +AWS credentials provided to the orchestrator node must grant the following permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:PutObject", + "s3:GetObject" + ], + "Resource": "arn:aws:s3:::my-result-bucket/bacalhau-managed-publisher/*" + } + ] +} +``` + +## Examples + +The job specification for using the S3 Managed Publisher is straightforward. Unlike the standard S3 publisher, no additional parameters are required in the job specification: + +```yaml +name: managed-publisher-job +type: batch +count: 1 +tasks: + - name: main + engine: + type: docker + params: + image: busybox:1.37.0 + entrypoint: + - /bin/sh + parameters: + - -c + - echo Hello, I was stored by Managed Publisher! + publisher: + type: s3managed +``` + +## Caveats +Currently, Bacalhau does not provide lifecycle management for the results stored in the bucket used by this publisher. The user is responsible for managing the content and ensuring it is removed when no longer needed to avoid additional costs. + +## docs/components/sources/README.mdx + +# Sources + + + +## docs/components/sources/ipfs.md + +# IPFS + +The IPFS Input Source enables users to easily integrate data hosted on the [InterPlanetary File System (IPFS)](https://ipfs.tech) into Bacalhau jobs. By specifying the Content Identifier (CID) of the desired IPFS file or directory, users can have the content fetched and made available in the task's execution environment, ensuring efficient and decentralized data access. + +## Source Specification Parameters + +Here are the parameters that you can define for an IPFS input source: + +- **CID** `(string: )`: The Content Identifier that uniquely pinpoints the file or directory on the IPFS network. Bacalhau retrieves the content associated with this CID for use in the task. + +### Example + +Below is an example of how to define an IPFS input source in YAML format. + +```yaml +InputSources: + - Source: + Type: 'ipfs' + Params: + CID: 'QmY7Yh4UquoXHLPFo2XbhXkhBvFoPwmQUSa92pxnxjY3fZ' + - Target: '/data' +``` + +In this configuration, the data associated with the specified CID is fetched from the IPFS network and made available in the task's environment at the "/data" path. + +### Example (Imperative/CLI) + +Utilizing IPFS as an input source in Bacalhau via the CLI is straightforward. Below are example commands that demonstrate how to define the IPFS input source: + +1. **Mount an IPFS CID to the default `/inputs` directory**: + + ```bash + bacalhau docker run -i ipfs://QmeZRGhe4PmjctYVSVHuEiA9oSXnqmYa4kQubSHgWbjv72 ubuntu ... + ``` + +2. **Mount an IPFS CID to a custom `/data` directory**: + + ```bash + bacalhau docker run -i ipfs://QmeZRGhe4PmjctYVSVHuEiA9oSXnqmYa4kQubSHgWbjv72:/data ubuntu ... + ``` + +These commands provide a seamless mechanism to fetch and mount data from IPFS directly into your task's execution environment using the Bacalhau CLI. + +## docs/components/sources/local.md + +# Local + +The `local` input source allows Bacalhau jobs to access files and directories already present on the compute node. This is especially useful for utilizing locally stored datasets, configuration files, logs, or other necessary resources without fetching them from a remote source, ensuring faster job initialization and execution. + +:::info +Note: The `local` provider can also be used with the name `localDirectory` and they are currently interchangeable. However, the `localDirectory` name is planned to be deprecated in future releases, so using `local` is recommended. +::: + +## Source Specification Parameters + +The `local` input source accepts the following parameters: + +* **SourcePath** `(string: )`: The absolute path on the compute node where the Local file or directory is located. Bacalhau will access this path to read data, and if permitted, write data as well. +* **ReadWrite** `(bool: false)`: A boolean flag that, when set to true, gives Bacalhau both read and write access to the specified Local file or directory. If set to false, Bacalhau will have read-only access. +* **CreateAs** `(string: "noCreate")`: A create strategy to be used when the `SourcePath` is empty. Possible values are: + * `"dir"`: Creates a directory at the specified path + * `"file"`: Creates a file at the specified path + * `"noCreate"`: Does not create anything if the path is empty + +:::info +Note: Bacalhau will only create a file or directory if `ReadWrite` is set to `true`. The `CreateAs` parameter has no effect when `ReadWrite` is `false`. +::: + +## Compute Node Configuration + +For security reasons, compute nodes must be explicitly configured to allow access to local file system. This requires configuring the `Compute.AllowListedLocalPaths` property with the paths that should be accessible and their permissions (`:rw` for read-write or `:ro` for read-only). + +For example: +```bash +bacalhau config set Compute.AllowListedLocalPaths=/etc/config:rw,/etc/*.conf:ro +``` + +If permission errors occur when using local paths, verify that the compute node has the appropriate path allowlisted in its configuration. + +### Examples (Jobs) + +Below are examples of defining a `local` input source in YAML format. + +#### Basic Read-Only Directory Mount + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/etc/config" + ReadWrite: false + Target: "/config" +``` + +This example configures Bacalhau to access the `/etc/config` directory on the compute node. The content of this directory becomes available at the `/config` path within the task's environment, with read-only access. + +#### Read-Write Access with Directory Creation + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/var/data/job_input" + ReadWrite: true + CreateAs: "dir" + Target: "/app/input" +``` + +This configuration allows read and write access to the local `/var/data/job_input` directory. If this directory doesn't exist, Bacalhau creates an empty one and makes it available at the `/app/input` path within the task's environment. + +#### File Mount With Automatic Creation + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/var/log/job.log" + ReadWrite: true + CreateAs: "file" + Target: "/app/logs/job.log" +``` + +This example mounts a specific file with read-write permissions and creates the file if it doesn't exist. + +#### File Mount Without Automatic Creation + +```yaml +InputSources: + - Source: + Type: "local" + Params: + SourcePath: "/var/log/job.log" + ReadWrite: true + CreateAs: "noCreate" + Target: "/app/logs/job.log" +``` + +Specifying `noCreate` explicitly (or omitting the `CreateAs` parameter) prevents Bacalhau from creating an empty file if it doesn't exist. In this case, the job will not execute on nodes that do not have an existing file at `/var/log/job.log`. + +### Example (Imperative/CLI) + +The Bacalhau CLI supports defining local input sources using the following imperative approach: + +1. **Mount readonly file to `/config`**: + + ```bash + bacalhau docker run -i file:///etc/config:/config ubuntu ... + ``` +2. **Mount writable file to default `/input`**: + + ```bash + bacalhau docker run -i file:///var/checkpoints:/myCheckpoints,opt=rw=true ubuntu ... + ``` + +## docs/components/sources/s3.md + +# S3 + +The S3 Input Source provides a seamless way to utilize data stored in S3 or any S3-compatible storage service as input for Bacalhau jobs. Users can specify files or entire prefixes stored in S3 buckets to be fetched and mounted directly into the task's execution environment. This capability ensures that your tasks have immediate access to the necessary data. + +## Source Specification Parameters + +Here are the parameters that you can define for an S3 input source: + +- **Bucket** `(string: )`: The name of the S3 bucket where the data is stored. +- **Key**`(string: )`: The object key or prefix within the bucket. Supports trailing wildcard for fetching multiple objects with matching prefixes. +- **Filter**`(string: )`: A regex pattern to filter the objects to be fetched. If a **Key** is also provided as a prefix, the filter pattern will be applied to object keys after the prefix. +- **Region**`(string: )`: The AWS region where the S3 bucket is hosted. +- **Endpoint**`(string: )`: The endpoint URL of the S3 or S3-compatible service. +- **VersionID**`(string: )`: The specific version of the object if versioning is enabled on the bucket. Only applicable when fetching a single object, and not a prefix or a pattern of objects. +- **ChecksumSHA256**`(string: )`: The SHA-256 checksum of the object to ensure data integrity. Only applicable when fetching a single object, and not a prefix or a pattern of objects. + +## Fetching Mechanism + +- **Single Object**: If the key points to a single object, that object is fetched and made available to the task. e.g. `s3://myBucket/dir/file-001.txt` +- **Prefix Matching**: If the key ends with a slash (/), it's interpreted as a prefix, and all objects with keys that start with that prefix are fetched, mimicking the behavior of fetching all objects in a "directory". e.g. `s3://myBucket/dir/` +- **Wildcard**: Supports a trailing wildcard (`*`). All objects with keys matching the prefix are fetched, facilitating batch processing or analysis of multiple files. e.g. `s3://myBucket/dir/log-2023-09-*` + +## Examples + +### Declarative Examples + +When using the Bacalhau YAML configuration to define the S3 input source, you can employ the following declarative approach. + +Below is an example of how to define an S3 input source in YAML format. + +```yaml +InputSources: + - Source: + Type: 's3' + Params: + Bucket: 'my-bucket' + Key: 'logs/' + Endpoint: 'https://s3.us-west-2.amazonaws.com' + ChecksumSHA256: 'e3b0c44b542b...' + - Target: '/data' +``` + +All objects that match the `logs/` pattern will be placed in the `/data` directory that is available in the task environment. + +### Imperative Examples + +When using the Bacalhau CLI to define the S3 input source, you can employ the following imperative approach. Below are example commands demonstrating how to define the S3 input source with various configurations: + +1. **Mount an S3 object to a specific path**: + + ```bash + bacalhau docker run -i src=s3://bucket/key,dst=/my/input/path ubuntu ... + ``` + +2. **Mount an S3 object with a specific endpoint and region**: + + ```bash + bacalhau docker run -i src=s3://bucket/key,dst=/my/input/path,opt=endpoint=http://s3.example.com,opt=region=us-east-1 ubuntu ... + ``` + +3. **Mount an S3 object using long flag names**: + + ```bash + bacalhau docker run --input source=s3://bucket/key,destination=/my/input/path ubuntu ... + ``` + +With these commands, you can seamlessly fetch and mount data from S3 into your task's execution environment directly through the CLI. + +## Credential Requirements + +To support this storage provider, no extra dependencies are necessary. However, valid AWS credentials are essential to sign the requests. The storage provider employs the default credentials chain to retrieve credentials, primarily sourcing them from: + +1. **Environment variables**: AWS credentials can be specified using `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +2. **Credentials file**: The credentials file typically located at `~/.aws/credentials` can also be used to fetch the necessary AWS credentials. +3. **IAM Roles for Amazon EC2 Instances**: If you're running your tasks within an Amazon EC2 instance, IAM roles can be utilized to provide the necessary permissions and credentials. + +For a more detailed overview on AWS credential management and other ways to provide these credentials, please refer to the AWS official documentation on [standardized credentials](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html). + +## Required IAM Policies + +Compute nodes must run with the following policies to support S3 input source: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "s3:ListBucket", + "Resource": "arn:aws:s3:::BUCKET_NAME" + }, + { + "Effect": "Allow", + "Action": ["s3:GetObject", "s3:GetObjectVersion"], + "Resource": "arn:aws:s3:::BUCKET_NAME/*" + } + ] +} +``` + +- **ListBucket Permission:** The `s3:ListBucket` permission is necessary to list the objects within the specified S3 bucket, allowing prefixes and wildcard expressions as the S3 Key for fetching. +- **GetObject and GetObjectVersion Permissions:** The `s3:GetObject` and `s3:GetObjectVersion` permissions enable the fetching of object data and its versions, respectively. +- **Resource:** The `Resource` field in the policy specifies the Amazon Resource Name (ARN) of the S3 bucket. The `/*` suffix is necessary to allow fetching of all objects within the bucket or can be replaced with a prefix to limit the scope of the policy. You can also specify multiple resources in the policy to allow fetching from multiple buckets, or `*` to allow fetching from all buckets in the account. + +For more information on IAM policies specific to Amazon S3 buckets and users, please refer to the [AWS documentation on Using IAM Policies with Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html). + +## S3-Compatible Services + +This feature isn't limited to AWS S3 - it supports all S3-compatible storage services. It means you can pull data from the likes of Google Cloud Storage and open-source solutions like MinIO, giving you the flexibility to utilize a diverse range of data sources. + +### Using Google Cloud Storage + +To seamlessly integrate Google Cloud Storage with Bacalhau, follow these steps: + +1. **Obtain HMAC Keys:** To access Google Cloud Storage, you'll need HMAC (Hash-based Message Authentication Code) keys. Refer to the [Google Cloud documentation](https://cloud.google.com/storage/docs/authentication/hmackeys) for detailed instructions on creating a service account and generating HMAC keys. +2. **Provide HMAC Keys to Bacalhau:** You can provide the HMAC keys to Bacalhau using the same options as AWS credentials, as documented in the [Credential Requirements](s3.md#credential-requirements) section. +3. **Configure the S3 Input Source:** In your S3 input source configuration, set the endpoint for Google Cloud Storage to `https://storage.googleapis.com`, as shown in the example below: + +```yaml +InputSources: + - Source: + Type: 's3' + Params: + Bucket: 'my-bucket' + Key: 'data/' + Endpoint: 'https://storage.googleapis.com' + - Target: '/data' +``` + +## docs/components/sources/url.md + +# URL + +The URL Input Source provides a straightforward method for Bacalhau jobs to access and incorporate data available over HTTP/HTTPS. By specifying a URL, users can ensure the required file is retrieved and prepared in the task's execution environment, enabling direct and efficient data utilization. + +## Source Specification Parameters + +Here are the parameters that you can define for a URL input source: + +- **URL** `(string: )`: The HTTP/HTTPS URL pointing directly to the file you want to retrieve. Only a single file can be downloaded per URL input source. + +:::info +Note: Bacalhau will attempt to infer the filename from the URL or the HTTP headers. This inferred filename is used when placing the file in the target directory. +::: + +### Example + +Below is an example of how to define a URL input source in YAML format. + +```yaml +InputSources: + - Source: + Type: 'urlDownload' + Params: + URL: 'https://example.com/data/file.txt' + Target: '/data' +``` + +In this setup, the file available at the specified URL is downloaded and stored in the "/data" directory within the task's environment. The actual path to the downloaded file will be "/data/file.txt". + +### Example (Imperative/CLI) + +When using the Bacalhau CLI to define the URL input source, you can employ the following imperative approach. Below are example commands demonstrating how to define the URL input source with various configurations: + +1. **Fetch data from an HTTP endpoint**: This command demonstrates fetching a file from a specific HTTP URL. The file will be mounted in the default `/inputs` directory. + + ```bash + bacalhau docker run -i http://example.com/data.txt ubuntu -- cat /inputs/data.txt + ``` + +2. **Fetch data from an HTTPS endpoint and specify mount path**: This example fetches a file from a secure URL and mounts it to a custom directory path. + + ```bash + bacalhau docker run -i https://secure.example.com/data.txt:/data ubuntu -- cat /data/data.txt + ``` + + In this case, the file "data.txt" is downloaded and placed in the "/data" directory, resulting in the path "/data/data.txt" within the container. + +## docs/overview/architecture.md # Architecture @@ -77,8 +1019,7 @@ Bacalhau's single-binary architecture supports flexible deployment configuration * **Metrics & Logging**: Each node can expose metrics on resource usage and job performance * **Event Tracking**: Orchestrators record job lifecycle events for monitoring and auditing - -## key-concepts +## docs/overview/key-concepts.md # Key Concepts @@ -156,4 +1097,3 @@ A reliable messaging system allows Bacalhau components to coordinate effectively * Orchestrators act as NATS servers * Compute nodes connect as NATS clients * This provides reliable, scalable messaging between components - diff --git a/static/llms/getting-started.txt b/static/llms/getting-started.txt index 709cc7e..06770e5 100644 --- a/static/llms/getting-started.txt +++ b/static/llms/getting-started.txt @@ -1,6 +1,6 @@ # Getting Started with Bacalhau -## installation +## docs/getting-started/installation.mdx # Installation @@ -9,6 +9,35 @@ This section explains how to install Bacalhau on your machine, verify it's worki ## Install the Bacalhau Binary To install the CLI, choose your environment, and run the command(s) below. + +```bash +curl -sL https://get.bacalhau.org/install.sh | bash +``` + +- This fetches the latest Bacalhau release and places it in `/usr/local/bin` or a similar path. +- You many need sudo mode or root access to install the binary at the desired path + + Windows users can download the [latest release tarball from + Github](https://github.com/bacalhau-project/bacalhau/releases) and extract `bacalhau.exe` to any location available in + the PATH environment variable. + +### Base Image + +```bash +docker pull ghcr.io/bacalhau-project/bacalhau:latest +``` + +- Suitable for running orchestrators, clients or compute nodes with no Docker support + +### Docker in Docker + +```bash +docker pull ghcr.io/bacalhau-project/bacalhau:latest-dind +``` + +- Suitable for running compute nodes that can run Docker based jobs +- Require `--privileged` mode when running the container + ### Verify the Installation ```bash @@ -34,7 +63,7 @@ To upgrade Bacalhau to the latest version, run the installation script. If Bacal - **AWS Credentials** (if you're using S3): - For S3 inputs or outputs, the node needs valid AWS credentials (e.g., environment variables). - **Running an Orchestrator & Compute**: -- See [Quick Start](https://bacalhau.org/docs/getting-started/quick-start/) for how to run a local or hybrid node with `bacalhau serve --orchestrator --compute`. + - See [Quick Start](./quick-start.mdx) for how to run a local or hybrid node with `bacalhau serve --orchestrator --compute`. - **`bacalhau devstack`**: - Perfect for local development or running tests. @@ -44,8 +73,7 @@ To upgrade Bacalhau to the latest version, run the installation script. If Bacal - Check Common Workflows for steps on mounting data (S3, local folders) and publishing outputs. - Explore References for advanced node management (Docker Compose, devstack, multi-node clusters). - -## network-setup +## docs/getting-started/network-setup.md # Network Setup @@ -197,8 +225,7 @@ These setups enable deployment and testing of Bacalhau across multiple nodes, in - Learn how to submit jobs to your network - Explore common workflows for different use cases - -## quick-start +## docs/getting-started/quick-start.mdx # Quick Start @@ -211,7 +238,7 @@ This Quick Start guide shows how to run your first Bacalhau job with minimal set ## 1. Installation -1. Install Bacalhau using the one-liner below (Linux/macOS) or see the [installation guide](https://bacalhau.org/docs/getting-started/installation/) for Windows and Docker options. +1. Install Bacalhau using the one-liner below (Linux/macOS) or see the [installation guide](./installation.mdx) for Windows and Docker options. ```bash curl -sL https://get.bacalhau.org/install.sh | bash @@ -237,6 +264,50 @@ bacalhau serve --orchestrator --compute ## 3. Submit a Data Analysis Job Bacalhau supports two primary methods of job submission: Imperative (CLI) and Declarative (YAML). We'll demonstrate a word count job on the classic novel Moby Dick. + +```bash +bacalhau docker run \ + --input https://www.gutenberg.org/files/2701/2701-0.txt:/data/moby-dick.txt \ + --output outputs:/outputs \ + --publisher local \ + ghcr.io/bacalhau-project/word-count:latest -- --output-file /outputs/moby-dick-counts.txt /data/moby-dick.txt +``` + +Create a `word-count.yaml` file: + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/word-count:latest + Parameters: + - --output-file + - /outputs/moby-dick-counts.txt + - /data/moby-dick.txt + Publisher: + Type: local + InputSources: + - Alias: input_custom + Target: /data/moby-dick.txt + Source: + Type: urlDownload + Params: + URL: https://www.gutenberg.org/files/2701/2701-0.txt + ResultPaths: + - Name: outputs + Path: /outputs +``` + +Then run the job using: + +```bash +bacalhau job run word-count.yaml +``` + - The job downloads a sample dataset and processes it locally - Bacalhau will display job progress until completion - You'll receive a Job ID once the job is submitted diff --git a/static/llms/other.txt b/static/llms/other.txt index 03c5fe2..81cffd1 100644 --- a/static/llms/other.txt +++ b/static/llms/other.txt @@ -1,695 +1,4150 @@ # Additional Bacalhau Documentation -## Publishing Results +## content/use-cases/integrations/duckdb.mdx -# Publishing & Retrieving Results +# DuckDB -This guide explains how to configure output publishing and retrieve results from Bacalhau jobs across different storage systems. Proper output handling is essential for building effective data pipelines and workflows. +## Overview -## What You'll Learn +[DuckDB](https://duckdb.org/) is a high-performance, in-process analytical database designed for fast SQL queries on structured data. However, it operates as a **single-instance database**, limiting its ability to efficiently handle large-scale datasets across multiple machines. -- How Bacalhau's Publishers mechanism works -- How to configure different output destination types -- How to retrieve outputs from various storage systems -- How to choose the right publisher for your use case +Bacalhau extends DuckDB by enabling: -## Understanding Publishers and Result Paths +- **Distributed query execution** across multiple compute nodes +- **Partitioning of large datasets** to optimize processing +- **Parallel SQL execution** for improved performance +- **Querying data in-place** without needing to centralize it -In Bacalhau, you need to configure two key components for handling outputs: +This allows users to **scale DuckDB beyond a single node**, making it ideal for distributed data processing and large-scale analytics. -1. A **Publisher** defines where your job's output files are stored after execution -2. **Result Paths** specify which directories should be captured as job results. -### Retrieving Local Outputs +## Limitations of DuckDB (Before Bacalhau) -After your job completes, retrieve outputs using the `bacalhau job get` command: +While DuckDB is powerful for analytical workloads, it has inherent limitations: -```bash -bacalhau job get -```` +- **Single-instance execution**: DuckDB is designed to run on a single machine, limiting scalability. +- **No built-in parallelism**: Queries run on a single node, unable to take advantage of multiple distributed compute resources. +- **Inefficient large-scale processing**: Large datasets require manual partitioning and splitting across multiple queries. -This will download all published outputs to your current directory. +## How Bacalhau Extends DuckDB -:::note +To address these limitations, Bacalhau integrates with DuckDB and provides: -- If you define a publisher without specifying result paths, only stdout and stderr will be uploaded to the chosen publisher -- If you define result paths without a publisher, the job will fail -- You can have multiple result paths, each capturing different directories - ::: +1. **Partitioned Query Execution**: Bacalhau distributes queries across nodes, automatically handling partitioning. +2. **Scalable Data Processing**: Users can run SQL queries across large datasets without moving data to a centralized warehouse. +3. **Custom Partitioning Functions**: Bacalhau introduces **User-Defined Functions (UDFs)** that handle partitioning logic natively within DuckDB. -## Publisher Types +## Partitioning Functions -Bacalhau supports multiple publisher types to accommodate different needs and infrastructure requirements. +Bacalhau introduces three User Defined Functions (UDF) for partitioning to improve DuckDB's scalability: -### S3 Publisher +### 1. Hash-Based Partitioning -The S3 Publisher uploads outputs to an Amazon S3 bucket or any S3-compatible storage service, such as MinIO. The compute node must have permission to write to the bucket, and the orchestrator must have permission to provide pre-signed URLs to download the results. -### IPFS Publisher +Partitions datasets based on a hash function applied to file paths. -The IPFS Publisher uploads outputs to the InterPlanetary File System. Both the client (downloading the result) and the compute node must be connected to an IPFS daemon. -### Local Publisher +```sql +SET VARIABLE my_files = ( + SELECT LIST(file) FROM partition_by_hash('s3://bucket/*.parquet') +); +SELECT * FROM read_parquet(getvariable('my_files')); +``` -The Local Publisher saves outputs to the local filesystem of the compute node that ran your job. This is intended for **local testing only**, as it requires the client downloading the results to be on the same network as the compute node. -If you are using the local publish, make SURE you have set the path to be available to your job. +### 2. Regex-Based Partitioning -For example, in your config file for your node, you probably want to mount in the local file system: +Partitions files based on regex pattern matching, useful for structured filenames. +```sql +SET VARIABLE my_files = ( + SELECT LIST(file) FROM partition_by_regex( + 's3://bucket/data_*.parquet', + 'data_([A-Z]).*' + ) +); +SELECT * FROM read_parquet(getvariable('my_files')); ``` -Compute: -AllowListedLocalPaths: - /outputs:rw - /etc/\*.conf:ro +### 3. Date-Based Partitioning +Partitions data based on date patterns in filenames, allowing for time-series data queries. + +```sql +SET VARIABLE my_files = ( + SELECT LIST(file) FROM partition_by_date( + 's3://bucket/logs/*.parquet', + 'logs_(\d{4})(\d{2})(\d{2})\.parquet', + 'month' + ) +); +SELECT * FROM read_parquet(getvariable('my_files')); ``` -You can read more about that here: [Understanding Publishers and Results](https://bacalhau.org/docs/guides/publishing-results/#understanding-publishers-and-result-paths) +## Key Use Cases -## Troubleshooting +### 1. Distributed Data Processing -### No Outputs Found +- Run SQL queries across multiple machines without data movement. +- Leverage **Bacalhau’s job orchestration** to distribute and parallelize workloads. -If you don't see expected outputs: +### 2. Multi-Region Data Warehousing -1. Check that your job wrote to the directories specified in your `ResultPaths` -2. Verify the job completed successfully with `bacalhau job describe ` -3. Check for errors in the logs with `bacalhau job logs ` +- Execute **scatter-gather queries** where data resides, avoiding centralization bottlenecks. +- Process only necessary data partitions instead of querying the entire dataset. -### S3 Publishing Issues +### 3. Scalable Analytics -For S3 publisher problems: +- Perform **interactive and batch analytics** on large-scale datasets. +- Use partition-aware querying to speed up data retrieval and reduce costs. -1. Ensure compute nodes have proper IAM roles or credentials to write to the bucket -2. Check that the orchestrator has permissions to generate pre-signed URLs +## Usage Examples -### IPFS Publishing Issues +### 1. Run a Simple Query -For IPFS publisher issues: +```bash +bacalhau docker run ghcr.io/bacalhau-project/duckdb \ + "SELECT 'Hello Bacalhau!' as greeting;" +``` -1. Ensure IPFS daemon is running on both compute node and client -2. Check for network connectivity between nodes -3. Verify you have enough disk space for pinning +```yaml +Name: Simple Query Example +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/duckdb + Parameters: + - -c + - "SELECT 42 AS answer;" ``` +### 2. Process Partitioned Log Files -## README +```yaml +Name: Process Logs +Type: batch +Count: 3 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ghcr.io/bacalhau-project/duckdb + Parameters: + - -c + - > + SET VARIABLE my_logs = ( + SELECT LIST(file) FROM partition_by_date( + 's3://my-bucket/logs/*.parquet', + 'logs_(\d{4})(\d{2})(\d{2})\.parquet', + 'month' + ) + ); + SELECT * FROM read_parquet(getvariable('my_logs')); +``` -# What is Bacalhau? +## Why Use Bacalhau with DuckDB? -Bacalhau is an open-source distributed compute orchestration framework designed to bring compute to the data. Instead of moving large datasets around networks, Bacalhau makes it easy to execute jobs close to the data's location, drastically reducing latency and resource overhead. +| Feature | Benefit | +| ------------------------------- | ------------------------------------------------------------------- | +| **Distributed Query Execution** | Run queries in parallel across multiple compute nodes. | +| **Automatic Partitioning** | Use built-in UDFs to efficiently split workloads. | +| **No Data Movement** | Process data where it resides, avoiding costly transfers. | +| **Scalable Analytics** | Execute SQL queries efficiently across large datasets. | +| **Stateless Compute** | Run on-demand queries without needing a persistent database server. | -### Why It Matters +## Next Steps -* **Highly Distributed Architecture**: Deploy compute networks that span regions, cloud providers, and on-premises datacenters—all working together as a unified system. -* **Resilient Operation**: Compute nodes operate effectively even with intermittent connectivity to orchestrators, maintaining service availability during network partitioning or isolation. -* **Data Sovereignty & Security**: Process sensitive data within security boundaries without requiring it to leave your premises, enabling computation while preserving data control. -* **Cross-Organizational Computation**: Allow specific vetted computations on protected datasets without exposing raw data, breaking data silos between organizations. -* **Resource Efficiency**: By minimizing data transfers, Bacalhau saves bandwidth costs and ensures jobs run faster. -* **High Scalability**: As your data and processing needs grow, simply add more compute nodes on demand—whether on-premises or in the cloud. -* **Ease of Integration**: Bacalhau works with existing container images (Docker, etc.), meaning you can leverage your current workflows without major rewrites. +To get started with Bacalhau and DuckDB: -### Key Features +1. **Deploy Bacalhau nodes** near the data sources. +2. **Submit distributed queries** using Bacalhau’s CLI or YAML job definitions. +3. **Leverage partitioning** to scale query execution efficiently. -1. **Single Binary Simplicity**: Bacalhau is a single self-contained binary that functions as a client, orchestrator, and compute node—making it incredibly easy to set up and scale your distributed compute network. -2. **Modular Architecture**: Bacalhau's design supports multiple execution engines (Docker, WebAssembly) and storage providers through clean interfaces, allowing for easy extension. -3. **Orchestrator-Compute Model**: A dedicated orchestrator coordinates job scheduling, while compute nodes run tasks—all from the same binary with different runtime modes. -4. **Flexible Storage Integrations**: Bacalhau integrates with S3, HTTP/HTTPS, and other storage systems, letting you pull data from various sources. -5. **Multiple Job Types**: Support for batch, ops, daemon, and service job types to accommodate different workflow requirements. -6. **Declarative & Imperative Submissions**: Define jobs in a YAML spec (declarative) or pass all arguments via CLI (imperative). -7. **Publisher Support**: Output results to local volumes, S3, or other storage backends—so your artifacts are readily accessible. +By combining Bacalhau’s distributed execution with DuckDB’s high-performance analytics, users can achieve **scalable, efficient, and cost-effective SQL processing** across large and distributed datasets. -### Use Cases +## content/use-cases/integrations/lilypad.md -Bacalhau's distributed compute framework enables a wide range of applications across different industries: +# Lilypad -
+## Overview -Log Processing +Lilypad provides a decentralized compute infrastructure, leveraging Bacalhau to distribute and execute compute jobs efficiently. It is designed for use cases such as AI inference, machine learning training, decentralized science (DeSci), and more. Lilypad collaborates with decentralized storage and compute networks to enable transparent and scalable computational resources. -Process logs efficiently at scale by running distributed jobs directly at the source, reducing costs by up to 93% in bandwidth usage while improving real-time insights. Bacalhau supports various job types for log management: +## Key Features -* **Daemon Jobs**: Continuously run on each node for real-time log aggregation and compression -* **Service Jobs**: Handle ongoing processing tasks like log aggregation and issue detection -* **Batch Jobs**: Execute on-demand in-depth analysis of historical log data -* **Ops Jobs**: Enable real-time querying of live logs for urgent investigations +- **Decentralized Compute** – Enables trustless, verifiable execution of workloads across thousands of nodes. +- **Multi-Chain Support** – Expanding support for various blockchain ecosystems. +- **Partitioned & Distributed Processing** – Uses Bacalhau’s orchestration to split workloads efficiently. +- **AI & Web3 Applications** – Supports AI, ML, and other high-performance workloads without requiring centralized infrastructure. -
+For more details, visit [Lilypad’s documentation](https://lilypad.tech/). -
+## content/use-cases/use-cases/README.mdx -Distributed Data Warehousing +# Use Cases -Query and analyze data across multiple regions by deploying compute tasks directly where your data resides. This approach reduces latency, enhances performance, and ensures compliance with data sovereignty regulations. Bacalhau integrates with modern data tools like Apache Iceberg and DuckDB to enable: +Bacalhau provides powerful distributed compute capabilities that can be applied across various domains and scenarios. Explore the examples below to discover how Bacalhau can address your specific needs. -* Reduced data movement with local query execution -* Improved query performance through compute-data proximity -* Seamless scalability with dynamic node addition -* Compliance with data regulations through region-specific processing +Below is a complete list of all available use case documentation: -
+ -
+## content/use-cases/use-cases/distributed-data-warehousing.mdx -Fleet Management +# Distributed Data Warehousing -Efficiently manage distributed nodes across multiple environments with capabilities for: +## Overview -* Remote execution of commands without requiring SSH access -* Automated software deployment and configuration updates -* Real-time metrics and logs collection -* Targeted job execution based on node attributes -* Rapid incident response and automated recovery +Traditional centralized data warehouses often struggle with high data transfer costs, increased latency, and compliance challenges. By adopting a distributed data warehousing approach, organizations can process and analyze data closer to its source, ensuring better performance, regulatory adherence, and cost efficiency. -
+## Challenges in Centralized Data Warehousing -
+- **High Data Transfer Costs** – Moving large datasets to a central location incurs significant storage and networking expenses. +- **Latency Issues** – Centralized processing introduces delays, making real-time insights difficult. +- **Scalability Constraints** – As data volumes grow, expanding a monolithic warehouse becomes increasingly complex and costly. +- **Compliance and Data Sovereignty** – Regulations like GDPR and HIPAA often require data to remain within specific regions, making centralized storage and processing non-compliant. -Distributed Machine Learning +## Bacalhau's Approach to Distributed Data Warehousing -Train and deploy ML models across a distributed compute fleet, optimizing performance while keeping data in place: +Bacalhau simplifies distributed data warehousing by enabling compute to run near the data, reducing unnecessary transfers, ensuring compliance, and improving query performance. Compute nodes can be deployed across different regions and data centers, ensuring each location processes its own data efficiently. This approach allows for: -* Distribute training across multiple machines to handle larger models -* Process data locally to minimize network transfers -* Deploy inference jobs near users for low-latency predictions -* Support federated learning for privacy-sensitive applications +- **Reduced Data Movement** – Queries run locally, eliminating the need to transfer large datasets across networks. +- **Improved Query Performance** – Compute happens closer to the data, leading to lower latency and faster insights. +- **Seamless Scalability** – New compute nodes can be added dynamically as data volumes grow. +- **Compliance with Data Regulations** – Keeping data within its originating region helps organizations comply with regulatory requirements while maintaining full control over their datasets. -
+## Scatter and Gather Queries -
+Bacalhau enables efficient **scatter and gather** queries, a key technique in distributed data warehousing: -Edge Computing +1. **Scatter Phase** – A query is sent to multiple nodes located near different datasets. +2. **Local Processing** – Each node processes the query on its local data, significantly reducing data size before transmission. +3. **Gather Phase** – The processed results from all nodes are collected and aggregated into the final output. -Run compute tasks closer to the data source for applications requiring low latency and minimal bandwidth usage: +This approach optimizes performance, ensures compliance by keeping data in its designated region, and reduces network overhead. -* Process and analyze sensor, IoT, or video data in real time -* Perform pre-processing and filtering at the edge before sending refined data -* Distribute tasks across available edge resources dynamically -* Ensure data privacy by keeping computations near the source +## Integration with Modern Data Tools -
+Bacalhau integrates seamlessly with modern data tools like **Apache Iceberg** and **DuckDB**, enhancing its distributed processing capabilities: -### How It Works +- **Apache Iceberg** – A high-performance table format for large analytic datasets, enabling schema evolution, partitioning, and efficient data access across distributed environments. +- **DuckDB** – An in-process analytical database optimized for executing complex queries efficiently. DuckDB's compatibility with Iceberg tables allows for fast, distributed query execution while keeping data in place. -Bacalhau's architecture enables you to create compute networks that bridge traditional infrastructure boundaries. When you submit a job, Bacalhau intelligently determines which compute nodes are best positioned to process the data based on locality, availability, and your defined constraints—without requiring data movement or constant connectivity. +Together, these tools provide a powerful foundation for decentralized data warehousing while maintaining regulatory compliance. -This approach is particularly valuable for: +## Next Steps -* Organizations with data that cannot leave certain security boundaries -* Multi-region operations where data transfer is expensive or impractical -* Scenarios where multiple parties need to collaborate on analysis without sharing raw data -* Edge computing environments with intermittent connectivity +To implement a distributed data warehouse using Bacalhau: -### Community +1. **Deploy Compute Nodes** – Set up nodes in locations where your data is generated or stored to ensure compliance with data residency requirements. +2. **Configure Data Storage** – Use Iceberg for managing structured datasets efficiently while maintaining data governance policies. +3. **Execute Distributed Queries** – Utilize DuckDB to process analytics directly on distributed data sources, keeping data within compliance boundaries. -Bacalhau has a very friendly community and we are always happy to help you get started: +By leveraging distributed data warehousing with Bacalhau, organizations can achieve real-time insights while optimizing costs, scalability, and regulatory compliance. -* [Join the Slack Community](https://bit.ly/bacalhau-project-slack) Go to **#bacalhau** channel – it is the easiest way to engage with other members in the community and get help. -* [Contributing](/community/ways-to-contribute) – learn how to contribute to the Bacalhau project. +## content/use-cases/use-cases/distributed-machine-learning.mdx +# Distributed Machine Learning -## README +## Overview -# Other Specifications +Scaling machine learning workloads across multiple regions and compute environments is a complex task. Traditional approaches require transferring large datasets to a central location for processing, leading to high costs and inefficiencies. Bacalhau simplifies distributed machine learning by allowing model training, inference, and data processing to occur where the data resides, leveraging distributed compute resources to improve efficiency and scalability. +## Key Capabilities -## README +### 1. Distributed Training & Parallel Execution -# Job Specification +Bacalhau enables ML workloads to be split across multiple nodes, allowing for faster and more efficient training by parallelizing computations. -A `Job` represents a discrete unit of work that can be scheduled and executed. It carries all the necessary information to define the nature of the work, how it should be executed, and the resources it requires. +- Distribute training across multiple machines to handle larger models and datasets. +- Process subsets of data locally and aggregate results, reducing the need for excessive data transfer. +- Enable federated learning approaches where training occurs on edge nodes without centralizing data. -```yaml -Type: batch -Count: 1 -Priority: 50 -Meta: - version: "1.2.5" -Labels: - project: "my-project" -Constraints: - - Key: Architecture - Operator: '=' - Values: - - arm64 - - Key: region - Operator: '=' - Values: - - us-west-2 -Tasks: - #... -``` +### 2. Optimized Data Movement & Local Processing -## `job` Parameters +Moving large datasets for ML training is expensive and slow. Bacalhau optimizes data locality by running computations closer to the data source. -* **Name** `(string : )`: A logical name to refer to the job. Defaults to job ID. -* **Namespace** `(string: "default")`: The namespace in which the job is running. `ClientID` is used as a namespace in the public demo network. -* **Type** `(string: )`: The type of the job, such as `batch`, `ops`, `daemon` or `service`. You can learn more about the supported jobs types in the [Job Types](type.md) guide. -* **Priority** `(int: 0`): Determines the scheduling priority. -* **Count** `(int: )`:: Task associated with the job, which defines a unit of work within the job. Today we are only supporting single task per job, but with future plans to extend this. +- Perform feature extraction and preprocessing on data where it resides. +- Train models across multiple data centers without requiring full dataset replication. +- Minimize network costs by aggregating model updates instead of raw data. -## Server-Generated Parameters +### 3. Scalable Model Deployment & Inference -The following parameters are generated by the server and should not be set directly. +Bacalhau simplifies deploying ML models across a distributed fleet for real-time or batch inference. -* **ID** `(string)`: A unique identifier assigned to this job. It's auto-generated by the server and should not be set directly. Used for distinguishing between jobs with similar names. -* **State** `(`[`State`](../other/state.md)`)`: Represents the current state of the job. -* **Version** `(int)`: A monotonically increasing version number incremented on job specification update. -* **Revision** `(int)`: A monotonically increasing revision number incremented on each update to the job's state or specification. -* **CreateTime** `(int)`: Timestamp of job creation. -* **ModifyTime** `(int)`: Timestamp of last job modification. +- Deploy inference jobs across multiple regions to serve predictions with low latency. +- Run model evaluation and A/B testing across different compute clusters. +- Dynamically allocate compute resources based on demand. +### 4. Federated Learning & Privacy-Preserving ML -## README +For privacy-sensitive applications, Bacalhau supports federated learning by keeping data decentralized while training global models. -# Engines +- Train models on distributed data sources without exposing raw data. +- Aggregate model updates instead of datasets, preserving data privacy. +- Improve compliance with data sovereignty regulations while enabling large-scale ML training. +## Example Use Cases -## README +- **Training a deep learning model across multiple GPUs in different regions.** +- **Running distributed hyperparameter tuning without moving raw datasets.** +- **Deploying inference jobs near users for low-latency predictions.** +- **Aggregating model updates from different locations in federated learning scenarios.** +- **Processing large-scale unstructured data (e.g., video, images, logs) directly where it is stored.** -# Sources +## Next Steps +To get started with distributed ML using Bacalhau: -## README +1. **Deploy compute nodes** where training and inference workloads need to run. +2. **Schedule distributed training jobs** to parallelize computation and optimize data movement. +3. **Deploy trained models** across a distributed fleet for scalable, low-latency inference. -# Publishers +By leveraging Bacalhau's distributed execution model, machine learning workloads can scale efficiently, reduce infrastructure costs, and enable privacy-aware training while optimizing resource usage across multiple regions. +## content/use-cases/use-cases/edge-computing.md -## auth +# Edge Computing -# Authentication & Authorization +## Overview -## Introduction +Processing data at the edge—closer to where it is generated—is critical for applications requiring low latency, real-time decision-making, or constrained network environments. Traditional cloud-based models struggle with high data transfer costs, latency issues, and dependency on centralized infrastructure. Bacalhau enables seamless edge computing by allowing workloads to execute directly on edge nodes, reducing reliance on centralized processing while optimizing efficiency and scalability. -Robust authentication and authorization mechanisms are essential for maintaining security while enabling seamless collaboration. As of Bacalhau 1.7 release, we introduced a significant overhaul to its authentication and authorization systems, offering more flexibility, improved security, and better integration with enterprise environments. +## Key Capabilities -## 1. Bacalhau Authentication +### 1. Low-Latency Processing at the Edge -With Bacalhau 1.7, we have introduced three distinct authentication paths, each designed to cater to different use cases and environments. The authentication paths are: +Bacalhau enables compute tasks to be executed directly on edge devices, reducing round-trip times to cloud-based systems. -1. **Basic HTTP Authentication** -2. **API Tokens Auth** -3. **Single Sign-On via OAuth 2.0** +- Process and analyze sensor, IoT, or video data in real time. +- Enable AI inference directly on edge nodes without cloud dependency. +- Reduce response times for critical applications like industrial automation, autonomous vehicles, and healthcare monitoring. -### 1.1 HTTP Basic Authentication +### 2. Efficient Data Processing with Minimal Bandwidth Usage -The simplest approach leverages the time-tested HTTP Basic Authentication protocol, allowing users to access Bacalhau APIs using traditional username and password credentials. These credentials can be defined in the Node Configuration file, which offers two options for password storage: +Transmitting large volumes of raw data to centralized locations for processing can be expensive and slow. Bacalhau optimizes this by allowing computations to happen locally before only sending necessary results. -- _Plain text passwords for simplicity and ease of setup_ -- _Bcrypt-hashed passwords for enhanced security_ +- Perform pre-processing, filtering, and aggregation at the edge before sending refined data to the cloud. +- Reduce network bandwidth usage by executing compute jobs locally. +- Improve system reliability by ensuring tasks continue running even with intermittent connectivity. -For CLI usage, users simply need to set the environment variables `BACALHAU_API_USERNAME` and `BACALHAU_API_PASSWORD`. For direct API calls, the standard Basic Authorization header with base64-encoded credentials can be used. +### 3. Scalable Distributed Execution Across Edge Nodes -Below is a sample orchestrator config file that defines 3 users that can authenticate through basic auth. +Bacalhau dynamically schedules workloads across a distributed network of edge nodes, ensuring optimal resource utilization. -```yaml -Orchestrator: - Enabled: true -API: - Port: 1234 - Auth: - Users: - # User with plain text password - - Alias: Admin User - Username: admin - Password: secureAdminPassword - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['*'] +- Distribute tasks across available edge compute resources dynamically. +- Balance workloads between cloud, edge, and on-premise environments. +- Automatically failover to alternative nodes in case of network or hardware failures. - # User with limited permissions and plain text password - - Alias: Read Only User - Username: reader - Password: readerPassword - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['read:*'] +### 4. Secure & Resilient Edge Deployments - # User with bcrypt hashed password - - Alias: Job Manager - Username: jobmanager - # This is a bcrypt password hash for the password "MySecretPassword" - Password: '$2a$10$3ZvxUe5OudgRIQQheomjMO/Ufx1Bb04SH/y0PXnR19oDRXNGps3r2' - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['read:job', 'write:job', 'read:node'] -``` +Edge environments often operate in remote or untrusted locations. Bacalhau provides a robust execution framework that ensures secure and reliable compute at the edge. -In the above configuration: +- Execute tasks without requiring persistent network connections to a central controller. +- Ensure data privacy by keeping computations near the data source. +- Maintain high availability through decentralized execution and fault tolerance. -1. The first two users have plain text passwords, while the third uses a BCRYPT hashed password for added security. -2. We have three users with different permission levels. These capabilities will be covered in detail in the authorization section below. +## Example Use Cases -To help users and operators generate secure hashed passwords, a convenient CLI command was added that generates a BCRYPT hash of a password of your choosing. This command takes a plain string and converts it into a BCRYPT hash. +- **Processing IoT sensor data at the edge to reduce cloud storage costs.** +- **Running AI inference on edge devices for real-time image and video analysis.** +- **Aggregating and analyzing telemetry data from industrial equipment.** +- **Enabling remote monitoring and diagnostics for healthcare and smart cities.** +- **Reducing network congestion by filtering and compressing data before transmission.** -```shell -bacalhau auth hash-password -``` +## Next Steps -To use this configuration with the Bacalhau CLI, you would set the following environment variables: +To implement edge computing with Bacalhau: -```shell -# For admin access -export BACALHAU_API_USERNAME=admin -export BACALHAU_API_PASSWORD=secureAdminPassword +1. **Deploy Bacalhau nodes** on edge devices, IoT gateways, or remote compute clusters. +2. **Define job execution policies** to run compute tasks on the most suitable edge nodes. +3. **Integrate with cloud and on-premise systems** to balance workload distribution and optimize efficiency. -# For read-only access -export BACALHAU_API_USERNAME=reader -export BACALHAU_API_PASSWORD=readerPassword +By leveraging Bacalhau’s distributed compute model, organizations can bring processing power closer to the data source, improving performance, reducing operational costs, and enabling real-time insights across edge environments. -# For job management -# Please note: Set the password env variable to the actual password, -# not the hashed password. -export BACALHAU_API_USERNAME=jobmanager -export BACALHAU_API_PASSWORD=MySecretPassword -``` +## content/use-cases/use-cases/fleet-management.mdx -For direct API calls, for example by using curl, you would encode the credentials in base64: +# Fleet Management -```shell -# For admin (base64 of "admin:secureAdminPassword") -curl -X GET -H "Authorization: Basic YWRtaW46c2VjdXJlQWRtaW5QYXNzd29yZA==" "http://orchestrator:1234/api/v1/orchestrator/nodes" +## Overview -# For reader (base64 of "reader:readerPassword") -curl -X GET -H "Authorization: Basic cmVhZGVyOnJlYWRlclBhc3N3b3Jk" "http://orchestrator:1234/api/v1/orchestrator/nodes" +Managing a distributed fleet of compute nodes across multiple regions and environments comes with significant complexity, requiring efficient remote execution, monitoring, automation, and rapid incident response. Keeping systems up to date, collecting real-time metrics, and executing large-scale operations often involves extensive manual work and complex tooling. Bacalhau simplifies fleet management by providing a seamless way to run commands, update configurations, gather system metrics, and respond to incidents in real time across all nodes in a network. -# For Job Manager (base64 of "jobmanager:MySecretPassword") -curl -X GET -H "Authorization: Basic am9ibWFuYWdlcjpNeVNlY3JldFBhc3N3b3Jk" "http://orchestrator:1234/api/v1/orchestrator/nodes" -``` +## Key Capabilities ---- +### 1. Remote Execution -### 1.2 Authentication through API Tokens +Bacalhau allows you to execute commands across your entire fleet or on specific subsets of nodes, reducing the need for manual intervention and enabling real-time operational control. -For applications and scenarios where password-based authentication isn't ideal, Bacalhau 1.7 introduces API token support. Instead of username and password pairs, users can generate and use API keys as bearer tokens in authorization headers. +- Run scripts, commands, or jobs across a distributed fleet without requiring SSH access. +- Execute commands on nodes dynamically selected based on their attributes (e.g., region, hardware type, role). +- Reduce the complexity of managing compute nodes across cloud, on-premise, and hybrid environments. -Configuration is straightforward – API keys are defined in the orchestrator config under user profiles. To use them with the Bacalhau CLI, users set the `BACALHAU_API_KEY` environment variable. For direct API access, the token is included in the Authorization header using the Bearer scheme. +### 2. Software Deployment & Configuration Updates -Please note that API Keys are opaque tokens. +Keeping software and configurations up to date across a large number of distributed nodes is challenging. Bacalhau simplifies this by allowing seamless deployment of updates. -Here's a sample configuration for API tokens in Bacalhau: +- Distribute software updates efficiently without requiring centralized coordination. +- Deploy configuration changes dynamically based on workload needs. +- Ensure all nodes remain in sync with the latest versions of necessary tools and dependencies. -```yaml -Orchestrator: - Enabled: true -API: - Port: 1234 - Auth: - Users: - # Administrator API token with full access - - Alias: Admin API Token - APIKey: 8F42A91D7C6E4B3DA5E9F8C12B76D3A4 - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['*'] +### 3. Real-Time Metrics & Logs Collection - # Read-only API token - - Alias: Monitoring Token - APIKey: C5D8E3F1A7B94026895C1D4E3F2A0B78 - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['read:*'] +Monitoring the health and performance of a large fleet requires collecting logs and metrics in real time. Bacalhau provides an efficient way to access this data across all nodes. - # Job management API token - - Alias: CI/CD Pipeline Token - APIKey: 2E8D7F5B3A9C41608D2E6B7F4A5C3D9E - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['read:job', 'write:job', 'read:node'] +- Execute lightweight jobs to collect system statistics, disk usage, or network health metrics. +- Fetch logs from a specific subset of nodes dynamically for debugging and analysis. +- Reduce reliance on heavyweight monitoring tools by executing targeted status checks when needed. - # Agent management API token - - Alias: Agent Management Token - APIKey: 1A3B5C7D9E0F2G4H6I8J0K2L4M6N8P0 - # The Capabilities section will be covered - # in the Authorization section below - Capabilities: - - Actions: ['read:agent', 'write:agent'] -``` +### 4. Targeted & Ops Jobs Execution -In this configuration: +Bacalhau supports **Ops Jobs**, a type of execution designed specifically for fleet-wide operations. These jobs run on all nodes that match a given selection criteria, making it easy to execute large-scale fleet management tasks. -1. We have four API tokens with different permission levels: - - An administrator token with full access to all capabilities - - A monitoring token with read-only access to all resources - - A CI/CD pipeline token that can view nodes and has full control over jobs - - An agent management token that has full control over agents -2. Each token has a unique, randomly generated API key. You should generate strong, unique keys for your production environment using a secure random generator. +- Run security audits, cleanup jobs, or health checks across all nodes. +- Query or modify system state at scale without impacting ongoing workloads. +- Filter job execution by node attributes (e.g., run a command only on GPU nodes or ARM-based instances). -Please note that API keys do not support BCRYPT hashing. +### 5. Incident Response & Automated Recovery -To use these API tokens with the Bacalhau CLI, you would set the following environment variable: +When failures or security incidents occur, Bacalhau enables rapid fleet-wide response and mitigation through distributed execution. -```shell -export BACALHAU_API_KEY=8F42A91D7C6E4B3DA5E9F8C12B76D3A4 -``` +- **Live Investigation** – Execute on-the-fly queries to collect logs and diagnostics from affected nodes. +- **Automated Mitigation** – Deploy quick-fix scripts across targeted nodes to isolate, restart, or remediate issues. +- **Network-Wide Patching** – Apply security patches or enforce policy changes across the fleet without manual intervention. -For direct API calls, for example by using curl, you would use the Bearer token authentication scheme: +By enabling fast, targeted responses to issues, Bacalhau minimizes downtime and ensures operational resilience. -```shell -curl -X GET -H "Authorization: Bearer 8F42A91D7C6E4B3DA5E9F8C12B76D3A4" "http://orchestrator:1234/api/v1/orchestrator/nodes" -``` +## Example Use Cases ---- +- **Updating all nodes in a region with a new software version.** +- **Running a script to check disk space on all nodes and flag those nearing capacity.** +- **Restarting services across specific groups of nodes without manual intervention.** +- **Executing a security patch on all compute nodes matching a specific hardware profile.** +- **Investigating an outage by collecting logs from affected nodes in real time.** +- **Isolating compromised nodes during a security incident by modifying network rules instantly.** -### 1.3 Single Sign-On via OAuth 2.0 - -Perhaps the most significant addition since Bacalhau 1.7 is the support for OAuth 2.0 using the Device Code Flow. This enables Bacalhau to integrate seamlessly with enterprise identity providers such as Okta, Auth0, Azure Active Directory, and Google SSO. - -This approach eliminates the need to define users directly in Bacalhau's configuration, instead delegating user management to the identity provider – a considerable advantage in corporate environments with existing identity infrastructure. - -The configuration process involves specifying OAuth 2.0 endpoints, client IDs, and desired scopes. When users need to authenticate, they run `bacalhau auth sso login`, which presents a device code and URL. After completing authentication through their browser, they receive a JWT token that's automatically used for subsequent API calls (_this token exchange will be done seamlessly and the user is not required to perform any extra actions_). - -Here's a sample configuration for OAuth 2.0 SSO in Bacalhau: +## Next Steps -```yaml -Orchestrator: - Enabled: true -API: - Port: 1234 - Auth: - Oauth2: - # Identity provider details, those are names for your own reference only - ProviderId: 'okta' - ProviderName: 'Okta SSO' +To start managing a distributed compute fleet using Bacalhau: - # OAuth 2.0 endpoints - Device Code Endpoint - DeviceAuthorizationEndpoint: 'https://your-domain.okta.com/oauth2/v1/device/authorize' - # The endpoint used to get the JWT token - TokenEndpoint: 'https://your-domain.okta.com/oauth2/v1/token' - # The Expected issuer, should match the issuer in the JWT token - Issuer: 'https://your-domain.okta.com' - # The JWKS URI - JWKSUri: 'https://your-domain.okta.com/.well-known/jwks.json' +1. **Deploy Bacalhau agents** on all compute nodes across different regions. +2. **Use Ops Jobs** to execute large-scale operational and incident response tasks. +3. **Leverage remote execution** to trigger software updates, collect logs, and automate remediation. - # Client details - DeviceClientId: '0ab2c3d4e5f6g7h8i9j0' - # CLI polling interval to check if the device code was approved - PollingInterval: 5 +By leveraging Bacalhau's distributed execution model, fleet management becomes more efficient, scalable, and automated, reducing operational overhead while ensuring nodes remain up to date, resilient, and responsive to workload demands. - # Audience: Expected "aud" in the JWT token - Audience: 'https://bacalhau.your-company.com/api' +## content/use-cases/use-cases/log-processing.mdx - # Scopes requested in the token exchange - Scopes: - - 'openid' - - 'profile' - - 'email' -``` +# Log Processing -For this to setup work properly: +## Overview -1. Register an OAuth 2.0 application in your identity provider (Okta, Auth0, Azure AD, etc.) -2. Configure it to support the **Device Code Flow**. Make sure the provider supports OAuth2 Device code flow. -3. Set up appropriate roles or groups in your identity provider to map to Bacalhau permissions +Efficient log management is essential for monitoring system health, detecting anomalies, and ensuring compliance. Traditional centralized log processing systems often face challenges such as high data transfer costs, latency in real-time analysis, scalability issues, and security risks. Bacalhau addresses these challenges by enabling distributed log processing, allowing logs to be processed directly at their source. -The permission mapping would happen in your identity provider. For example, in Okta you might create: +## Bacalhau's Approach to Log Processing -- A "Bacalhau Admins" group with permissions: `["*"]` -- A "Bacalhau Readers" group with permissions: `["read:*"]` -- A "Bacalhau Job Managers" group with permissions: `["read:job", "write:job", "read:node"]` +Bacalhau simplifies distributed log processing through its versatile job orchestration capabilities, offering several types of jobs to handle various aspects of log management: -These permissions should be included in the JWT token under the custom claim `permissions`. +- **Daemon Jobs**: These continuously running jobs on each node handle real-time log aggregation and compression. They transmit aggregated logs to platforms like Kafka or Kinesis for immediate analysis and periodically store raw logs in storage solutions such as S3 for archival purposes. +- **Service Jobs**: Designed for ongoing intermediate processing tasks, service jobs perform log aggregation, basic statistics computation, deduplication, and issue detection. They run on a specified number of nodes, ensuring continuous log processing and seamless integration with logging services like Splunk for real-time insights. +- **Batch Jobs**: Executed on-demand, batch jobs focus on in-depth analysis of historical log data stored in locations like S3. This approach eliminates the need to move large datasets, effectively transforming nodes into a distributed data warehouse for comprehensive investigations. +- **Ops Jobs**: Ideal for urgent investigations, ops jobs run across all nodes that meet specific criteria, enabling real-time querying of live logs. This comprehensive coverage is crucial for immediate troubleshooting and incident response. -To authenticate using this setup, users would run: +## Benefits of Using Bacalhau for Log Processing -```shell -# Login -bacalhau auth sso login +Implementing Bacalhau for log processing offers several advantages: -# Logout -bacalhau auth sso logout -``` +- **Cost Reduction**: By processing logs at their source, Bacalhau significantly reduces data transfer volumes. This approach has been shown to decrease bandwidth usage by approximately 93%, leading to substantial cost savings—potentially over 99% compared to traditional centralized log management solutions. ([Ref.](https://blog.bacalhau.org/p/save-25m-yoy-by-managing-logs-the)) +- **Enhanced Security and Compliance**: Processing and storing logs locally minimizes the exposure of sensitive data during transmission, aiding in compliance with data protection regulations and reducing security risks. +- **Scalability and Flexibility**: Bacalhau's distributed architecture allows for seamless scaling to accommodate increasing log volumes without the bottlenecks associated with centralized systems. +- **Real-Time Insights**: With the ability to process logs in real-time at their origin, Bacalhau enables immediate detection of performance issues, security threats, and other critical events, facilitating prompt responses. -Then the CLI would display something like this: +By leveraging Bacalhau's distributed compute framework, organizations can transform their log management processes to be more efficient, cost-effective, and responsive to the dynamic needs of modern IT environments. -```shell -To login, please: +## docs/basics/debugging-the-agent.md -1. Open this URL in your browser: +``` -Users can continue to use their established OPA policies without immediate migration to the new authentication paths. However, it's important to note that while backward compatibility is preserved, mixing the old and new authentication methods within the same deployment is not supported. +This command downloads all outputs from the job to your current directory. -Organizations must choose either to continue using the Open Policy Agent approach exclusively or to migrate fully to the new authentication system with Basic Auth, API Tokens, or OAuth 2.0. +### Specifying an Output Directory -This clean separation prevents potential security inconsistencies and configuration conflicts that could arise from overlapping authentication mechanisms. +You can specify where to save the downloaded results: -For organizations planning to migrate, the Bacalhau team recommends first setting up the new authentication in a test environment, validating access patterns and permissions, and then performing a complete cutover rather than attempting a gradual or partial migration. This approach ensures security integrity throughout the transition while still providing flexibility in timing the upgrade to the enhanced authentication capabilities. +```bash +bacalhau job get --output-dir /path/to/save +``` +### Download Timeout Setting -## configuration-reference +For larger downloads, you can adjust the timeout: -# Configuration Reference +```bash +bacalhau job get --download-timeout-secs 10m +``` -This document serves as the comprehensive reference for all Bacalhau configuration options. You can set these values using a YAML file or the command line. +## Specifying Job Outputs and Publisher -## Setting Configuration +When submitting a job, you need to define which files or directories should be collected as outputs, and where those outputs should be published. -```bash -# Using a configuration file -bacalhau serve --config config.yaml +### Using Command Line -# Using command-line options -bacalhau serve -c NameProvider=hostname -c Labels="region=us-west" +For Docker jobs, use the `--output` flag to define outputs and the `--publisher` flag to specify where to publish the results: -# Combining approaches -bacalhau serve --config base-config.yaml -c WebUI.Enabled=true +```bash +bacalhau docker run \ + --output results:/outputs \ + --publisher s3://my-bucket/results-folder \ + ubuntu:latest \ + -- echo "Hello, World!" > /outputs/hello.txt ``` -## Example Configurations +This tells Bacalhau to: -Below are example configurations for the two primary node types in Bacalhau. +1. Collect everything in the `/outputs` directory of the container +2. Publish it to the specified S3 bucket and path +3. Make it available for download with `bacalhau job get` -### Compute Node Example +### Using Declarative Submission -This example shows a configuration for a compute node that connects to orchestrators: +You can also define outputs in a job specification file: ```yaml -# Basic node identification -NameProvider: 'hostname' -Labels: - region: 'us-west' - environment: 'production' - -# Compute node settings -Compute: - # Enable compute capabilities - Enabled: true +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: python:3.9 + Entrypoint: + - 'python' + - '-c' + - "import os; os.makedirs('/outputs', exist_ok=True); open('/outputs/result.txt', 'w').write('Analysis complete!')" + Publisher: + Type: s3 + Params: + Bucket: my-bucket + Key: results-folder + ResultPaths: + - Name: results + Path: /outputs +``` - # Connect to these orchestrators - Orchestrators: - - 'nats://orchestrator-1.example.com:4222' +Submit this job using: - # Local paths that can be mounted - AllowListedLocalPaths: - - '/data:/data:ro' # Read-only access - - '/outputs:/outputs:rw' # Read-write access +```bash +bacalhau job run job-spec.yaml +``` - # Security settings - Auth: - Token: 'secure-access-token' +### Multiple Output Paths - # Resource allocation - AllocatedCapacity: - CPU: '80%' # Dedicate 80% of CPU to jobs - Memory: '80%' # Dedicate 80% of memory to jobs - Disk: '80%' # Dedicate 80% of disk to jobs - GPU: '100%' # Dedicate all GPUs to jobs +You can specify multiple output paths in a single job: -# Reject jobs with network access +```bash +bacalhau docker run \ + --output logs:/var/log \ + --output results:/outputs \ + --publisher s3://my-bucket/results-folder \ + ubuntu:latest \ + -- +``` + +## Downloaded Results Structure + +After running `bacalhau job get`, the results will be organized in a directory structure like this: + +``` +. +├── job-j-6bafb8d4 +│ ├── exitCode +│ ├── outputs +│ │ └── file1 +│ ├── stderr +│ └── stdout +``` + +The directory structure includes: + +- `exitCode`: Contains the exit code of the job +- `outputs`: Contains all the files from the job's specified output directories +- `stderr`: Captures any error output from the job +- `stdout`: Captures the standard output from the job + +## docs/basics/inspecting-jobs.md + +# Inspecting Jobs + +Once you've submitted jobs to Bacalhau and identified them through job listing, you'll often need to dig deeper into specific jobs. This guide covers the commands for getting detailed information about your jobs. + +## What You'll Learn + +- How to view comprehensive details about a specific job +- How to track a job's history and state changes +- How to examine individual job executions + +## Describing a Job + +To see complete details about a specific job, use: + +```bash +bacalhau job describe +``` + +Replace `` with your actual job ID. You can use the full ID or just the first few characters (if they uniquely identify the job). + +### Sample Output + +``` +ID = j-1efa8fb5-a3ce-4c15-8660-e6c5cd4fe981 +Name = hello-bacalhau +Namespace = default +Type = batch +State = Completed +Count = 1 +Created Time = 2025-03-01 16:11:20 +Modified Time = 2025-03-01 16:11:20 +Version = 0 + +Summary +Completed = 1 + +Job History + TIME TOPIC EVENT + 2025-03-01 16:11:20 Submission Job submitted + 2025-03-01 16:11:20 State Update Running + 2025-03-01 16:11:20 State Update Completed + +Executions + ID NODE ID STATE DESIRED REV. CREATED MODIFIED COMMENT + e-5f62dd5d n-1af42f75 Completed Stopped 4 14m19s ago 14m18s ago Running + +Execution e-5f62dd5d History + TIME TOPIC EVENT + 2025-03-01 16:11:20 Scheduling Requested execution on n-1af42f75 + 2025-03-01 16:11:20 Execution Running + 2025-03-01 16:11:20 Execution Completed successfully + +Standard Output +Hello from a YAML spec! + +``` + +The output shows you: + +- Basic job information (ID, name, type, state) +- Summary of job completion status +- Job history timeline +- Execution details on which nodes ran the job +- Execution history showing state changes +- Standard output from the job execution + +## Customizing the Output Format + +Change the output format for easier parsing or integration with other tools: + +```bash +# Get YAML output +bacalhau job describe --output yaml + +# Get pretty-printed JSON +bacalhau job describe --output json --pretty +``` + +## Tracking Job History + +To see how a job's state has changed over time: + +```bash +bacalhau job history +``` + +The history shows important events like state transitions and execution updates. + +### Filtering History Events + +Filter history by event type: + +```bash +# Show only job-level events +bacalhau job history --event-type job + +# Show only execution-level events +bacalhau job history --event-type execution +``` + +Filter by a specific execution: + +```bash +bacalhau job history --execution-id +``` + +## Viewing Job Executions + +For jobs that run on multiple nodes or have multiple attempts, check the executions: + +```bash +bacalhau job executions +``` + +Each execution represents an instance of your job running on a specific node. + +#### Customizing Execution List + +```bash +# Sort by state +bacalhau job executions --order-by state + +# Get full details without truncation +bacalhau job executions --wide + +# Get in alternative format +bacalhau job executions --output yaml +``` + +## docs/basics/listing-jobs.md + +# Listing Jobs + +This guide shows you how to view and filter the jobs in your Bacalhau environment. Being able to list jobs is essential for monitoring your workloads and finding specific jobs to inspect further. + +## What You'll Learn + +- How to list all your jobs +- How to filter jobs by various criteria +- How to customize the output format + +## Basic Job Listing + +To see your recent jobs, use: + +```bash +bacalhau job list +``` + +By default, this shows your 10 most recent jobs with basic information. + +### Sample Output + +``` + CREATED ID JOB TYPE STATE + 11:01:45 j-f827bd29 docker batch Completed + 17:24:37 j-feea35d9 docker batch Completed + ... + 20:14:13 j-edce7319 docker batch Completed +To fetch more records use: + bacalhau job list --limit 10 --next-token Ok46MTA6MTA +``` + +The output columns show: + +- **CREATED**: When the job was created (time) +- **ID**: The job's unique identifier +- **JOB**: The job engine type (usually docker) +- **TYPE**: The job type (batch, service, etc.) +- **STATE**: Current job state (Completed, Running, Pending, Failed, etc.) + +## Filtering Your Job List + +You can refine your job list using various flags: + +### Limit the Number of Results + +```bash +bacalhau job list --limit 5 +``` + +### Filter by Labels + +Labels help organize and categorize your jobs: + +```bash +bacalhau job list --labels "env=dev,project=research" +``` + +More complex label filtering: + +```bash +bacalhau job list --labels "region in (us-east-1, us-west-1)" +``` + +### Change Result Order + +Order by creation time or job ID: + +```bash +bacalhau job list --order-by created_at +``` + +Reverse the order (newest last): + +```bash +bacalhau job list --order-reversed +``` + +### Pagination + +When you have many jobs, the output will include a pagination token: + +```bash +# Use the next token from previous results +bacalhau job list --limit 10 --next-token Ok46MTA6MTA +``` + +## Customizing Output Format + +By default, results appear in a table format. You can choose other formats: + +### JSON Output + +```bash +bacalhau job list --output json +``` + +For more readable JSON: + +```bash +bacalhau job list --output json --pretty +``` + +### YAML Output + +```bash +bacalhau job list --output yaml +``` + +### CSV Output + +Useful for importing into spreadsheets: + +```bash +bacalhau job list --output csv +``` + +### Table Formatting Options + +Additional options for table output: + +```bash +# Show full values without truncation +bacalhau job list --wide + +# Hide the header row +bacalhau job list --hide-header + +# Remove table styling +bacalhau job list --no-style +``` + +## docs/basics/retrieving-logs.md + +# Retrieving Logs + +After submitting a job to Bacalhau, you'll typically need to inspect its execution logs to monitor progress and troubleshoot issues. This guide explains how to access and manage logs from your Bacalhau jobs. + +## What You'll Learn + +- How to view job execution logs +- How to stream logs in real-time during job execution +- How to filter logs for specific executions + +## Execution Logs + +Execution logs contain the standard output (stdout) and standard error (stderr) from your job, which are invaluable for monitoring and debugging. + +### Basic Log Retrieval + +To view the logs for a completed or running job: + +```bash +bacalhau job logs +``` + +This displays stdout/stderr from the container execution, showing you exactly what your job printed during its run. + +### Real-Time Log Streaming + +For long-running jobs, you can stream logs as they're generated: + +```bash +bacalhau job logs --follow +``` + +This is similar to `tail -f` and will continuously show new log entries until you press Ctrl+C or the job completes. + +### Filtering Logs + +If your job has multiple parallel executions, you can focus on a specific one: + +```bash +bacalhau job logs --execution-id +``` + +You can find execution IDs by running `bacalhau job describe `. + +### Tailing Logs + +To view only the most recent log entries: + +```bash +bacalhau job logs --tail +``` + +## Following Logs During Job Submission + +When submitting a new job, you can immediately follow the logs by adding the `--follow` flag to your job run command: + +```bash +bacalhau job run ./job.yaml --follow +``` + +This is convenient as it combines job submission and log following into a single command, eliminating the need to run a separate `job logs` command. + +For docker run commands, you can similarly use: + +```bash +bacalhau docker run --follow ubuntu:latest -- echo "Hello World" +``` + +## docs/basics/stopping-a-job.md + +# Stopping a Job + +Sometimes you need to terminate a running job before it completes naturally. Bacalhau provides a straightforward way to stop jobs in progress. + +## Stopping a Running Job + +To stop a job that's currently running: + +```bash +bacalhau job stop +``` + +### How It Works + +When you issue a stop command: + +1. The Bacalhau orchestrator marks the job for termination +2. A signal is sent to all compute nodes running tasks for that job +3. The compute nodes terminate the running containers +4. Resources allocated to the job are released +5. The job's state is updated to `Stopped` + +### Verifying Termination + +To confirm a job has been properly stopped: + +```bash +bacalhau job describe +``` + +Look for the `State` field, which should show `Stopped` once the termination is complete. + +## When to Stop a Job + +Common scenarios where stopping a job is necessary: + +- **Stuck or Misconfigured Jobs**: Jobs that are stuck in a loop, using incorrect data, or producing errors +- **Resource Optimization**: When a job is too resource-intensive or taking too long +- **Prioritization Changes**: When higher-priority work arrives and you need to free up resources +- **Service Jobs**: For jobs designed to run continuously, the `stop` command is especially useful when the service is no longer needed + +## docs/basics/submitting-jobs.md + +# Submitting Jobs + +This guide introduces the basics of submitting jobs to Bacalhau. Whether you're running a quick task or setting up a more complex job, you'll learn the essential approaches. + +## What You'll Learn + +* How to run quick jobs with simple commands +* How to create reusable job specifications +* Basic job configuration options + +## Quick Jobs: Command Line Approach + +The fastest way to run a job is using the `bacalhau docker run` command. This is perfect for simple tasks or when you're just getting started. + +```bash +bacalhau docker run \ + ubuntu:latest \ + -- echo "Hello from Bacalhau" +``` + +By default, this runs a batch job (one-time execution). You can also run ops jobs using `--target all`. + +```bash +bacalhau docker run \ + --target all \ + ubuntu:latest \ + -- echo "Running as an ops job" +``` + +### Key Options + +* `--cpu 0.5`: Request half a CPU core +* `--memory 512mb`: Request 512MB of memory +* `--id-only`: Show just the job ID (useful for scripts) + +:::tip +Everything after the `--` is executed inside the container. +::: + +## Reusable Jobs: YAML Specification + +For jobs you'll run multiple times or want to save, create a YAML specification file: + +```yaml +# hello-job.yaml +Name: "hello-bacalhau" +Type: batch +Count: 1 +Tasks: + - Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Entrypoint: + - "echo" + - "Hello from a YAML spec!" +``` + +Submit it with: + +```bash +bacalhau job run hello-job.yaml +``` + +This approach helps you: + +* Save job configurations for later use +* Share job definitions with teammates +* Make small changes without retyping everything + +:::info +Find out more about the possibilities of jobs in [the job specification reference](/specifications/job/README.md). +::: + +## Job Types and Choosing Methods + +Bacalhau supports several job types: + +* **batch**: One-time execution (default for command line) +* **ops**: Administrative tasks targeting specific nodes (use `--target all` to run on all nodes) +* **service**: Long-running services that run on any _N_ nodes +* **daemon**: Background processes that run continuously on all nodes + +**Important:** Service and daemon jobs can only be created using YAML specifications as they're designed for repeatable or updatable workloads. + +### When to Choose Each Method + +* **Use the command line** for: + * Quick, one-time batch jobs + * Simple ops jobs with `--target all` +* **Use YAML files** when: + * Running service or daemon jobs + * Creating repeatable job configurations + * Sharing job definitions with teammates + +## docs/basics/working-with-nodes.md + +# Working with Nodes + +While `agent` commands let you interact with your local Bacalhau process, `node` commands allow you to manage the broader network of compute resources. The orchestrator tracks these nodes, and this guide covers common operations you'll need for monitoring and managing your compute infrastructure. + +## Surveying Your Compute Network + +To get a quick overview of all nodes in your network: + +```bash +bacalhau node list +``` + +This displays a table of nodes with essential information about IDs, types, approval status, and connection state. Use this command for monitoring cluster health and identifying nodes that need attention. + +### Focusing on Available Compute Resources + +When planning job deployments or troubleshooting resource constraints: + +```bash +bacalhau node list --show version,features +``` + +This enhanced view shows version information and supported execution engines. This helps you identify nodes with specific capabilities for your workloads. + +### Filtering Nodes + +Filter the list to show only nodes with specific characteristics: + +```bash +bacalhau node list --labels "region=us-west,gpu=true" +``` + +This filtering capability helps you find nodes in specific regions or with specialized hardware. + +## Deep Dive into Node Details + +When you need comprehensive information about a specific node: + +```bash +bacalhau node describe compute-abc123 +``` + +This provides extensive details on the node's identity, resources, and capabilities. Use this when investigating specific issues or verifying a node's configuration. + +## docs/guides/compute-over-data-architecture.mdx + + + +# Compute-over-data architecture across remote sites and object stores + +Compute-over-data means choosing a compute location with practical access to the input, instead of automatically centralizing every dataset. In Bacalhau, an orchestrator receives a job and compute nodes execute Docker or WASM tasks; inputs and outputs are described as part of the job. See the [architecture overview](/docs/overview/architecture/) for component responsibilities. + +## Reference topology + +| Layer | Responsibility | Design question | +| --- | --- | --- | +| Orchestrator | Receives jobs and coordinates state | Who operates its availability, identity, and audit trail? | +| Compute nodes | Execute isolated task environments | Which sites can reach each dataset and meet runtime needs? | +| Input storage | Provides files, objects, or URLs | Which credentials and network paths are permitted? | +| Result publisher | Stores artifacts and results | Where may outputs reside and who can retrieve them? | + +Keep the network boundary explicit: object storage is not automatically mounted simply because a node is nearby, and a job constraint does not change a storage bucket policy. + +## Model the job rather than the marketing diagram + +This example uses a URL input and local publisher so the data path is visible. Substitute your controlled source and publisher only after reviewing the relevant source and result specifications. + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: summarize + Engine: + Type: docker + Params: + Image: alpine:3.21 + Parameters: [sh, -c, "wc -l /inputs/events.txt > /outputs/line-count.txt"] + InputSources: + - Alias: events + Target: /inputs/events.txt + Source: + Type: urlDownload + Params: + URL: https://example.org/events.txt + Publisher: + Type: local + ResultPaths: + - Name: outputs + Path: /outputs +``` + +Submit it with `bacalhau job run job.yaml`, then use `bacalhau job describe ` to inspect execution state. The [quick start](/docs/getting-started/quick-start/) shows the same imperative and declarative workflow. + +## Tradeoffs and controls + +| Requirement | Useful Bacalhau mechanism | Boundary outside Bacalhau | +| --- | --- | --- | +| Keep work at a site | Node labels and job constraints | Network segmentation and physical/data residency controls | +| Limit a task's inputs | Explicit input sources | Storage IAM, object ACLs, and secret distribution | +| Preserve results | Result paths and a publisher | Retention, encryption, and downstream access policy | +| Recover from a failure | Job state and operator monitoring | Site disaster recovery and capacity planning | + +Read the [constraint specification](/docs/specifications/job/constraint/), [input-source specification](/docs/specifications/job/input-source/), and [publishing results guide](/docs/guides/publishing-results/) before choosing production values. + +## Limitations + +This architecture does not eliminate data transfer: container images, inputs, logs, and results can still cross a network. Instrument those paths, test loss of a site or storage endpoint, and define whether a no-match constraint must fail closed or trigger an approved fallback. + +## docs/guides/compute-over-data-comparison.mdx + + + +# Bacalhau compared with Kubernetes, KubeEdge, Nomad, Ray, and Trino + +Bacalhau is an independent, Apache-2.0-licensed distributed compute project. It coordinates container and WASM jobs across compute nodes, with placement informed by available resources, job requirements, and data access. It is not a renamed Kubernetes distribution, a data warehouse, or a managed cloud service. + +## Start with the workload boundary + +| Tool | Primary strength | Prefer it when | Tradeoff to plan for | +| --- | --- | --- | --- | +| Bacalhau | Running arbitrary jobs close to distributed data | Batch, ops, daemon, or service workloads need data-aware placement | You operate the nodes, storage credentials, and job policy | +| Kubernetes | General-purpose container platform | You need a large ecosystem for long-lived applications | Data locality is normally modeled through your storage and scheduling design | +| KubeEdge | Kubernetes extension for edge nodes | Existing Kubernetes control-plane patterns must extend to devices | It retains Kubernetes operational complexity | +| Nomad | Simple workload scheduling | A homogeneous fleet and broad workload types are the main concern | Data-source-aware job design remains your responsibility | +| Ray | Distributed Python and AI workloads | Actors, tasks, and Python-native ML are central | It is not a general data-locality control plane | +| Trino | Federated SQL queries | The problem can be expressed in SQL over supported sources | It does not run arbitrary containerized transformations | + +The comparison is not a feature checklist. A common design is to retain Kubernetes or Nomad for application services, use a SQL engine for interactive analysis, and use Bacalhau for a bounded job that must execute where data can be accessed. + +## A small, auditable starting point + +Label nodes only with facts your operators maintain, then constrain a job to the required boundary: + +```bash +bacalhau serve --compute -c Labels="region=eu-west,data-boundary=eu" + +bacalhau docker run \ + --constraints "region=eu-west" \ + --constraints "data-boundary=eu" \ + --input https://example.org/manifest.json:/inputs/manifest.json \ + --output results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'wc -c /inputs/manifest.json > /outputs/count.txt' +``` + +This does not prove legal compliance by itself. Confirm network routes, identity, storage policy, encryption, and the actual location of every input and output with the systems that own those controls. + +## Decision checks + +1. Read the [architecture overview](/docs/overview/architecture/) and decide which process owns orchestration and compute. +2. Model inputs explicitly using the [job input-source specification](/docs/specifications/job/input-source/), rather than assuming a URL is local. +3. Use [labels and constraints](/docs/guides/labels-and-constraints/) for placement rules, and test no-match behavior before production. +4. Define result handling with [result paths](/docs/specifications/job/result-path/) and [publishing results](/docs/guides/publishing-results/). + +## Limitations + +Data proximity can reduce unnecessary transfers, but it cannot make an unavailable dataset accessible or turn labels into an enforcement system. Measure transfer volume and execution time in your environment; do not infer either from this comparison. + +## docs/guides/data-locality-and-sovereignty.mdx + + + +# Data locality, sovereignty, bandwidth, and egress patterns + +Data locality is a design decision about where inputs are accessed and work runs. Data sovereignty is broader: it concerns legal, contractual, operational, and technical controls around data. Bacalhau can help express compute placement through node labels and job constraints, but it cannot certify compliance or infer the location of a remote source. + +## Choose the pattern that matches the boundary + +| Pattern | Use it when | What to verify | +| --- | --- | --- | +| Site-local processing | A site hosts the data and compute | Node labels, local access path, output location, and offline behavior | +| Region-scoped processing | Data and workers must stay within an approved region | Storage endpoint, DNS and network routes, credentials, and failover region | +| Object-store-adjacent processing | Large objects are reachable from selected workers | Actual byte transfer, IAM scope, result publisher, and cost model | +| Centralized processing | A controlled central copy is acceptable | Ingest policy, egress cost, retention, and recovery objectives | + +## Make placement explicit + +Start a compute node with operator-maintained labels, then require them in the job: + +```bash +bacalhau serve --compute -c Labels="residency=ca,site=toronto" + +bacalhau docker run \ + --constraints "residency=ca" \ + --constraints "site=toronto" \ + --input https://example.org/public-records.csv:/input/records.csv \ + --output locality-results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'sha256sum /input/records.csv > /outputs/checksum.txt' +``` + +The command is intentionally simple: it proves that a constrained job can execute and publish an output. It does not prove that an HTTPS endpoint, container registry, log system, or operator workstation stayed in the same jurisdiction. + +## Controls that belong together + +| Goal | Bacalhau configuration | Complementary control | +| --- | --- | --- | +| Direct work to suitable nodes | Labels and [constraints](/docs/guides/labels-and-constraints/) | Change control for labels and capacity | +| Describe a data path | [Input sources](/docs/specifications/job/input-source/) and [tasks](/docs/specifications/job/task/) | Storage IAM, network policy, and credential rotation | +| Retain artifacts safely | [Result paths](/docs/specifications/job/result-path/) and a publisher | Encryption, retention, and downstream authorization | +| Bound a workload lifecycle | [Job type](/docs/specifications/job/type/) and [timeouts](/docs/specifications/job/timeouts/) | Monitoring, incident response, and business continuity | + +## Limitations and audit evidence + +For each production job, retain the submitted specification, selected node, input and output endpoints, identities used, timing, and transfer measurements. Review these against your jurisdictional and contractual requirements. Bacalhau's [architecture](/docs/overview/architecture/) explains the scheduling components, while your organization remains responsible for the surrounding enforcement and evidence. + +## docs/guides/edge-orchestration-buyers-guide.mdx + + + +# Technical buyer's guide to distributed edge orchestration + +An edge orchestrator is useful only when it makes an operating boundary clearer: where code runs, which data it can reach, how it is observed, and what happens when a site is unavailable. Bacalhau is an Apache-2.0 open-source project for orchestrating Docker and WASM workloads across compute nodes; it does not replace your device-management, identity, or storage systems. + +## Evaluation matrix + +| Evaluation area | Questions to ask | Bacalhau evidence to inspect | +| --- | --- | --- | +| Placement | Can a workload target an approved region or capability? | [Labels and constraints](/docs/guides/labels-and-constraints/) and a deliberate no-match test | +| Lifecycle | Is the workload batch, ops, daemon, or service? | [Job type specification](/docs/specifications/job/type/) | +| Inputs and outputs | Are every source and result path explicit? | [Input sources](/docs/specifications/job/input-source/) and [result paths](/docs/specifications/job/result-path/) | +| Runtime | Which images, parameters, resources, and network assumptions apply? | [Task specification](/docs/specifications/job/task/) and [network specification](/docs/specifications/job/network/) | +| Operations | Who sees job state and acts on failures? | `bacalhau job describe`, logs, and your monitoring system | + +## Pilot design + +Begin with two sites that have different data or network conditions. Give nodes factual labels, submit a small workload with explicit constraints, then compare job state and result location. Do not begin by connecting production data. + +```bash +bacalhau serve --compute -c Labels="site=plant-a,accelerator=false" + +bacalhau docker run \ + --constraints "site=plant-a" \ + --input https://example.org/telemetry.csv:/input/telemetry.csv \ + --output pilot-results:/outputs \ + --publisher local \ + alpine:3.21 sh -c 'wc -l /input/telemetry.csv > /outputs/rows.txt' +``` + +Record the node identity, job ID, input access method, result path, elapsed time, transfer measurements, and the behavior when the matching node is unavailable. This turns a pilot into reproducible evidence rather than a demo. + +## Selection tradeoffs + +| If you prioritize | Design implication | +| --- | --- | +| Strict site boundaries | Combine constraints with network, storage, and identity enforcement; constraints alone are insufficient | +| Low-touch operations | Favor a small, repeatable node configuration and a narrowly scoped pilot | +| Heterogeneous hardware | Label only verified capabilities and test each runtime image on its target architecture | +| Fast centralized analytics | A data warehouse or SQL engine may be a better primary tool than edge orchestration | + +The [quick start](/docs/getting-started/quick-start/) is a safe local starting point. Move to a multi-site design only after validating the [architecture](/docs/overview/architecture/), job timeouts, resource limits, and recovery expectations. + +## Limitations + +No orchestration tool can establish compliance or availability alone. Verify device patching, physical access, connectivity, secrets, storage policy, and incident response with the owners of those controls. + +## docs/guides/labels-and-constraints.md + +# Labels and Constraints + +This guide provides a comprehensive overview of Bacalhau's label and constraint system, which enables fine-grained control over job scheduling and resource allocation. + +## Understanding Labels and Constraints + +Labels in Bacalhau are key-value pairs attached to nodes that describe their characteristics, capabilities, and properties. Constraints are rules you define when submitting jobs to ensure they run on nodes with specific labels. + +## Label Configuration + +### Command Line Configuration + +You define labels when starting a Bacalhau node using the `-c Labels` flag: + +```bash +bacalhau serve -c Labels="env=prod,gpu=true,arch=x64" +``` + +### Configuration File + +You can also define labels in a YAML configuration file: + +```yaml +# config.yaml +labels: + env: prod + gpu: true + arch: x64 + region: us-west +``` + +Then start the node with: + +```bash +bacalhau serve --config config.yaml +``` + +### Verifying Labels + +Check node labels using: + +```bash +bacalhau node list +``` + +### Constraint Operators + +Bacalhau supports various operators for precise node selection: + +| Operator | Example | Description | +| -------- | ----------------- | ----------------- | +| `=` | `region=us-east` | Exact match | +| `!=` | `env!=staging` | Not equal | +| `exists` | `gpu` | Key exists | +| `!` | `!temporary` | Key doesn't exist | +| `in` | `zone in (a,b,c)` | Value in set | +| `gt` | `mem-gb gt 32` | Greater than | +| `lt` | `cpu-cores lt 16` | Less than | + +## Job Submission Patterns + +### Basic Constraint Usage + +Common patterns for submitting jobs with constraints: + +```bash +# Single constraint +bacalhau docker run --constraints "env=prod" alpine + +# Multiple constraints +bacalhau docker run \ + --constraints "env=prod" \ + --constraints "gpu=true" \ + nvidia/cuda:11.0-base nvidia-smi +``` + +### Resource-Specific Constraints + +```bash +# Data processing with specific architecture requirements +bacalhau docker run \ + --constraints "arch in (x64,arm64)" \ + --constraints "mem-gb gt 16" \ + --constraints "storage-tier!=hdd" \ + my-data-processing-job + +# High-memory workloads +bacalhau docker run --constraints "mem-gb gt 64" in-memory-db + +# GPU workloads +bacalhau docker run \ + --constraints "gpu-model=a100" \ + --constraints "gpu-count gt 1" \ + llm-training +``` + +### Environment-Specific Patterns + +```bash +# Production workloads +bacalhau docker run --constraints "env=prod,data-tier=hot" spark-job + +# Development/testing +bacalhau docker run --constraints "env=dev" test-runner + +# Geographic requirements +bacalhau docker run --constraints "region=eu,compliance=gdpr" data-processor + +# Multi-zone deployments +bacalhau docker run --constraints "zone in (us-east-1a,us-east-1b)" ha-service +``` + +### Common Failure Scenarios + +```bash +# No SSD nodes available +bacalhau docker run --constraints "disk=ssd" alpine echo "failed" + +# Insufficient CPU +bacalhau docker run --constraints "cpu-cores gt 64" alpine echo "failed" +``` + +## Best Practices + +### Naming Conventions + +Follow these patterns for consistent label naming: + +- Use lowercase alphanumeric characters +- Separate words with hyphens +- Use descriptive prefixes for categorization + +Examples: + +``` +team-ml-gpu +env-prod-tier1 +storage-ssd-nvme +``` + +### Label Hierarchies + +Organize labels hierarchically for better management: + +```bash +# Parent node +bacalhau serve -c Labels="tier=core,env=prod" + +# Specialized child node +bacalhau serve -c Labels="tier=edge,env=prod,gpu=true" +``` + +### Constraint Composition + +```bash +# AND logic (all must match) +bacalhau docker run \ + --constraints "storage=ssd" \ + --constraints "cpu-arch=x64" \ + high-performance-job + +# OR logic with value lists +bacalhau docker run \ + --constraints "zone in (us-east1,us-west2)" \ + multi-region-job + +# Exclusion patterns +bacalhau docker run \ + --constraints "maintenance!=true" \ + time-sensitive-job +``` + +## Advanced Use Cases + +### Security and Compliance + +```bash +# Ensure compliance requirements +bacalhau docker run \ + --constraints "security=hipaa" \ + --constraints "encryption=enabled" \ + sensitive-data-job + +# Network isolation +bacalhau docker run \ + --constraints "network=private" \ + --constraints "public-access=false" \ + internal-job +``` + +### Resource Optimization + +```bash +# Cost-optimized scheduling +bacalhau docker run \ + --constraints "instance-type=spot" \ + --constraints "cost-tier=low" \ + batch-job + +# Performance optimization +bacalhau docker run \ + --constraints "storage-type=nvme" \ + --constraints "network-speed gt 10" \ + latency-sensitive-job +``` + +### Multi-team Coordination + +```bash +# Team resource allocation +bacalhau docker run \ + --constraints "team in (data,research)" \ + --constraints "project=genomics-2024" \ + shared-resource-job + +# Label deprecation management +bacalhau serve -c Labels="legacy-system=phase-out,retirement-date=2025-Q1" +``` + +## Monitoring and Maintenance + +### Label Updates + +Remember that label changes require node restarts. After updating labels: + +1. Gracefully stop the node +2. Apply new configuration +3. Restart the node +4. Verify labels with `bacalhau node list` + +### Monitoring and Troubleshooting + +```bash +# List all node labels +bacalhau node list --output json | jq 'map(.Info.Labels)' + +# Check job constraint matches +bacalhau job describe JOB_ID --include-events +``` + +## Troubleshooting Common Issues + +### No Matching Nodes + +If your job fails with no matching nodes: + +1. Check available nodes and their labels: + + ```bash + bacalhau node list --output json + ``` + +2. Verify your constraints aren't too restrictive: + + ```bash + # Instead of + --constraints "mem-gb gt 128" + # Try + --constraints "mem-gb gt 64" + ``` + +3. Ensure required nodes are online: + ```bash + bacalhau node list --labels "required-label=value" + ``` + +## Conclusion + +Effective use of Bacalhau's label and constraint system enables precise control over workload placement and resource utilization. Follow these best practices: + +1. Use consistent naming conventions +2. Document your label taxonomy +3. Regularly audit and clean up unused labels +4. Test constraints before production deployment +5. Monitor constraint patterns for optimization opportunities + +For additional support, consult the Bacalhau documentation or community resources. + +## docs/guides/mounting-input-data.mdx + +# Mounting Input Data + +This page explains how to feed external data into Bacalhau jobs from various sources. Bacalhau's modular architecture enables flexible data mounting from multiple storage providers, with S3-compatible storage, local directories, IPFS, and HTTP/HTTPS URLs supported out of the box. + +## What You'll Learn + +- How to mount data from different sources to your Bacalhau jobs +- The syntax and options for each data source type +- Best practices for efficient data handling + +## Input Mounting Basics + +Bacalhau jobs often need access to input data. The general syntax for mounting input data is: + +```bash +bacalhau docker run \ +--input : \ +IMAGE -- COMMAND +``` + +Where: + +- `URI` is the protocol identifier (file://, s3://, ipfs://, http://, https://) +- `SOURCE` specifies the path to the data +- `TARGET` is the path where the data will be mounted in the container + +This pattern is consistent across all input types, making it easy to understand and use regardless of the data source. + +```yaml +... +InputSources: +- Alias: input +Target: +Source: +Type: +Params: + key: value +``` + +Where: + +- `URI` is the protocol identifier (file://, s3://, ipfs://, http://, https://) +- `TARGET` is the path where the data will be mounted in the container +- `PARAMS` are key value configuration [depending on the input type](/components/sources/README.mdx) + +## Local Directories + +```bash +bacalhau docker run \ +--input file:///path/to/local/data:/data \ +ubuntu:latest -- cat /data/input.txt +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - "cat" + - "/data/input.txt" + InputSources: + - Alias: input_data + Target: /data + Source: + Type: local + Params: + Path: /path/to/local/data +``` + +This mounts the directory `/path/to/local/data` from the host machine to `/data` inside the container. + +## S3-Compatible Storage + +S3 integration connects to storage solutions compatible with the S3 API, such as AWS S3, Google Cloud Storage, and locally deployed MinIO + +```bash +bacalhau docker run \ +--input s3://my-bucket/datasets/sample.csv:/data/sample.csv \ +ubuntu:latest -- cat /data/sample.csv +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - "cat" + - "/data/sample.csv" + InputSources: + - Alias: input_data + Target: /data/sample.csv + Source: + Type: s3 + Params: + Bucket: my-bucket + Key: datasets/sample.csv +``` + +This downloads and mounts the S3 object to the specified path in the container. + +## HTTP/HTTPS URLs + +URL-based inputs provide access to web-hosted resources. + +```bash +bacalhau docker run \ +--input https://example.com/data.csv:/data/data.csv \ +ubuntu:latest -- head -n 10 /data/data.csv +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - head + - -n + - "10" + - /data/data.csv + InputSources: + - Alias: input_data + Target: /data/data.csv + Source: + Type: urlDownload + Params: + URL: https://example.com/data.csv +``` + +## IPFS (InterPlanetary File System) + +IPFS provides content-addressable, peer-to-peer storage for decentralized data sharing. + +```bash +bacalhau docker run \ +--input ipfs://QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx:/data \ +ubuntu:latest -- cat /data/file.txt +``` + +```yaml +Type: batch +Count: 1 +Tasks: +- Name: "task1" + Engine: + Type: "docker" + Params: + Image: "ubuntu:latest" + Parameters: + - cat + - /data/file.txt + InputSources: + - Alias: input_data + Target: /data + Source: + Type: ipfs + Params: + CID: QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx +``` + +The IPFS CID (Content Identifier) points to the specific content you want to mount. + +## Multiple Inputs + +You can combine multiple inputs from different sources in a single job: + +```bash +bacalhau docker run \ +--input file:///path/to/config:/config \ +--input s3://my-bucket/datasets/data.csv:/data/data.csv \ +--input https://example.com/reference.json:/data/reference.json \ +python:3.9 -- python /config/process.py +``` + +## Working with Large Datasets + +For very large datasets, consider these optimization strategies: + +```bash +bacalhau docker run \ +--cpu 4 \ +--memory 8GB \ +--disk 100GB \ +--input s3://big-data-bucket/huge-dataset/:/data/ \ +python:3.9 -- python process_big_data.py +``` + +Best practices: + +- Increase resource allocations as needed +- Use data locality to minimize transfer costs +- Process data in chunks when possible +- Choose efficient data formats (Parquet, Arrow, etc.) + +## Tips & Caveats + +- **Credentials**: Some mount sources (S3) require proper credentials or connectivity +- **Data Locality**: Use Bacalhau label selectors to run jobs on nodes that have or close to the data +- **IPFS Network**: Compute nodes must be connected to an IPFS daemon to support this storage type +- **Size Limits**: Very large inputs may require increased disk allocations using `--disk` + +## Next Steps + +- Learn how to retrieve and publish outputs from jobs +- See a complete example workflow that includes input data +- Explore resource constraints for jobs with large data processing needs + +## docs/guides/networking.md + +# Networking + +By default, Bacalhau jobs have network access. This is configured at the node level and can be restricted based on your infrastructure requirements and security policies. + +## Specifying Job Network Access + +To run Docker jobs on Bacalhau with different network access levels, you can specify one of the following: + +1. **host**: unfiltered network access for any protocol `--network=host` (default) +2. **http**: HTTP(S)-only network access to a specified list of domains `--network=http` +3. **none**: no network access `--network=none` + +:::info +Specifying `none` will still allow Bacalhau to download and upload data before and after the job using a Publisher. +::: + +Jobs using `http` must specify the domains they want to access when the job is submitted. + +So, putting it together the job run should look like this: + +```bash +bacalhau docker run --network=host alpine curl https://google.com +``` + +Jobs with `http` networking will be provided with [`http_proxy` and `https_proxy` environment variables](https://about.gitlab.com/blog/2021/01/27/we-need-to-talk-no-proxy/) which contain a TCP address of an HTTP proxy to connect through. Most tools and libraries will use these environment variables by default. If not, they must be used by user code to configure HTTP proxy usage. Note that proxy environment variables are only provided in `http` mode, not in `host` mode. + +The required networking can be specified using the `--network` flag. For `http` networking, the required domains can be specified using the `--domain` flag, multiple times for as many domains as required. Specifying a domain starting with a `.` means that all sub-domains will be included. For example, specifying `.example.com` will cover `some.thing.example.com` as well as `example.com`. + +:::info +If you encounter the following (or any DNS) error, you likely set the `--network=none` flag or are connecting to a node that has network access disabled: +::: + +``` +Execution e-0d59d223: error: +Failed to fetch: https://pypi.org/simple/pyyaml/ + Caused by: Could not connect, are you offline? + Caused by: Request failed after 3 retries + Caused by: error sending request for url (https://pypi.org/simple/pyyaml/) + Caused by: client error (Connect) Caused by: dns error: failed to lookup address information: Try again + Caused by: failed to lookup address information: Try again +``` + +:::warning +Bacalhau jobs are explicitly prevented from starting other Bacalhau jobs, even if a Bacalhau requester node is specified on the HTTP allowlist. +::: + +## Setting Up Your Nodes + +Network access for jobs is enabled by default at the node level. If you wish to disable it, you can configure this using an Admission Controller setting in the node configuration: + +```yaml +Compute: + Enabled: true + TLS: + RequireTLS: true +JobAdmissionControl: + RejectNetworkedJobs: true +``` + +## docs/guides/partitioning.mdx + +# Partitioning + +Partitioning is a powerful feature in Bacalhau that allows you to efficiently distribute large datasets and compute-intensive tasks across multiple compute nodes. Instead of running a single job execution, partitioning splits your workload into separate, independent partitions that run concurrently, improving performance and resource utilization. + +This core functionality has enabled key integrations such as Bacalhau's [DuckDB integration](/integrations/duckdb), which implements `partition_by` User Defined Functions (UDFs) that leverage the partitioning system to enable truly distributed SQL queries across multiple nodes. + +### Understanding Partitioned Execution + +When processing large datasets or running compute-intensive tasks, splitting the work across multiple nodes can significantly improve performance and resource utilization. Bacalhau's partitioning feature makes this process systematic by: + +- Distributing work across multiple compute nodes +- Managing partition assignments and tracking +- Handling failures at a partition level +- Providing execution context to each partition + +### Core Features + +#### 1. Partition Management + +Bacalhau handles the key aspects of partition management: + +- **Distribution**: When you specify multiple partitions, Bacalhau: + - Creates N partitions (0 to N-1) + - Assigns each partition to available compute nodes that match the data and other constraints you have set up + - Maintains consistent partition assignments throughout the job lifecycle + - Ensures that each partition finishes correctly +- **Independent Execution**: Each partition: + - Runs independently of others + - Can be processed on different nodes + - Has its own lifecycle and error handling + +#### 2. Error Handling and Recovery + +A key strength of the partitioning system is its approach to failure handling: + +- **Partition-Level Isolation**: + - Failures are contained within individual partitions + - System continues processing unaffected partitions + - Failed partitions are retried independently +- **Example Scenario**: + + ``` + Job with 5 partitions: + Partition 0: ✓ Completed + Partition 1: ✓ Completed + Partition 2: ✓ Completed + Partition 3: ✗ Failed -> Scheduled for retry + Partition 4: ✓ Completed + ``` + +#### 3. Execution Context + +Each partition receives essential information through environment variables: + +```bash +BACALHAU_PARTITION_INDEX # Current partition (0 to N-1) +BACALHAU_PARTITION_COUNT # Total number of partitions + +# Additional context variables +BACALHAU_JOB_ID # Unique job identifier +BACALHAU_JOB_TYPE # Job type (Batch/Service) +BACALHAU_EXECUTION_ID # Unique execution identifier +``` + +This context enables your code to: + +- Identify its assigned partition +- Access job-level information +- Implement partition-specific processing logic + +### Using Partitioning in Your Jobs + +```bash +bacalhau docker run \ + --count 3 \ + ubuntu -- sh -c 'echo Partition=$BACALHAU_PARTITION_INDEX' +``` + +To use partitioning, specify the number of partitions using the `--count` parameter when submitting your job + +```yaml +# partition.yaml +Name: Partitioned Job +Type: batch +Count: 3 # This defines the number of partitions +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu + Parameters: + - sh + - -c + - echo Partition=$BACALHAU_PARTITION_INDEX +``` + +You can also use partitioning in job specifications + +Submit with: + +```bash +bacalhau job run partition.yaml +``` + +### Technical Benefits + +Bacalhau's partitioning feature offers significant technical advantages: + +#### Enhanced Performance and Scalability + +- **Horizontal Scaling**: Distribute work across multiple compute nodes +- **Parallel Processing**: Improve processing speed for large datasets +- **Resource Optimization**: Maximize resource utilization across your cluster +- **Reduced Processing Time**: Handle massive datasets more efficiently + +#### Increased Reliability and Resilience + +- **Granular Failure Recovery**: Isolate errors within individual partitions +- **Automatic Retry**: Automatically reschedule failed partitions +- **Continuous Processing**: Continue processing other partitions despite failures +- **Result Preservation**: Prevent unnecessary reprocessing of successful partitions + +### Limitations and Considerations + +- Partitioning is supported only for `batch` and `service` job types +- `daemon` and `ops` jobs are deployed to all nodes and don't use the partitioning feature +- The default value for `Count` is 1, which means no partitioning +- Your application code must be designed to work with partitioned execution + +### Best Practices + +- **Ensure Idempotency**: Make sure each partition can be safely retried without side effects +- **Balance Partition Size**: Choose a partition count that balances overhead with parallelism +- **Design for Independence**: Partitions should operate independently without cross-partition dependencies +- **Handle Edge Cases**: Account for scenarios like uneven data distribution across partitions +- **Use Partition Context**: Leverage the environment variables to implement partition-aware logic + +### Examples + +#### Basic Partitioning Example + +```bash +# Run a job with 4 partitions +bacalhau docker run \ + --count 4 \ + ubuntu -- sh -c 'echo Processing partition $BACALHAU_PARTITION_INDEX of $BACALHAU_PARTITION_COUNT' +``` + +#### Data Processing with Python + +```python +# script.py + +# Get partition information +partition_index = int(os.environ.get('BACALHAU_PARTITION_INDEX', 0)) +partition_count = int(os.environ.get('BACALHAU_PARTITION_COUNT', 1)) + +# Define data ranges for each partition +def get_data_chunk(index, total): + # Example: Split data processing by date ranges + dates = pd.date_range('2023-01-01', '2023-12-31') + chunk_size = len(dates) // total + start_idx = index * chunk_size + end_idx = start_idx + chunk_size if index < total - 1 else len(dates) + return dates[start_idx:end_idx] + +# Process only this partition's data range +my_dates = get_data_chunk(partition_index, partition_count) +print(f"Partition {partition_index}/{partition_count} processing dates: {my_dates[0]} to {my_dates[-1]}") + +# Continue with processing... +``` + +Run with: + +```bash +bacalhau docker run \ + --count 12 \ + --input /script.py:/app/script.py \ + python:3.9 -- python /app/script.py +``` + +### Related Features + +Bacalhau's partitioning system serves as a foundation for other features, including: + +- [**DuckDB Integration**](/integrations/duckdb): Enables distributed SQL analytics with partitioning support +- [**S3 Partitioning**](s3-partitioning.md): Specialized support for partitioned S3 data processing + +### Conclusion + +Partitioning in Bacalhau provides a powerful way to scale your workloads across distributed compute resources. By allowing work to be split and processed in parallel, while maintaining fault tolerance and proper error handling, Bacalhau's partitioning feature enables efficient processing of large datasets and compute-intensive tasks. + +## docs/guides/publishing-results.mdx + +# Publishing & Retrieving Results + +This guide explains how to configure output publishing and retrieve results from Bacalhau jobs across different storage systems. Proper output handling is essential for building effective data pipelines and workflows. + +## What You'll Learn + +- How Bacalhau's Publishers mechanism works +- How to configure different output destination types +- How to retrieve outputs from various storage systems +- How to choose the right publisher for your use case + +## Understanding Publishers and Result Paths + +In Bacalhau, you need to configure two key components for handling outputs: + +1. A **Publisher** defines where your job's output files are stored after execution +2. **Result Paths** specify which directories should be captured as job results. + +```bash +bacalhau docker run \ + --publisher \ + --output /outputs:/outputs \ + ubuntu:latest -- echo "Hello, Bacalhau" > /outputs/hello.txt +``` + +```yaml +Publisher: + Type: + Params: + Key: Value + +ResultPaths: + +- Name: /outputs + Path: /outputs + +```` + +### Retrieving Local Outputs + +After your job completes, retrieve outputs using the `bacalhau job get` command: + +```bash +bacalhau job get +```` + +This will download all published outputs to your current directory. + +:::note + +- If you define a publisher without specifying result paths, only stdout and stderr will be uploaded to the chosen publisher +- If you define result paths without a publisher, the job will fail +- You can have multiple result paths, each capturing different directories + ::: + +## Publisher Types + +Bacalhau supports multiple publisher types to accommodate different needs and infrastructure requirements. + +### S3 Publisher + +The S3 Publisher uploads outputs to an Amazon S3 bucket or any S3-compatible storage service, such as MinIO. The compute node must have permission to write to the bucket, and the orchestrator must have permission to provide pre-signed URLs to download the results. + +```bash +bacalhau docker run \ + --publisher s3://my-bucket/bacalhau-output \ + --output /outputs:/outputs \ + ubuntu:latest -- bash -c "echo 'results' > /outputs/results.txt" +``` + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo 'results' > /outputs/results.txt + Publisher: + Type: s3 + Params: + Bucket: my-bucket + Key: bacalhau-outputs + ResultPaths: + - Name: /outputs + Path: /outputs +``` + +### IPFS Publisher + +The IPFS Publisher uploads outputs to the InterPlanetary File System. Both the client (downloading the result) and the compute node must be connected to an IPFS daemon. + +```bash +bacalhau docker run \ + --publisher ipfs \ + --output /outputs:/outputs \ + ubuntu:latest -- bash -c "echo 'results' > /outputs/results.txt" +``` + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo 'results' > /outputs/results.txt + Publisher: + Type: ipfs + ResultPaths: + - Name: /outputs + Path: /outputs +``` + +### Local Publisher + +The Local Publisher saves outputs to the local filesystem of the compute node that ran your job. This is intended for **local testing only**, as it requires the client downloading the results to be on the same network as the compute node. + +```bash +bacalhau docker run \ + --publisher local \ + --output /outputs:/outputs \ + ubuntu:latest -- bash -c "echo 'results' > /outputs/results.txt" +``` + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - echo 'results' > /outputs/results.txt + Publisher: + Type: local + ResultPaths: + - Name: /outputs + Path: /outputs + +``` + +If you are using the local publish, make SURE you have set the path to be available to your job. + +For example, in your config file for your node, you probably want to mount in the local file system: + +``` + +Compute: +AllowListedLocalPaths: - /outputs:rw - /etc/\*.conf:ro + +``` + +You can read more about that here: [Understanding Publishers and Results](publishing-results.mdx#understanding-publishers-and-result-paths) + +## Troubleshooting + +### No Outputs Found + +If you don't see expected outputs: + +1. Check that your job wrote to the directories specified in your `ResultPaths` +2. Verify the job completed successfully with `bacalhau job describe ` +3. Check for errors in the logs with `bacalhau job logs ` + +### S3 Publishing Issues + +For S3 publisher problems: + +1. Ensure compute nodes have proper IAM roles or credentials to write to the bucket +2. Check that the orchestrator has permissions to generate pre-signed URLs + +### IPFS Publishing Issues + +For IPFS publisher issues: + +1. Ensure IPFS daemon is running on both compute node and client +2. Check for network connectivity between nodes +3. Verify you have enough disk space for pinning +``` + +## docs/guides/queueing.md + +# Queueing + +## Introduction + +Job Queueing allows Bacalhau to handle situations when there are no suitable nodes available to execute a job. You can configure a time period during which the job will wait for suitable nodes to become available or free up. This feature enables better flexibility and reliability in managing your distributed workloads. + +## Configuring Job Queueing + +The job queueing feature is not automatically enabled and needs to be explicitly set in your [Job specification](/specifications/job/README.md) or node configuration using the `QueueTimeout` parameter. This parameter activates the queueing feature and defines the amount of time your job should wait for available nodes. + +Node availability is determined by capacity as well as job constraints such as label selectors, engines, or publishers. For example, jobs will be queued if all nodes are currently busy, or if idle nodes do not match parameters in your job specification. + +:::info +Bacalhau compute nodes regularly update their [node, resource and health information](/references/operators/node-management.md) every 30 seconds to the orchestrator nodes. During this update period, multiple jobs may be allocated to a node, potentially exceeding its immediate available capacity. A local job queue is created at the compute node, efficiently handling the high demand as resources become available over time. +::: + +## How It Works + +You can set default queueing behavior for all jobs by defining the `QueueTimeout` parameter in the node's configuration file. Alternatively, within the job specification, you can include the `QueueTimeout` parameter directly in the configuration YAML. This flexibility allows you to tailor the queueing behavior to meet the specific needs of your distributed computing environment. + +### Orchestrator Node + +Here's an example orchestrator node configuration that sets the default job queueing retry interval for an hour: + +```yaml +Orchestrator: + Scheduler: + QueueBackoff: 1h +``` + +:::info +The `QueueBackoff` parameter determines how frequently the scheduler will retry assigning queued jobs to compute nodes. +::: + +### Job Specification + +Here's a sample job specification setting the `QueueTimeout` for this specific job, overriding any node defaults: + +```yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Entrypoint: + - /bin/bash + Parameters: + - -c + - sleep 90 + Timeouts: + QueueTimeout: 1800 +``` + +### CLI Command + +You can also define timeouts for your jobs directly through the CLI using the `--queue-timeout` flag. This provides a convenient way to specify queueing behavior on a per-job basis without modifying configuration files: + +```bash +bacalhau docker run ubuntu sleep 90 --queue-timeout 1800 +``` + +:::warning +Timeouts in Bacalhau are generally governed by the `TotalTimeout` value for your YAML specifications and the `--timeout` flag for your CLI commands. The default total timeout value is 30 minutes. Setting a queue timeout larger than the total timeout without increasing the total timeout value will result in a validation error. +::: + +## Monitoring Queued Jobs + +Jobs will be queued when all available nodes are busy or when there is no node that matches your job specifications. Let's look at how you can monitor queued jobs. + +Queued jobs will initially display the `Queued` status. Using the `bacalhau job describe` command will show both the state of the job and the reason behind queueing. + +For busy nodes: + +```bash +ID = j-d740ba46-b135-4161-bd79-795c94d215b0 +Name = j-d740ba46-b135-4161-bd79-795c94d215b0 +Namespace = default +Type = batch +State = Queued +Message = Job queued. not enough nodes to run job. requested: 1, available: 3, suitable: 0. +• Node n-b75224b7: node busy with available capacity {CPU: 0.2, Memory: 12 GB, Disk: 79 GB, GPU: 0} + and queue capacity {CPU: 2, Memory: 4.0 GB, Disk: 0 B, GPU: 0} +• Node n-d42422fd: node busy with available capacity {CPU: 0.2, Memory: 12 GB, Disk: 83 GB, GPU: 0} + and queue capacity {CPU: 3, Memory: 1.0 GB, Disk: 0 B, GPU: 0} +• Node n-f50db1f9: node busy with available capacity {CPU: 0.2, Memory: 12 GB, Disk: 83 GB, GPU: 0} +``` + +For no matching nodes: + +```bash +ID = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Name = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Namespace = default +Type = batch +State = Queued +Message = Job queued. not enough nodes to run job. requested: 1, available: 4, suitable: 0. +• 3 of 4 nodes: labels map[Architecture:amd64 Operating-System:linux owner:bacalhau] + don't match required selectors [name = walid] +• Node Qma5yQAk: labels map[Architecture:amd64 GPU-0:Tesla-T4 GPU-0-Memory:15360-MiB + Operating-System:linux owner:bacalhau] don't match required selectors [name = walid] +``` + +Once appropriate node resources become available, these jobs will transition to either a `Running` or `Completed` status, allowing more jobs to be assigned to matching nodes. + +Here's an example of a job's lifecycle from queued to completed: + +```bash +ID = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Name = j-0dda82b7-ad5a-4b96-b675-728c5f54f4c9 +Namespace = default +Type = batch +State = Completed +Count = 1 +Created Time = 2024-06-24 13:36:40 +Modified Time = 2024-06-24 13:41:40 +Version = 0 + +Summary +Completed = 1 + +Job History + TIME REV. STATE TOPIC EVENT + 2024-06-24 13:36:40 1 Pending Submission Job submitted + 2024-06-24 13:36:40 2 Queued Queueing Job queued. not enough nodes to run job. requested: 1, + available: 4, suitable: 0. + • 3 of 4 nodes: labels map[Architecture:amd64 + Operating-System:linux owner:bacalhau] + don't match required selectors [name = walid] + • Node Qma5yQAk: labels map[Architecture:amd64 + GPU-0:Tesla-T4 GPU-0-Memory:15360-MiB + Operating-System:linux owner:bacalhau] + don't match required selectors [name = walid] + 2024-06-24 13:39:40 3 Running + 2024-06-24 13:41:40 4 Completed + +Executions + ID NODE ID STATE DESIRED REV. CREATED MODIFIED COMMENT + e-88cb1c72 n-73426e31 Completed Stopped 6 6m5s ago 4m4s ago Accepted job + +Execution e-88cb1c72 History + TIME REV. STATE TOPIC EVENT + 2024-06-24 13:39:40 1 New + 2024-06-24 13:39:40 2 AskForBid + 2024-06-24 15:39:40 3 AskForBidAccepted Requesting Node Accepted job + 2024-06-24 13:39:40 4 AskForBidAccepted + 2024-06-24 13:39:40 5 BidAccepted + 2024-06-24 13:41:40 6 Completed +``` + +## docs/guides/resource-requirements.md + +# Resource Requirements + +This guide covers how to specify resource requirements for your jobs and how to configure resource limits on compute nodes. + +## Understanding Resources in Bacalhau + +Bacalhau manages four key resource types: + +| Resource | Description | Default | Example | +| -------- | --------------------------------------- | ---------------- | -------------- | +| CPU | Processing power in cores or millicores | 500m (0.5 cores) | `--cpu=2` | +| Memory | RAM allocation | 1GB | `--memory=4GB` | +| Disk | Storage space | System dependent | `--disk=10GB` | +| GPU | Number of GPUs | 0 | `--gpu=1` | + +## For Job Submitters: Requesting Resources + +When submitting jobs, you can specify the resources your workload requires. This helps Bacalhau find appropriate compute nodes and allocate sufficient resources. + +### Command Line Specification + +```bash +# Request specific resources +bacalhau docker run \ + --cpu=2 \ + --memory=4GB \ + --disk=10GB \ + ubuntu:latest -- +``` + +### YAML Job Specification + +```yaml +# job.yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Parameters: + - echo + - 'Hello, world!' + Resources: + CPU: '2' + Memory: '4GB' + Disk: '10GB' + GPU: '1' +``` + +Submit using: + +```bash +bacalhau job run job.yaml +``` + +### Resource Formats + +#### CPU + +CPU can be specified in two formats: + +- **Decimal cores**: `--cpu=2` (2 CPU cores) +- **Millicores**: `--cpu=500m` (0.5 CPU cores) + +```bash +# Examples +bacalhau docker run --cpu=4 python:3.9 -- python cpu_heavy_script.py +bacalhau docker run --cpu=250m alpine -- sleep 60 +``` + +#### Memory + +Memory can be specified using different units: + +- `MB` or `M` for megabytes +- `GB` or `G` for gigabytes + +```bash +# Examples +bacalhau docker run --memory=8GB tensorflow/tensorflow -- python model.py +bacalhau docker run --memory=512MB alpine -- sleep 60 +``` + +#### Disk + +For jobs that write large files or process large datasets: + +```bash +# Example +bacalhau docker run --disk=20GB ubuntu -- dd if=/dev/zero of=/outputs/large_file bs=1M count=15000 +``` + +#### GPU + +For GPU-accelerated workloads: + +```bash +# Example +bacalhau docker run --gpu=1 nvidia/cuda:11.6.2-base-ubuntu20.04 -- nvidia-smi +``` + +## GPU Workloads + +### Prerequisites + +To run GPU jobs successfully: + +1. The Bacalhau network must have compute nodes with GPUs +2. Your container must include CUDA runtime compatible with the node's GPU drivers +3. Use a pre-built GPU container (e.g., from NVIDIA's container registry) + +### GPU Type Selection + +Request specific GPU types using constraints: + +```bash +# Request Tesla T4 GPU +bacalhau docker run \ + --gpu=1 \ + --constraints "GPU-0=Tesla-T4" \ + nvidia/cuda -- nvidia-smi +``` + +## For Node Operators: Setting Resource Limits + +Node operators can configure how much of their system resources are allocated to Bacalhau jobs. + +### Configuring Node Resource Limits + +| Configuration Key | Description | Default | Format | +| -------------------------------- | ------------------------------ | ------- | ---------------------------- | +| Compute.AllocatedCapacity.CPU | CPU allocation for jobs | `80%` | Percentage or absolute value | +| Compute.AllocatedCapacity.Memory | Memory allocation for jobs | `80%` | Percentage or absolute value | +| Compute.AllocatedCapacity.Disk | Disk space allocation for jobs | `80%` | Percentage or absolute value | +| Compute.AllocatedCapacity.GPU | GPU allocation for jobs | `100%` | Percentage or absolute value | + +Values can be expressed as: + +- Percentages of total system resources (e.g., `80%`) +- Absolute values (e.g., `16Gi` for memory) + +Example `config.yaml` configuration: + +```yaml +# config.yaml +Compute: + AllocatedCapacity: + CPU: '75%' + Memory: '16Gi' + Disk: '80%' + GPU: '100%' +``` + +### Setting Default Job Resources + +You can configure default resources for jobs that don't specify their own requirements in your `config.yaml` file: + +```yaml +# config.yaml +JobDefaults: + Batch: + Task: + Resources: + Memory: '2Gi' + CPU: '1' + Ops: + Task: + Resources: + CPU: '0.5' +``` + +## Checking Available Resources + +View available resources across your network: + +```bash +bacalhau node list --show capacity +``` + +This helps you understand what resources you can reasonably request. + +## Troubleshooting + +### Common Issues + +1. **Job stays in PENDING state**: You may be requesting more resources than any available node can provide +2. **Out of memory (OOM) errors**: Increase memory allocation or optimize your workload +3. **Disk space errors**: Request more disk space or clean up temporary files +4. **CUDA errors with GPU jobs**: Ensure container compatibility with the node's GPU drivers + +### Windows Support Limitations + +Resource limits have the following limitations on Windows-based nodes: + +- Resource limits are not supported for Docker jobs running on Windows +- Limits will be applied at the job bid stage but not enforced at runtime +- Bacalhau assumes all containers are Linux-based + +## Best Practices + +1. Start with conservative resource estimates and scale up as needed +2. For memory-intensive tasks, add a 20-30% buffer above expected peak usage +3. For disk space, consider both input data size and temporary files +4. Test GPU workloads locally before running on Bacalhau +5. Use monitoring and job logs to fine-tune resource requirements + +## docs/guides/s3-partitioning.md + +# S3 Partitioning + +Bacalhau's S3 partitioning feature builds on the [core partitioning](partitioning.mdx) system to automatically handle data distribution from S3 buckets across multiple job executions. This specialized implementation includes graceful failure handling and independent retry of failed partitions specifically optimized for S3 data sources. + +## Key Benefits + +- **Automatic Data Distribution**: Intelligently distributes S3 objects across partitions +- **Multiple Partitioning Strategies**: Choose from various strategies based on your data organization +- **Clean Processing Logic**: Write code focused on processing, not partitioning +- **Failure Isolation**: Failures are contained to individual partitions +- **Independent Retries**: Failed partitions are retried automatically without affecting successful ones + +## Partitioning Strategies + +Bacalhau supports multiple S3 partitioning strategies to match different data organization patterns: + +### No Partitioning (Shared Data) + +When all executions need access to all the data, omit the partition configuration: + +```yaml +inputSources: + - target: /data + source: + type: s3 + params: + bucket: config-bucket + key: reference-data/ + # No partition config - all executions see all files +``` + +Perfect for: + +- Loading shared reference data +- Processing configuration files +- Running analysis that needs the complete dataset + +### Object-Based Distribution + +Evenly distributes objects across partitions without specific grouping logic: + +```yaml +inputSources: + - target: /uploads + source: + type: s3 + params: + bucket: data-bucket + key: user-uploads/ + partition: + type: object +``` + +Ideal for: + +- Processing large volumes of user uploads +- Handling randomly named files +- Large-scale data transformation tasks + +### Date-Based Partitioning + +Process each day's data in parallel using a configurable date format: + +```yaml +inputSources: + - target: /logs + source: + type: s3 + params: + bucket: app-logs + key: 'logs/*' + partition: + type: date + dateFormat: '2006-01-02' +``` + +Perfect for: + +- Daily analytics processing +- Log aggregation and analysis +- Time-series computations + +### Regex-Based Partitioning + +Distribute data based on patterns in object keys: + +```yaml +inputSources: + - target: /sales + source: + type: s3 + params: + bucket: global-sales + key: 'regions/*' + partition: + type: regex + pattern: '([^/]+)/.*' +``` + +Enables scenarios like: + +- Regional sales analysis +- Geographic data processing +- Territory-specific reporting + +### Substring-Based Partitioning + +Distributes data based on substring segments in object keys: + +```yaml +inputSources: + - target: /segments + source: + type: s3 + params: + bucket: customer-data + key: segments/* + partition: + type: substring + startIndex: 0 + endIndex: 3 +``` + +Perfect for: + +- Customer cohort analysis +- Segment-specific processing +- Category-based computations + +## Combining Partitioned and Shared Data + +You can combine partitioned data with shared reference data in the same job: + +```yaml +inputSources: + - target: /config + source: + type: s3 + params: + bucket: config-bucket + key: reference/* + # No partitioning - all executions see all reference data + - target: /daily-logs + source: + type: s3 + params: + bucket: app-logs + key: logs/* + partition: + type: date + dateFormat: '2006-01-02' +``` + +This pattern supports: + +- Processing daily logs with shared lookup tables +- Analyzing data using common reference files +- Running calculations that need both partitioned data and shared configuration + +## Complete Job Examples + +### Example 1: Object-Based Partitioning + +Here's a complete job specification using object-based partitioning: + +```yaml +name: process-uploads +count: 5 +type: batch +tasks: + - name: process-uploads + engine: + type: docker + params: + image: ubuntu:latest + parameters: + - bash + - -c + - | + echo "Processing partition $BACALHAU_PARTITION_INDEX of $BACALHAU_PARTITION_COUNT" + file_count=$(find /uploads -type f | wc -l) + echo "Found $file_count files to process in this partition" + inputSources: + - target: /uploads + source: + type: s3 + params: + bucket: data-bucket + key: user-uploads/ + partition: + type: object +``` + +### Example 2: Combining Partitioned and Shared Data + +Here's a complete job specification that combines partitioned and shared data sources: + +```yaml +name: daily-analysis +count: 7 # Process a week of data +type: batch +tasks: + - name: daily-analytics + engine: + type: docker + params: + image: ubuntu:latest + parameters: + - bash + - -c + - | + echo "Processing partition $BACALHAU_PARTITION_INDEX of $BACALHAU_PARTITION_COUNT" + echo "Reference data files:" + find /config -type f | sort + echo "Daily log files for this partition:" + find /daily-logs -type f | wc -l + inputSources: + - target: /config + source: + type: s3 + params: + bucket: config-bucket + key: reference/* + # No partitioning - all executions see all reference data + - target: /daily-logs + source: + type: s3 + params: + bucket: app-logs + key: logs/* + partition: + type: date + dateFormat: '2006-01-02' + outputs: + - name: results + path: /outputs +``` + +## Usage + +To run a job with S3 partitioning, define your job with the appropriate partitioning strategy and set the number of partitions with the `count` parameter, then submit: + +```bash +bacalhau job run job-spec.yaml +``` + +## docs/guides/selection-policy.md + +# Selection Policy + +When running a node, you can choose which jobs you want to run by using configuration options, environment variables, or flags to specify a job selection policy. + +| Configuration key | Default value | Meaning | +| --------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------- | +| JobAdmissionControl.Locality | Anywhere | Only accept jobs that reference data we have locally ("local") or anywhere ("anywhere"). | +| JobAdmissionControl.ProbeExec | unused | Use the result of an external program to decide if we should take on the job. | +| JobAdmissionControl.ProbeHTTP | unused | Use the result of a HTTP POST to decide if we should take on the job. | +| JobAdmissionControl.RejectStatelessJobs | False | Reject jobs that don't specify any [input data](../specifications/job/input-source.md). | +| JobAdmissionControl.RejectNetworkedJobs | False | Reject jobs that require [network access](./networking.md). By default, network access is enabled. | + +## Job Selection Probes + +If you want more control over making the decision to take on jobs, you can use the `JobAdmissionControl.ProbeExec` and `JobAdmissionControl.ProbeHTTP` configuration keys. + +These are external programs that are passed the following data structure so that they can make a decision about whether to take on a job: + +```json +{ + "node_id": "XXX", + "job_id": "XXX", + "spec": { + "engine": "docker", + "verifier": "ipfs", + "job_spec_vm": { + "image": "ubuntu:latest", + "entrypoint": ["cat", "/file.txt"] + }, + "inputs": [ + { + "engine": "ipfs", + "cid": "XXX", + "path": "/file.txt" + } + ] + } +} +``` + +The `exec` probe is a script to run that will be given the job data on `stdin`, and must exit with status code 0 if the job should be run. + +The `http` probe is a URL to POST the job data to. The job will be rejected if the HTTP request returns a non-positive status code (e.g. >= 400). + +If the HTTP response is a JSON blob, it should match the [following schema](https://github.com/bacalhau-project/bacalhau/blob/885d53e93b01fb343294d7ddbdbffe89918db800/pkg/bidstrategy/type.go#L18-L22) and will be used to respond to the bid directly: + +```json +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "shouldBid": { + "description": "If the job should be accepted", + "type": "boolean" + }, + "shouldWait": { + "description": "If the node should wait for an async response that will come later. `shouldBid` will be ignored", + "type": "boolean", + "default": false + }, + "reason": { + "description": "Human-readable string explaining why the job should be accepted or rejected, or why the wait is required", + "type": "string" + } + }, + "required": ["shouldBid", "reason"] +} +``` + +For example, the following response will reject the job: + +```json +{ + "shouldBid": false, + "reason": "The job did not pass this specific validation: ..." +} +``` + +If the HTTP response is not a JSON blob, the content is ignored and any non-error status code will accept the job. + +## docs/guides/timeouts.md + +# Timeouts + +This guide explains how Bacalhau uses timeouts to manage job execution duration, protecting both users and compute resources from problematic jobs. + +## Understanding Timeouts + +Timeouts in Bacalhau set limits on how long a job can run before being automatically terminated. They serve several important purposes: + +1. **Resource Protection**: Prevent runaway jobs from consuming resources indefinitely +2. **Fair Scheduling**: Ensure compute nodes remain available for other jobs +3. **Error Recovery**: Help identify and abort jobs that are stuck in infinite loops +4. **QoS Management**: Allow operators to define service levels for different job types + +## Timeout Types + +Bacalhau supports several types of timeouts: + +| Timeout Type | Description | +| ----------------- | ------------------------------------------------------ | +| Execution Timeout | Maximum time a job can spend in execution | +| Queue Timeout | Maximum time a job can wait for resources | +| Total Timeout | Overall maximum lifespan of a job including queue time | + +## For Job Submitters: Setting Timeouts + +When submitting jobs, you can specify timeouts to control job duration. + +### Command Line Specification + +```bash +# Set execution timeout to 30 minutes (1800 seconds) +bacalhau docker run --timeout 1800 ubuntu:latest -- + +# Set queue timeout (how long to wait for resources) +bacalhau docker run --queue-timeout 600 ubuntu:latest -- +``` + +### YAML Job Specification + +```yaml +# timeout-job.yaml +Type: batch +Count: 1 +Tasks: + - Name: main + Engine: + Type: docker + Params: + Image: ubuntu:latest + Parameters: + - sleep + - '300' + Timeouts: + ExecutionTimeout: 1800 # 30 minutes in seconds + QueueTimeout: 600 # 10 minutes in seconds +``` + +Submit using: + +```bash +bacalhau job run timeout-job.yaml +``` + +### Timeout Behavior + +Different timeout types affect job execution in different ways: + +- **Execution Timeout**: When reached, the current execution is terminated. If the Total Timeout hasn't been reached, the job may be rescheduled on another available node. + +- **Total Timeout**: When reached, the job is completely terminated across all nodes, no results are published, and the job status is marked as `Failed` with a timeout message. + +- **Queue Timeout**: When reached, a job waiting for resources will fail rather than continue waiting indefinitely. + +This approach provides resilience for intermittent failures while still protecting the system from problematic jobs. + +## For Node Operators: Configuring Timeout Limits + +Compute node operators can configure default and maximum timeout values for their nodes. + +### Node Timeout Configuration + +Node operators can set default and maximum timeouts in the `config.yaml` file: + +```yaml +# config.yaml +JobDefaults: + Batch: + Task: + Timeouts: + # Default timeout for batch jobs (1 hour) + ExecutionTimeout: '1h' + # Maximum allowed timeout (4 hours) + TotalTimeout: '4h' + Ops: + Task: + Timeouts: + # Default timeout for ops jobs (30 minutes) + ExecutionTimeout: '30m' + # Maximum allowed timeout (2 hours) + TotalTimeout: '2h' +``` + +### Configuration Format + +Timeout values should be specified with a numeric value followed by a time unit: + +- `s` for seconds +- `m` for minutes +- `h` for hours + +For example: `30m`, `2h`, or `3600s` + +### Job Type Support + +Timeouts can be configured for these job types: + +- Batch jobs +- Ops jobs + +Note: Timeout configuration is not available for Daemon and Service jobs, which are designed to run continuously. + +## Queue Timeouts + +Queue timeouts control how long a job will wait for suitable resources before failing: + +```bash +# Set queue timeout to 15 minutes +bacalhau docker run --queue-timeout 900 ubuntu -- +``` + +In YAML: + +```yaml +Timeouts: + QueueTimeout: 900 # seconds +``` + +This is useful when: + +- Your job has specific resource requirements +- You want to fail fast if resources aren't available +- You have time-sensitive workloads + +## Balancing Timeout Values + +Setting appropriate timeouts requires balancing several factors: + +1. **Job Duration**: How long your job actually needs to run +2. **Resource Usage**: Longer timeouts tie up resources for extended periods +3. **Network Stability**: Account for possible interruptions or slowdowns +4. **Data Size**: Consider the size of input/output data when setting timeouts + +## Best Practices + +1. **Set Realistic Timeouts**: Allow enough time for your job to complete, plus a buffer +2. **Use Queue Timeouts**: For time-sensitive jobs, set reasonable queue timeouts +3. **Test and Adjust**: Monitor job execution times and refine timeout values +4. **Document Timeout Requirements**: Include timeout information in job documentation +5. **Consider Resource Impact**: Shorter timeouts help prevent resource monopolization + +## Troubleshooting + +If your jobs are timing out unexpectedly: + +1. **Review Job Logs**: Check logs to understand where time is being spent +2. **Optimize Performance**: Look for ways to speed up your job +3. **Check Resource Allocation**: Insufficient resources can slow job execution +4. **Segment Large Jobs**: Break very large jobs into smaller, faster parts +5. **Verify Node Settings**: Node operators may have maximum timeout limits + +## docs/guides/webui.md + +# Web UI + +## Overview + +The Bacalhau WebUI offers an intuitive graphical interface for monitoring and managing your Bacalhau deployment. This guide provides comprehensive instructions for setting up, configuring, and utilizing the WebUI. + +## Getting Started + +### Enabling the WebUI + +The WebUI is disabled by default. To enable it: + +```bash +bacalhau config set WebUI.Enabled=true +``` + +:::note +You need to restart your Bacalhau node after enabling the WebUI for changes to take effect. +::: + +### Network Configuration + +By default, the WebUI listens on `0.0.0.0:8438` (all network interfaces). You can customize this: + +```bash +bacalhau config set WebUI.Listen=127.0.0.1:8438 # Local access only +# or +bacalhau config set WebUI.Listen=192.168.1.100:9000 # Custom IP and port +``` + +### Security Considerations + +When exposing the WebUI beyond localhost: + +- Consider setting up a reverse proxy with TLS +- Implement proper network security controls +- Be aware that the WebUI does not currently have authentication + +## Accessing the WebUI + +Once your Bacalhau node is running with the WebUI enabled, access it by opening a web browser and navigating to: + +``` +http://localhost:8438 +``` + +Or use the IP address and port you configured. + +![Bacalhau WebUI Dashboard](/img/webui-dashboard.png) + +## Main Features + +### Dashboard + +The Dashboard provides a quick overview of your Bacalhau deployment, including: + +- System status +- Resource utilization +- Recent job statistics +- Active node count + +### Jobs Management + +The Jobs page allows you to: + +- View all jobs with filtering and sorting options +- Monitor job status (Pending, Running, Completed, Failed) +- See job details including runtime, type, and error messages +- Access job-specific information and logs + +#### Job Details + +Click on any job ID to open the detailed view where you can: + +- View the complete job history and event timeline +- See execution details across all nodes +- Access real-time logs for debugging +- Examine resource utilization +- View job specifications and parameters + +### Node Management + +The Nodes page provides visibility into your cluster: + +- View all nodes in your Bacalhau deployment +- See node type (Compute, Requester, or Both) +- Monitor membership and connection status +- View available and total resources per node +- See node labels for job targeting + +#### Node Details + +Click on any node ID to access: + +- Detailed node status and health metrics +- Configuration settings +- Currently running and scheduled jobs +- Resource allocation and availability +- Connection history + +## Troubleshooting with the WebUI + +The WebUI is a valuable tool for diagnosing issues: + +- Check job logs for error messages +- Verify node availability and resource capacity +- Examine job constraints against available node labels +- Monitor resource utilization across the cluster + +## Integration with CLI + +The WebUI complements the Bacalhau CLI: + +- Use the CLI for job submission and automation +- Use the WebUI for monitoring and visual inspection +- Both tools access the same underlying API + +## docs/references/developers/running-locally.md + +# Running Locally with Devstack + +Bacalhau's devstack provides a quick way to spin up a local testing environment with multiple nodes. This is perfect for development, testing, or simply exploring Bacalhau's capabilities without setting up a full production environment. + +## Prerequisites + +- **Docker Engine**: Must be installed and running +- **Bacalhau**: Latest version installed + +## Installation + +If you haven't installed Bacalhau yet: + +```bash +curl -sL https://get.bacalhau.org/install.sh | bash +``` + +## Starting the Devstack + +Starting a local devstack is as simple as: + +```bash +bacalhau devstack +``` + +When initialization completes, you'll see a confirmation message: + +``` +Devstack is ready! +No. of requester only nodes: 1 +No. of compute only nodes: 3 +No. of hybrid nodes: 0 +``` + +## Using Your Devstack + +By default, devstack configures the orchestrator to run on the standard port (1234), so you can immediately use it without additional settings. Open a new terminal window and test your connection: + +```bash +bacalhau node list +``` + +You should see the nodes in your devstack: + +``` +ID TYPE APPROVAL STATUS LABELS +node-0 Requester APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-0 name=node-0 +node-1 Compute APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-1 name=node-1 +node-2 Compute APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-2 name=node-2 +node-3 Compute APPROVED CONNECTED Architecture=amd64 Operating-System=linux + env=devstack id=node-3 name=node-3 +``` + +## Running a Simple Job + +Submit a simple job to test your devstack: + +```bash +bacalhau docker run alpine echo "hello devstack" +``` + +Note that no publisher is needed for basic testing - Bacalhau will handle the job execution without storing results to any external location. + +## Advanced Configuration + +Devstack accepts the same configuration options as the `bacalhau serve` command. Here are some useful configuration examples: + +### Customizing Resource Limits + +Limit the CPU and memory allocation for compute nodes: + +```bash +bacalhau devstack -c Compute.AllocatedCapacity.CPU="50%" -c Compute.AllocatedCapacity.Memory="2Gi" +``` + +### Configuring Job Defaults + +Set default resource requirements for all batch jobs: + +```bash +bacalhau devstack -c JobDefaults.Batch.Task.Resources.CPU="250m" -c JobDefaults.Batch.Task.Resources.Memory="512Mb" +``` + +## Accessing the Web UI + +The Web UI is enabled by default in devstack for easier monitoring and management. Access it by opening your browser and navigating to: + +``` +http://localhost:8438 +``` + +The Web UI allows you to: + +- View all running and completed jobs +- Inspect node status and resources +- Monitor job execution details and logs + +## Stopping Devstack + +When you're done, simply press `Ctrl+C` in the terminal where devstack is running to shut everything down. + +## docs/references/developers/workload-onboarding/docker.md + +# Docker Containers + +This guide explains how to use existing Docker containers and create custom ones for your Bacalhau workloads. + +## Prerequisites + +1. [Install the Bacalhau client](/getting-started/installation.mdx) +2. [Docker](https://docs.docker.com/install/) (for both building custom containers and running on compute nodes) + +## Understanding Docker Workloads in Bacalhau + +Bacalhau uses a syntax that closely resembles Docker, allowing you to utilize the same containers. + +### Example: Docker Command + +```bash +docker run alpine echo "Hello from Docker" +``` + +### Equivalent Bacalhau Command + +```bash +bacalhau docker run alpine echo "Hello from Bacalhau" +``` + +### Getting Job Results + +```bash +# View job logs +bacalhau job logs JOB_ID + +# Get detailed job information +bacalhau job describe JOB_ID +``` + +:::warning[Requirements for Docker Containers] + +Containers must be published to a registry that is accessible to your Bacalhau nodes + +::: + +## Creating a Custom Container + +Let's walk through creating a simple custom Docker container for Bacalhau. + +### Step 1: Create Your Container Files + +Create a simple Dockerfile: + +```dockerfile +FROM alpine:latest +RUN echo '#!/bin/sh\necho "Hello from $1"' > /usr/local/bin/greet && \ + chmod +x /usr/local/bin/greet +``` + +### Step 2: Build and Test Your Container Locally + +Build your Docker image: + +```bash +docker build -t your-registry/simple-greeter:latest . +``` + +Test it locally: + +```bash +docker run --rm your-registry/simple-greeter:latest sh -c 'greet "Local Test"' +``` + +### Step 3: Push Your Container to a Registry + +```bash +# For multi-architecture support (recommended) +docker buildx build --platform linux/amd64,linux/arm64 --push -t your-registry/simple-greeter:latest . + +# For single architecture +docker push your-registry/simple-greeter:latest +``` + +## Running Your Custom Container on Bacalhau + +Run your container on Bacalhau: + +```bash +bacalhau docker run your-registry/simple-greeter:latest \ + sh -c 'greet "Bacalhau"' +``` + +View your job logs: + +```bash +bacalhau job logs JOB_ID +``` + +## docs/references/developers/workload-onboarding/wasm.md + +# WebAssembly (Wasm) + +Bacalhau supports running programs compiled to [WebAssembly (Wasm)](https://webassembly.org/). This guide explains how to run Wasm programs on Bacalhau. + +## Prerequisites + +1. [Install the Bacalhau client](/getting-started/installation.mdx) +2. A Wasm program compiled for WebAssembly System Interface (WASI) Snapshot 1 + +## Limitations + +- Supports only WASI Snapshot 1 compatible programs +- No multi-threading (WASI doesn't expose interfaces for it) + +## Running a Wasm Program + +### Basic Usage + +Run a local Wasm file: + +```bash +bacalhau wasm run program.wasm +``` + +Run a program with arguments: + +```bash +bacalhau wasm run program.wasm arg1 arg2 +``` + +Run with environment variables: + +```bash +bacalhau wasm run program.wasm -e VAR1=value1 -e VAR2=value2 +``` + +### Working with Input Data + +Provide input data from a URL: + +```bash +bacalhau wasm run program.wasm --input https://example.com/data.txt:/inputs/data.txt +``` + +Provide input data from a local file: + +```bash +bacalhau wasm run program.wasm --input ./local-file.txt:/inputs/file.txt +``` + +### Working with Output Data + +Wasm programs can write output to: + +- Standard output (stdout) +- The filesystem at `/outputs` (default output location) +- Custom output locations specified with the `-o` flag + +```bash +bacalhau wasm run program.wasm -o results:/custom/path +``` + +## Creating Wasm Programs for Bacalhau + +### 1. Use Filesystem Operations Instead of Network Calls + +Wasm programs on Bacalhau can't make network requests. Instead: + +- Read input data from the filesystem (typically `/inputs`) +- Write output data to the filesystem (typically `/outputs`) + +### 2. Compile Your Program for WASI + +You need to compile your program to be WASI-compatible. For example, with Rust: + +```bash +rustup target add wasm32-wasi +cargo build --target wasm32-wasi --release +``` + +The resulting Wasm file can be run on Bacalhau. + +## Viewing Job Results + +Check job status: + +```bash +bacalhau job list --id-filter JOB_ID +``` + +View job output: + +```bash +bacalhau job logs JOB_ID +``` + +See job details: + +```bash +bacalhau job describe JOB_ID +``` + +## docs/references/help-and-faq/faqs.md + +# FAQs + +## What is compute over data? + +Compute over data is an architecture that runs processing near the systems where data is generated or stored. It reduces unnecessary data transfer by sending workload instructions to the data location and returning only the required results. + +## What is Bacalhau? + +Bacalhau is an open-source distributed compute orchestration framework. An orchestrator schedules jobs, and compute nodes execute those jobs close to their input data across edge, on-premises, and cloud environments. + +## When should I use Bacalhau? + +Use Bacalhau when moving raw data to a central compute system is slow, expensive, unreliable, or restricted. Common workloads include distributed log processing, fleet operations, regional analytics, machine learning, and processing data at the edge. + +## Does Bacalhau require data to move to a central cluster? + +No. Bacalhau can schedule a workload on compute nodes near local or remote data sources. A job can process data in place and publish only its output, although the exact data movement depends on the input source, job specification, and selected compute node. + +## Is Bacalhau open source? + +Yes. The Bacalhau source code is available on [GitHub](https://github.com/bacalhau-project/bacalhau) under the [Apache 2.0 license](https://github.com/bacalhau-project/bacalhau/blob/main/LICENSE). + +## Which workload formats can Bacalhau run? + +Bacalhau supports Docker containers and WebAssembly modules. Existing containerized tools can usually run without being rewritten, while WebAssembly provides a lightweight execution option for compatible workloads. + +## How do I restrict what nodes my jobs run on? + +You can describe each node with labels in a `key=value` format, which can later be used as conditions for choosing nodes to run your jobs on: + +```bash +bacalhau config set Labels=NodeType=WebServer +``` + +For multiple labels, use comma-separated values: + +```bash +bacalhau config set Labels=foo=bar,baz=qaz +``` + +## How do I specify the orchestrator for my compute node? + +The `Compute.Orchestrator` field in the config tells the Bacalhau compute node where to connect: + +```bash +bacalhau config set Compute.Orchestrators=my-great-orchestrator.com +``` + +You can add protocol and port if needed: + +```bash +bacalhau config set Compute.Orchestrators=nats://my-great-orchestrator.com:4222 +``` + +## How do I enable the WebUI? + +By default, the WebUI for Bacalhau is disabled for security reasons. To enable it: + +```bash +bacalhau config set WebUI.Enabled=true +``` + +## Can I run non-Docker jobs? + +Yes! You can run programs using WebAssembly instead. Refer to the [WebAssembly onboarding documentation](../../references/developers/workload-onboarding/wasm.md) for instructions. + +## How do I see a job's progress while it's running? + +Use the job describe command with your job ID: + +```bash +bacalhau job describe b4491a4a-7b55-4fa7-a5af-80f3c99bc379 +``` + +If your job writes to stdout or stderr while running, you can also view the output with the `logs` command. + +## Can I stop a running job? + +Yes. Given a valid `job ID`, you can use the `stop` command to cancel the job and stop it from running: + +```bash +bacalhau job stop +``` + +## docs/references/help-and-faq/glossary.md + +# Glossary + +## Compute Node + +A Compute Node in the Bacalhau platform is responsible for executing jobs and producing results. These nodes are part of a private network that allows workload distribution and communication between computers. Compute Nodes handle various types of jobs based on their capabilities and resources. They work in tandem with Requester Nodes, which manage user requests, discover and rank Compute Nodes and monitor job lifecycles. + +## CLI (Command Line Interface) + +A CLI (Command Line Interface) in the Bacalhau platform is a tool that allows users to interact with Bacalhau through text-based commands entered into a terminal or command prompt. The CLI provides a set of commands for managing and executing various tasks on the platform, including submitting jobs, monitoring job status, managing nodes and configuring the environment. + +## Data Source + +A Data Source in Bacalhau refers to the origin of the data used in jobs. This can include various types of storage such as IPFS, S3, local files or URLs. Data sources are specified in the job configuration and are essential for providing the necessary input data for job execution. + +## Docker + +Docker in Bacalhau refers to the use of Docker containers to package and run applications. Docker provides a standardized unit of software, enabling users to create and manage containers efficiently. Bacalhau supports running Docker workloads, allowing users to utilize containerized applications seamlessly on the platform. + +## IPFS + +The InterPlanetary File System (IPFS) is a protocol and peer-to-peer network for storing and sharing data in a distributed file system. In Bacalhau, IPFS is used as a data source and a way to distribute job inputs and outputs, leveraging its decentralized nature for efficient data management. + +## Job + +A Job in the Bacalhau platform is a unit of work that a user submits for execution. Jobs can be simple tasks or complex workflows involving multiple steps. They are defined by specifications that include the job type, resources required and input/output data. Jobs are managed by Requester Nodes, which ensure they are distributed to appropriate Compute Nodes for execution. + +## Job Results + +Job Results are the output generated after a job has been executed on a Compute Node. These results can include processed data, logs and any other relevant output files. Results are often stored in specified locations such as IPFS or S3, allowing users to retrieve and utilize them after job completion. + +## Node + +A Node in the Bacalhau is a fundamental component of the network, responsible for executing and managing jobs. A Node is the Bacalhau entity installed Nodes can be classified into different types based on their roles, such as Compute Nodes and Requester Nodes. Each node operates as part of a decentralized network, allowing distributed processing and resource management. + +## Node Management + +Node Management in Bacalhau involves configuring and maintaining the nodes within the network, including both Compute Nodes and Requester Nodes. This includes tasks like onboarding new nodes, managing node resources, setting access controls and ensuring nodes meet operational standards for job execution. + +## Network + +In the context of the Bacalhau, a Network refers to the interconnected system of nodes that collaborate to execute jobs, manage data and maintain communication. This network is decentralized, meaning it does not rely on a central authority, which enhances its robustness, scalability and efficiency. + +## Network Specification + +The Network Specification in Bacalhau defines the network requirements and settings for job execution. This includes configurations for network access, data transfer protocols and connectivity between nodes. Proper network specification ensures that jobs can communicate effectively and access necessary resources. + +## Workload Onboarding + +Workload Onboarding in Bacalhau is the process of preparing and integrating different types of workloads for execution on the platform. This involves setting up environments for various programming languages, configuring containers and ensuring workloads are optimized for execution across the distributed network of Compute Nodes. + +## WebAssembly (WASM) + +WebAssembly (WASM) in Bacalhau is a binary instruction format for a stack-based virtual machine. WASM is designed for safe and efficient execution, making it a suitable target for compilation from high-level languages. Bacalhau supports running WASM workloads, enabling efficient execution of lightweight and portable code. + +## Requestor Node + +A Requester Node in the Bacalhau platform is responsible for handling user requests, discovering and ranking Compute Nodes, forwarding jobs to these nodes and monitoring the lifecycle of the jobs. Requester Nodes play a crucial role in managing the flow of tasks and ensuring they are executed efficiently by the appropriate Compute Nodes in the network. + +## S3 + +Amazon Simple Storage Service (S3) is a scalable object storage service. Bacalhau supports S3 as a data source, allowing users to store and retrieve input and output data for jobs. S3's integration with Bacalhau provides robust and reliable storage options for large-scale data processing tasks. + +## docs/references/help-and-faq/troubleshooting.md + +# Troubleshooting + +This guide provides solutions for common issues encountered by Bacalhau users. By understanding these troubleshooting scenarios, you'll be able to create more reliable jobs and workflows. + +## What You'll Learn + +- How to diagnose and resolve common Bacalhau job issues +- Strategies for debugging stuck, failed, or misbehaving jobs +- Best practices to prevent common problems + +## Job Lifecycle Issues + +### Jobs Stuck in Pending State + +One of the most common issues users encounter is jobs remaining in the "Pending" state and never executing. + +### Possible Causes + +- **No available nodes**: No compute nodes are connected to the orchestrator +- **Resource constraints too high**: Requesting more CPU, memory, or GPU than any available node can provide +- **Mismatched node selector**: Job requirements don't match available node capabilities +- **Network partitioning**: Orchestrator can't communicate with compute nodes + +### Diagnosis + +Check the job status and specifications for clues: + +```bash +bacalhau job describe +# For more detailed information in YAML format +bacalhau job describe --output yaml +``` + +Look for status messages that might indicate scheduling issues. + +Check available compute nodes: + +```bash +bacalhau node list +``` + +Ensure there are active compute nodes with sufficient resources. + +### Solutions + +1. **Reduce resource requests**: Lower CPU, memory, or GPU requirements +2. **Add more compute nodes**: Add capacity to your cluster +3. **Check network connectivity**: Ensure nodes can communicate with each other +4. **Modify job requirements**: Adjust constraints to match available resources + +## Input Data Access Issues + +Problems accessing or mounting input data are another common source of failures. + +### Possible Causes + +- **Wrong path or URL**: Incorrect or inaccessible source location +- **Missing credentials**: No or invalid authentication for S3 or private URLs +- **Network limitations**: Compute node can't reach data source +- **Path mapping errors**: Incorrect source-to-destination mapping + +### Diagnosis + +Check job specs and status: + +```bash +bacalhau job describe --output yaml +``` + +If the job started but failed during execution, check logs: + +```bash +bacalhau job logs +``` + +Look for messages like "file not found" or "access denied". + +### Solutions + +1. **Validate paths**: Double-check that source paths, URLs, or S3 buckets exist and are accessible +2. **Check credentials**: Ensure proper environment variables or configuration for authenticated sources +3. **Test connectivity**: Verify the compute node can reach the data source +4. **Local testing**: Test data access locally before running on Bacalhau + +Example of corrected input mounting: + +```bash +# INCORRECT (missing file) +bacalhau docker run --input /path/does/not/exist:/data ubuntu:latest -- cat /data/file.txt + +# CORRECT +bacalhau docker run --input /path/that/exists:/data ubuntu:latest -- cat /data/file.txt +``` + +## No Output Found + +Jobs complete successfully, but expected output files are missing. + +### Possible Causes + +- **Wrong output path**: Not writing to the `/outputs` directory +- **Command errors**: The job ran but the command failed to produce output +- **Permission issues**: Container user can't write to output location +- **Publisher configuration**: Publisher not configured correctly + +### Diagnosis + +Check job specification and execution details: + +```bash +bacalhau job describe --output yaml +``` + +If the job executed, check logs for clues about what the job did: + +```bash +bacalhau job logs +``` + +Verify your job actually wrote to the `/outputs` directory. + +### Solutions + +1. **Use absolute paths**: Always use absolute paths in your commands +2. **Write to `/outputs`**: Ensure your job writes to the `/outputs` directory specifically +3. **Add debugging**: Add commands to list directories and print current working directory +4. **Check permissions**: Ensure your process has permission to write to the output location + +### Examples + +```bash +# INCORRECT (writing to wrong location) +bacalhau docker run ubuntu:latest -- echo "Hello" > result.txt + +# CORRECT +bacalhau docker run ubuntu:latest -- bash -c 'echo "Hello" > /outputs/result.txt' +``` + +## Container and Resource Issues + +### Container Errors + +Issues with container execution or container image availability. + +#### Possible Causes + +- **Image not found**: The specified container image doesn't exist or is inaccessible +- **Command errors**: The command specified doesn't exist in the container +- **Resource limitations**: The container runs out of resources during execution +- **Exit codes**: The container process exits with a non-zero code + +#### Diagnosis + +Check job specification for container configuration: + +```bash +bacalhau job describe --output yaml +``` + +If the container started, check logs for execution errors: + +```bash +bacalhau job logs +``` + +Look for messages about image pulling or command execution. + +#### Solutions + +1. **Verify image exists**: Check that the image name is correct and accessible +2. **Test locally**: Try running the container locally with Docker first +3. **Check command**: Ensure the command exists in the container and has correct syntax +4. **Adjust resources**: Provide sufficient CPU, memory, and disk for your workload + +Example of corrected container image: + +```bash +# INCORRECT (typo in image name) +bacalhau docker run ubuntuu:latest -- echo "Hello" + +# CORRECT +bacalhau docker run ubuntu:latest -- echo "Hello" + +# CORRECT (with specific image version) +bacalhau docker run ubuntu:20.04 -- echo "Hello" +``` + +### Resource Exhaustion + +Jobs fail because they run out of resources during execution. + +#### Possible Causes + +- **Out of memory (OOM)**: Job exceeds allocated memory +- **Disk space exhaustion**: Job writes more data than allocated disk space +- **CPU thrashing**: Insufficient CPU allocation causes extreme slowdown +- **GPU memory errors**: CUDA out of memory errors for GPU jobs + +#### Diagnosis + +Check job specification and status: + +```bash +bacalhau job describe --output yaml +``` + +If the job executed, check logs for error messages: + +```bash +bacalhau job logs +``` + +Look for error messages about memory, disk space, or resource limits. + +#### Solutions + +1. **Increase resources**: Allocate more memory, CPU, or disk space +2. **Optimize code**: Reduce resource usage in your application +3. **Process in batches**: Break large workloads into smaller chunks +4. **Clean up temporary files**: Remove unneeded files during processing + +Example of increased resource allocation: + +```bash +# Increased memory allocation +bacalhau docker run --memory 4GB python:3.9 -- python memory_intensive_script.py + +# Increased disk space +bacalhau docker run --disk 20GB ubuntu:latest -- dd if=/dev/zero of=/outputs/large_file bs=1M count=15000 +``` + +## Command and Syntax Issues + +### Command Line Parsing Issues + +Problems related to how commands and arguments are passed to containers. + +### Possible Causes + +- **Missing separator**: No `--` between Bacalhau flags and container command +- **Quote handling**: Issues with shell quotes and argument passing +- **Special characters**: Problems with special characters in commands + +### Diagnosis + +Check the exact command being executed: + +```bash +bacalhau job describe --output yaml +``` + +Look at the command fields to see what was actually executed. + +### Solutions + +1. **Use the separator**: Always use `--` between Bacalhau flags and the container command +2. **Quote properly**: Be careful with nested quotes in shell commands +3. **Use bash -c**: For complex commands, wrap them in `bash -c '...'` +4. **Use yaml specs**: For very complex commands, use declarative YAML specifications + +Example of corrected command syntax: + +```bash +# INCORRECT (missing separator) +bacalhau docker run ubuntu:latest echo "Hello" + +# CORRECT +bacalhau docker run ubuntu:latest -- echo "Hello" + +# CORRECT (complex command) +bacalhau docker run ubuntu:latest -- bash -c 'for i in {1..5}; do echo "Number $i"; done > /outputs/result.txt' +``` + +## docs/references/operators/configuration-reference.md + +# Configuration Reference + +This document serves as the comprehensive reference for all Bacalhau configuration options. You can set these values using a YAML file or the command line. + +## Setting Configuration + +```bash +# Using a configuration file +bacalhau serve --config config.yaml + +# Using command-line options +bacalhau serve -c NameProvider=hostname -c Labels="region=us-west" + +# Combining approaches +bacalhau serve --config base-config.yaml -c WebUI.Enabled=true +``` + +## Example Configurations + +Below are example configurations for the two primary node types in Bacalhau. + +### Compute Node Example + +This example shows a configuration for a compute node that connects to orchestrators: + +```yaml +# Basic node identification +NameProvider: 'hostname' +Labels: + region: 'us-west' + environment: 'production' + +# Compute node settings +Compute: + # Enable compute capabilities + Enabled: true + + # Connect to these orchestrators + Orchestrators: + - 'nats://orchestrator-1.example.com:4222' + + # Local paths that can be mounted + AllowListedLocalPaths: + - '/data:/data:ro' # Read-only access + - '/outputs:/outputs:rw' # Read-write access + + # Security settings + Auth: + Token: 'secure-access-token' + + # Resource allocation + AllocatedCapacity: + CPU: '80%' # Dedicate 80% of CPU to jobs + Memory: '80%' # Dedicate 80% of memory to jobs + Disk: '80%' # Dedicate 80% of disk to jobs + GPU: '100%' # Dedicate all GPUs to jobs + +# Reject jobs with network access JobAdmissionControl: RejectNetworkedJobs: true @@ -882,800 +4337,1752 @@ The following table lists all configuration options in alphabetical order. | `WebUI.Enabled` | `false` | Enable web UI | | `WebUI.Listen` | `"0.0.0.0:8438"` | Address and port for web UI | +## docs/references/operators/gpu.md + +# GPU Workloads + +## Overview + +Bacalhau supports running jobs on GPUs out of the box. This guide covers how to set up and use GPUs with Bacalhau. + +## Supported GPU Types + +Bacalhau currently supports: + +- NVIDIA GPUs +- AMD GPUs +- Intel GPUs + +These are only available with the Docker executor. + +## Prerequisites + +### Basic Requirements + +1. [Docker](https://get.docker.com/) installed +2. Appropriate GPU drivers for your hardware + +### GPU-Specific Setup + +#### NVIDIA GPUs + +1. Install [NVIDIA GPU Drivers](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html) +2. Install [NVIDIA Container Toolkit (nvidia-docker2)](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) +3. Verify with `nvidia-smi` command + +#### AMD GPUs + +1. Install [AMD GPU drivers](https://www.amd.com/en/support/download/drivers.html) +2. Set up Docker for ROCm following [this guide](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/docker.html) +3. Verify with `rocm-smi` command + +#### Intel GPUs + +1. Install [Intel GPU drivers](https://www.intel.com/content/www/us/en/download-center/home.html) +2. Set up Docker for Intel GPUs following [this guide](https://github.com/Intel-Media-SDK/MediaSDK/wiki/Running-on-GPU-under-docker) +3. Verify with `xpu-smi` command + +## Running GPU Jobs + +### Command Line + +Use the `--gpu` flag to specify the number of GPUs your job requires: + +```bash +bacalhau docker run --gpu=1 nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi +``` + +### Using YAML + +You can also submit GPU jobs using YAML configuration: + +```yaml +Name: gpu-test-job +Type: batch +Count: 1 +Tasks: + - Engine: + Type: docker + Params: + Image: 'nvidia/cuda:11.6.2-base-ubuntu20.04' + Entrypoint: + - /bin/bash + Parameters: + - -c + - nvidia-smi && echo 'GPU is working!' + Name: TestGPU + ResourcesConfig: + CPU: '1' + Memory: '1GB' + Disk: '10GB' + GPU: '1' +``` + +## Important Notes + +- Your container must include the appropriate CUDA runtime and be compatible with the CUDA version on the node +- GPU access can be controlled using resource limits +- The Bacalhau network must have executor nodes with GPUs exposed + +## docs/references/operators/node-management.md + +# Node Management + +## Overview + +Bacalhau clusters consist of two types of nodes: + +1. **Orchestrator nodes**: Orchestrate jobs and manage the cluster +2. **Compute nodes**: Execute workloads and report resource availability + +This guide covers how orchestrator nodes manage compute node membership, monitor health, and maintain awareness of available resources across the cluster. + +## Node Registration and Approval + +Compute nodes register with orchestrator nodes when they join the cluster. By default, compute nodes are automatically approved when they join. However, orchestrator nodes can be configured to require manual approval for additional security. + +### Viewing Node Status + +To see all nodes in your cluster with their approval status: + +```shell +bacalhau node list + +ID TYPE APPROVAL STATUS +node-0 Requester APPROVED CONNECTED +node-1 Compute APPROVED HEALTHY +node-2 Compute APPROVED HEALTHY +node-3 Compute APPROVED HEALTHY +``` + +If manual approval is enabled, new compute nodes will show as `PENDING` until approved. + +### Approving and Rejecting Nodes + +To approve a compute node: + +```shell +bacalhau node approve node-1 +Ok +``` + +To reject a compute node: + +```shell +bacalhau node reject node-3 -m "Unauthorized node" +Ok +``` + +To permanently remove a node from the cluster: + +```shell +bacalhau node delete node-2 +``` + +## Monitoring Node Health + +Orchestrator nodes continuously monitor the health of compute nodes through a heartbeat mechanism. Compute nodes send heartbeats every 15 seconds by default. If a node fails to send heartbeats for longer than the configured disconnect timeout (1 minute by default), it will be marked as `UNHEALTHY` and eventually as `UNKNOWN` if it remains unresponsive. + +The health status affects job scheduling decisions, ensuring workloads are only assigned to healthy, responsive nodes. + +## Resource Reporting + +Compute nodes report several types of information to orchestrator nodes: + +1. **Static information**: Hardware details, architecture, and other fixed attributes (reported every minute by default) +2. **Resource availability**: Current CPU, memory, disk, and GPU availability +3. **Health status**: Heartbeat signals indicating the node is operational (sent every 15 seconds by default) + +This information enables intelligent job scheduling based on actual resource availability across the cluster. + +## Configuration Options + +### Compute Node Settings + +| Configuration Key | Description | Default | +| -------------------------------------- | --------------------------------------------- | ---------- | +| `Compute.Heartbeat.InfoUpdateInterval` | How often node static information is reported | 1 minute | +| `Compute.Heartbeat.Interval` | How often heartbeats are sent | 15 seconds | + +### Orchestrator Node Settings + +| Configuration Key | Description | Default | +| -------------------------------------------- | --------------------------------------------------------------------- | -------- | +| `Orchestrator.NodeManager.DisconnectTimeout` | Time after which a node without heartbeats is considered disconnected | 1 minute | +| `Orchestrator.NodeManager.ManualApproval` | Whether to require manual approval for compute nodes | `false` | + +Example configuration to enable manual approval in `config.yaml`: + +```yaml +Orchestrator: + NodeManager: + ManualApproval: true +``` + +## docs/references/operators/security/auth.md + +# Authentication & Authorization + +## Introduction + +Robust authentication and authorization mechanisms are essential for maintaining security while enabling seamless collaboration. As of Bacalhau 1.7 release, we introduced a significant overhaul to its authentication and authorization systems, offering more flexibility, improved security, and better integration with enterprise environments. + +## 1. Bacalhau Authentication + +With Bacalhau 1.7, we have introduced three distinct authentication paths, each designed to cater to different use cases and environments. The authentication paths are: + +1. **Basic HTTP Authentication** +2. **API Tokens Auth** +3. **Single Sign-On via OAuth 2.0** + +### 1.1 HTTP Basic Authentication + +The simplest approach leverages the time-tested HTTP Basic Authentication protocol, allowing users to access Bacalhau APIs using traditional username and password credentials. These credentials can be defined in the Node Configuration file, which offers two options for password storage: + +- _Plain text passwords for simplicity and ease of setup_ +- _Bcrypt-hashed passwords for enhanced security_ -## constraint +For CLI usage, users simply need to set the environment variables `BACALHAU_API_USERNAME` and `BACALHAU_API_PASSWORD`. For direct API calls, the standard Basic Authorization header with base64-encoded credentials can be used. -# Constraint +Below is a sample orchestrator config file that defines 3 users that can authenticate through basic auth. -A `Constraint` represents a condition that must be met for a compute node to be eligible to run a given job. Operators have the flexibility to manually define node labels when initiating a node using the bacalhau serve command. Additionally, Bacalhau boasts features like automatic resource detection and dynamic labeling, further enhancing its capability. +```yaml +Orchestrator: + Enabled: true +API: + Port: 1234 + Auth: + Users: + # User with plain text password + - Alias: Admin User + Username: admin + Password: secureAdminPassword + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['*'] -By defining constraints, you can ensure that jobs are scheduled on nodes that have the necessary requirements or conditions. + # User with limited permissions and plain text password + - Alias: Read Only User + Username: reader + Password: readerPassword + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:*'] -### `Constraint` Parameters: + # User with bcrypt hashed password + - Alias: Job Manager + Username: jobmanager + # This is a bcrypt password hash for the password "MySecretPassword" + Password: '$2a$10$3ZvxUe5OudgRIQQheomjMO/Ufx1Bb04SH/y0PXnR19oDRXNGps3r2' + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:job', 'write:job', 'read:node'] +``` -1. **Key**: The name of the attribute or property to check on the compute node. This could be anything from a specific hardware feature, operating system version, or any other node property. -2. **Operator**: Determines the kind of comparison to be made against the `Key`'s value, which can be: - 1. `in`: Checks if the Key's value exists within the provided list of values. - 2. `notin`: Ensures the Key's value doesn't match any in the provided list of values. - 3. `exists`: Verifies that a value for the specified Key is present, regardless of its actual value. - 4. `!`: Confirms the absence of the specified Key. i.e DoesNotExist - 5. `gt`: Assesses if the Key's value is greater than the provided value. - 6. `lt`: Assesses if the Key's value is less than the provided value. - 7. `=` & `==`: Both are used to compare the Key's value for an exact match with the provided value. - 8. `!=`: Ensures the Key's value is not the same as the provided value. -3. **Values (optional)**: A list of values that the node attribute, specified by the `Key`, is compared against using the `Operator`. This is not needed for operators like `exists` or `!`. +In the above configuration: -### Example: +1. The first two users have plain text passwords, while the third uses a BCRYPT hashed password for added security. +2. We have three users with different permission levels. These capabilities will be covered in detail in the authorization section below. -Consider a scenario where a job should only run on nodes with a GPU and an operating system version greater than `2.0`. The constraints for such a requirement might look like: +To help users and operators generate secure hashed passwords, a convenient CLI command was added that generates a BCRYPT hash of a password of your choosing. This command takes a plain string and converts it into a BCRYPT hash. -```yaml -constraints: - - key: "hardware.gpu" - operator: "exists" - - key: "Operating-System" - operator: "=" - values: ["linux"] - - key: "region" - operator: "in" - values: ["eu-west-1,eu-west-2"] +```shell +bacalhau auth hash-password ``` -In this example, the first constraint checks if the node has a GPU, the second constraint ensures the OS is linux, and deployed in eu-west-1 or eu-west-2\`. - -### Notes: +To use this configuration with the Bacalhau CLI, you would set the following environment variables: -1. Constraints are evaluated as a logical AND, meaning all constraints must be satisfied for a node to be eligible. -2. Using too many specific constraints can lead to a job not being scheduled if no nodes satisfy all the conditions. -3. It's essential to balance the specificity of constraints with the broader needs and resources available in the cluster. +```shell +# For admin access +# For read-only access -## debugging-the-agent +# For job management +# Please note: Set the password env variable to the actual password, +# not the hashed password. -# Debugging the Agent +``` -The Bacalhau `agent` is the process your client directly communicates with. By default, this is running on `localhost:1234`, but can be changed using `--api-host` and `--api-port` flags. For local testing or small clusters, you'll frequently need to check the agent's health and examine its configuration. +For direct API calls, for example by using curl, you would encode the credentials in base64: -## Checking Agent Health and Version +```shell +# For admin (base64 of "admin:secureAdminPassword") +curl -X GET -H "Authorization: Basic YWRtaW46c2VjdXJlQWRtaW5QYXNzd29yZA==" "http://orchestrator:1234/api/v1/orchestrator/nodes" -When troubleshooting connectivity or verifying your setup: +# For reader (base64 of "reader:readerPassword") +curl -X GET -H "Authorization: Basic cmVhZGVyOnJlYWRlclBhc3N3b3Jk" "http://orchestrator:1234/api/v1/orchestrator/nodes" -```bash -bacalhau agent alive +# For Job Manager (base64 of "jobmanager:MySecretPassword") +curl -X GET -H "Authorization: Basic am9ibWFuYWdlcjpNeVNlY3JldFBhc3N3b3Jk" "http://orchestrator:1234/api/v1/orchestrator/nodes" ``` -This returns a simple health check response, confirming your client can communicate with the agent. +--- -To check which version you're running: +### 1.2 Authentication through API Tokens -```bash -bacalhau agent version -``` +For applications and scenarios where password-based authentication isn't ideal, Bacalhau 1.7 introduces API token support. Instead of username and password pairs, users can generate and use API keys as bearer tokens in authorization headers. -This displays version information helpful when verifying installations, troubleshooting issues, or reporting bugs. +Configuration is straightforward – API keys are defined in the orchestrator config under user profiles. To use them with the Bacalhau CLI, users set the `BACALHAU_API_KEY` environment variable. For direct API access, the token is included in the Authorization header using the Bearer scheme. -## Inspecting Agent Configuration +Please note that API Keys are opaque tokens. -During setup or when diagnosing issues: +Here's a sample configuration for API tokens in Bacalhau: -```bash -bacalhau agent config +```yaml +Orchestrator: + Enabled: true +API: + Port: 1234 + Auth: + Users: + # Administrator API token with full access + - Alias: Admin API Token + APIKey: 8F42A91D7C6E4B3DA5E9F8C12B76D3A4 + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['*'] + + # Read-only API token + - Alias: Monitoring Token + APIKey: C5D8E3F1A7B94026895C1D4E3F2A0B78 + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:*'] + + # Job management API token + - Alias: CI/CD Pipeline Token + APIKey: 2E8D7F5B3A9C41608D2E6B7F4A5C3D9E + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:job', 'write:job', 'read:node'] + + # Agent management API token + - Alias: Agent Management Token + APIKey: 1A3B5C7D9E0F2G4H6I8J0K2L4M6N8P0 + # The Capabilities section will be covered + # in the Authorization section below + Capabilities: + - Actions: ['read:agent', 'write:agent'] ``` -This returns the complete configuration in YAML format, showing network parameters, resource limits, and admission control settings. Use this when jobs aren't being accepted or resources aren't properly allocated. +In this configuration: -## Examining Node Details +1. We have four API tokens with different permission levels: + - An administrator token with full access to all capabilities + - A monitoring token with read-only access to all resources + - A CI/CD pipeline token that can view nodes and has full control over jobs + - An agent management token that has full control over agents +2. Each token has a unique, randomly generated API key. You should generate strong, unique keys for your production environment using a secure random generator. -To get detailed information about the agent's node: +Please note that API keys do not support BCRYPT hashing. -```bash -bacalhau agent node -``` +To use these API tokens with the Bacalhau CLI, you would set the following environment variable: -This shows information about node identity, available resources, and supported features. Use this when setting up a new node or troubleshooting job scheduling issues. +```shell -## Working with Remote Agents +``` -To connect to a remote agent: +For direct API calls, for example by using curl, you would use the Bearer token authentication scheme: -```bash -bacalhau agent version --api-host cluster.example.com --api-port 8080 +```shell +curl -X GET -H "Authorization: Bearer 8F42A91D7C6E4B3DA5E9F8C12B76D3A4" "http://orchestrator:1234/api/v1/orchestrator/nodes" ``` -This pattern works with all agent commands and is useful for monitoring production clusters or diagnosing connectivity issues between network components. +--- +### 1.3 Single Sign-On via OAuth 2.0 -## docker +Perhaps the most significant addition since Bacalhau 1.7 is the support for OAuth 2.0 using the Device Code Flow. This enables Bacalhau to integrate seamlessly with enterprise identity providers such as Okta, Auth0, Azure Active Directory, and Google SSO. -# Docker Containers +This approach eliminates the need to define users directly in Bacalhau's configuration, instead delegating user management to the identity provider – a considerable advantage in corporate environments with existing identity infrastructure. -This guide explains how to use existing Docker containers and create custom ones for your Bacalhau workloads. +The configuration process involves specifying OAuth 2.0 endpoints, client IDs, and desired scopes. When users need to authenticate, they run `bacalhau auth sso login`, which presents a device code and URL. After completing authentication through their browser, they receive a JWT token that's automatically used for subsequent API calls (_this token exchange will be done seamlessly and the user is not required to perform any extra actions_). -## Prerequisites +Here's a sample configuration for OAuth 2.0 SSO in Bacalhau: -1. [Install the Bacalhau client](https://bacalhau.org/docs/getting-started/installation/) -2. [Docker](https://docs.docker.com/install/) (for both building custom containers and running on compute nodes) +```yaml +Orchestrator: + Enabled: true +API: + Port: 1234 + Auth: + Oauth2: + # Identity provider details, those are names for your own reference only + ProviderId: 'okta' + ProviderName: 'Okta SSO' -## Understanding Docker Workloads in Bacalhau + # OAuth 2.0 endpoints - Device Code Endpoint + DeviceAuthorizationEndpoint: 'https://your-domain.okta.com/oauth2/v1/device/authorize' + # The endpoint used to get the JWT token + TokenEndpoint: 'https://your-domain.okta.com/oauth2/v1/token' + # The Expected issuer, should match the issuer in the JWT token + Issuer: 'https://your-domain.okta.com' + # The JWKS URI + JWKSUri: 'https://your-domain.okta.com/.well-known/jwks.json' -Bacalhau uses a syntax that closely resembles Docker, allowing you to utilize the same containers. + # Client details + DeviceClientId: '0ab2c3d4e5f6g7h8i9j0' + # CLI polling interval to check if the device code was approved + PollingInterval: 5 -### Example: Docker Command + # Audience: Expected "aud" in the JWT token + Audience: 'https://bacalhau.your-company.com/api' -```bash -docker run alpine echo "Hello from Docker" + # Scopes requested in the token exchange + Scopes: + - 'openid' + - 'profile' + - 'email' ``` -### Equivalent Bacalhau Command +For this to setup work properly: -```bash -bacalhau docker run alpine echo "Hello from Bacalhau" +1. Register an OAuth 2.0 application in your identity provider (Okta, Auth0, Azure AD, etc.) +2. Configure it to support the **Device Code Flow**. Make sure the provider supports OAuth2 Device code flow. +3. Set up appropriate roles or groups in your identity provider to map to Bacalhau permissions + +The permission mapping would happen in your identity provider. For example, in Okta you might create: + +- A "Bacalhau Admins" group with permissions: `["*"]` +- A "Bacalhau Readers" group with permissions: `["read:*"]` +- A "Bacalhau Job Managers" group with permissions: `["read:job", "write:job", "read:node"]` + +These permissions should be included in the JWT token under the custom claim `permissions`. + +To authenticate using this setup, users would run: + +```shell +# Login +bacalhau auth sso login + +# Logout +bacalhau auth sso logout ``` -### Getting Job Results +Then the CLI would display something like this: -```bash -# View job logs -bacalhau job logs JOB_ID +```shell +To login, please: + +1. Open this URL in your browser: /usr/local/bin/greet && \ - chmod +x /usr/local/bin/greet +For example, a developer could have an SSO session for regular work but quickly switch to using an API key for testing by simply setting the appropriate environment variable. When the environment variable is unset, Bacalhau will fall back to the next available authentication method, typically returning to the previously established SSO session if available. + +```shell +# Inspect current authentication status +bacalhau auth info ``` -### Step 2: Build and Test Your Container Locally +## 2. Granular Authorization in Bacalhau 1.7+ -Build your Docker image: +As of Bacalhau 1.7, we introduced a sophisticated authorization system built on a resource and capability model that brings fine-grained access control to the platform. This system divides API actions into specific combinations of resources and capabilities, enabling administrators to implement the principle of least privilege across their Bacalhau deployments. -```bash -docker build -t your-registry/simple-greeter:latest . -``` +### 2.1 Resource and Capability Framework -Test it locally: +The permission structure is organized around two key dimensions: -```bash -docker run --rm your-registry/simple-greeter:latest sh -c 'greet "Local Test"' -``` +- **Resources**: The objects being accessed or + modified (Nodes, Jobs, and Agents) +- **Capabilities**: The types of operations + being performed (Read and Write) -### Step 3: Push Your Container to a Registry +This creates a permission taxonomy following the pattern of `action:resource`, where permissions can be assigned individually or using wildcards for broader access grants. -```bash -# For multi-architecture support (recommended) -docker buildx build --platform linux/amd64,linux/arm64 --push -t your-registry/simple-greeter:latest . +### 2.2 Core Permission Set -# For single architecture -docker push your-registry/simple-greeter:latest -``` +Bacalhau supports the following core permissions: -## Running Your Custom Container on Bacalhau +1. `"*"` - The master permission granting full + access to all capabilities across all resources +2. `"read:*"` - Provides read-only access across + all resource types +3. `"write:*"` - Grants write access to all resource + types +4. `"read:node"` - Allows viewing node information +5. `"write:node"` - Permits actions on the node +6. `"read:job"` - Enables querying job status, + details, and logs, etc +7. `"write:job"` - Allows submitting, canceling, + and managing job execution +8. `"read:agent"` - Provides access to agent information + via `"bacalhau agent"` commands +9. `"write:agent"` - Any write actions on the agent. -Run your container on Bacalhau: +### 2.3 Creating Role-Based Access Patterns -```bash -bacalhau docker run your-registry/simple-greeter:latest \ - sh -c 'greet "Bacalhau"' -``` +These permissions can be combined to create practical access patterns for different user roles and service accounts: -View your job logs: +- **Administrator**: `["*"]` - Full access to all system functions +- **Read-only Analyst**: `["read:*"]` - Can view but not modify any resources +- **Job Manager**: `["read:job", "write:job", "read:node"]` - Complete control over jobs with visibility into nodes +- **Monitoring Service**: `["read:node", "read:job"]` - View-only access for system monitoring +- CI/CD Pipeline: `["write:job", "read:job"]` - Can submit and monitor jobs but can't access node details -```bash -bacalhau job logs JOB_ID -``` +### 2.4 Benefits for Different User Profiles +These authentication enhancements offer distinct advantages for different types of Bacalhau users: -## docker +- **Individual developers** benefit from the simplicity of Basic Auth for quick setup and experimentation +- **DevOps teams** can leverage API tokens for automation, CI/CD pipelines, and service-to-service communication +- **Enterprise environments** gain seamless integration with existing identity infrastructure through OAuth 2.0 +- **Security teams** appreciate the granular permission model that enforces the principle of least privilege -# Docker +## 3. Backward Compatibility with Previous Authentication Methods -Docker Engine is one of the execution engines supported in Bacalhau. It allows users to run tasks inside Docker containers, offering an isolated and consistent environment for execution. Below are the parameters to configure the Docker Engine. +Bacalhau 1.7 maintains backward compatibility with the previous authentication mechanism based on Open Policy Agent, ensuring a smooth transition path for existing deployments. -## `Docker` Engine Parameters +Users can continue to use their established OPA policies without immediate migration to the new authentication paths. However, it's important to note that while backward compatibility is preserved, mixing the old and new authentication methods within the same deployment is not supported. -* **Image** `(string: )`: Specifies the Docker image to use for task execution. It should be an image that can be pulled by Docker. -* **Entrypoint** `(string[]: )`: Allows overriding the default entrypoint set in the Docker image. Each string in the array represents a segment of the entrypoint command. -* **Parameters** `(string[]: )`: Additional command-line arguments to be included in the container’s startup command, appended after the entrypoint. -* **EnvironmentVariables** `(string[]: )`: Sets environment variables within the Docker container during task execution. Each string should be formatted as `KEY=value`. -* **WorkingDirectory** `(string: )`: Sets the path inside the container where the task executes. If not specified, it defaults to the working directory defined in the Docker image. +Organizations must choose either to continue using the Open Policy Agent approach exclusively or to migrate fully to the new authentication system with Basic Auth, API Tokens, or OAuth 2.0. -### Example +This clean separation prevents potential security inconsistencies and configuration conflicts that could arise from overlapping authentication mechanisms. -Here’s an example of configuring the Docker Engine within a job or task using YAML: +For organizations planning to migrate, the Bacalhau team recommends first setting up the new authentication in a test environment, validating access patterns and permissions, and then performing a complete cutover rather than attempting a gradual or partial migration. This approach ensures security integrity throughout the transition while still providing flexibility in timing the upgrade to the enhanced authentication capabilities. -```yaml -Engine: - Type: "Docker" - Params: - Image: "ubuntu:20.04" - Entrypoint: - - "/bin/bash" - - "-c" - Parameters: - - "echo Hello, World!" - EnvironmentVariables: - - "MY_ENV_VAR=myvalue" - WorkingDirectory: "/app" -``` +## docs/references/operators/security/node-tls.md -In this example, the task will be executed inside an Ubuntu 20.04 Docker container. The entrypoint is overridden to execute a bash shell that runs an echo command. An environment variable MY\_ENV\_VAR is set with the value myvalue, and the working directory inside the container is set to /app. +# Inter-Nodes TLS +## Introduction -## downloading-results +Secure communication between Bacalhau Compute Nodes and Orchestrators is crucial, especially when operating across untrusted networks. This guide demonstrates how to implement TLS encryption to protect inter-node communication and ensure data security. -# Downloading Results +## Concept -After a Bacalhau job completes, you'll need to retrieve the output files generated by your job. This guide explains the basics of downloading job results. +Bacalhau Compute Nodes initiate communication with the orchestrator through NATS, a high-performance messaging system. The orchestrator node hosts the NATS server, which compute nodes automatically connect to upon startup. -## What You'll Learn +As a distributed system, Bacalhau supports TLS encryption to secure these communication channels. While this guide demonstrates the implementation using self-signed certificates, the same principles apply when using company-issued or publicly trusted certificates. -- How to specify output paths in your jobs -- How to retrieve job results using the CLI +## Procedure -## Getting Job Results +### Step 1: Generate Root Certificate Authority -To download the results of a completed job: +In this step, we'll guide you through generating the required certificates, focusing on self-signed certificate creation. -```bash -bacalhau job get -``` +First, we need to generate a self-signed root certificate authority (CA) certificate, which will be used to sign all subsequent certificates. You can use standard tools like `openssl` or [`mkcert`](https://github.com/FiloSottile/mkcert) for this process. We recommend setting a long expiration date for the root CA and securely backing up both the certificate and its private key. -This command downloads all outputs from the job to your current directory. +This step will produce two essential components: the self-signed root CA certificate and its corresponding private key. -### Specifying an Output Directory +### Step 2: Generate NATS Server Certificate -You can specify where to save the downloaded results: +In this step, we'll generate the certificate that enables TLS connections for the NATS server. -```bash -bacalhau job get --output-dir /path/to/save -``` +First, identify the DNS name or IP address used to connect to the orchestrator. This is typically found in the compute nodes' configuration under the "Orchestrators" field. For example: -### Download Timeout Setting +- If your config specifies `nats://10.0.5.16:4222,` use the IP address `10.0.5.16` +- If your config specifies `nats://my-bacalhau-orchestrator-node:4222`, use the DNS name `my-bacalhau-orchestrator-node` -For larger downloads, you can adjust the timeout: +Next, generate a server certificate signed by the Root CA (created in step 1). This certificate must include your chosen IP address or DNS name in its Subject Alternative Name field. Additionally, always include the IP address "127.0.0.1" in the Subject Alternative Names to support communications initiated from the orchestrator node itself. -```bash -bacalhau job get --download-timeout-secs 10m -``` +This step will produce two critical files: the server certificate and its corresponding private key. Store both files securely in a protected location. -## Specifying Job Outputs and Publisher +### Step 3: Start Nodes with Certificates -When submitting a job, you need to define which files or directories should be collected as outputs, and where those outputs should be published. +In this step, we'll configure both orchestrator nodes and compute nodes with the generated certificates. -### Using Command Line +First, copy the following files to the orchestrator node: -For Docker jobs, use the `--output` flag to define outputs and the `--publisher` flag to specify where to publish the results: +- The root certificate from step 1 (certificate file only, not the private key) +- The server certificate from step 2 +- The server's private key from step 2 -```bash -bacalhau docker run \ - --output results:/outputs \ - --publisher s3://my-bucket/results-folder \ - ubuntu:latest \ - -- echo "Hello, World!" > /outputs/hello.txt +The orchestrator node should now have three files: the root certificate, server certificate, and server key file. Next, enable TLS support by adding the TLS configuration section to the orchestrator's configuration file. Example: + +```yaml +NameProvider: 'uuid' +API: + Port: 1234 +Orchestrator: + Enabled: true + Auth: + Token: 'i_am_very_secret_token' + TLS: + ServerCert: '/path/to/cert' + ServerKey: '/path/to/key' + CACert: '/path/to/ca-cert' + ServerTimeout: 15 ``` -This tells Bacalhau to: +Next, prepare each compute node by copying the root certificate file (excluding the private key) to the node. Then, update each compute node's configuration to trust this certificate authority for secure server connections. Example: -1. Collect everything in the `/outputs` directory of the container -2. Publish it to the specified S3 bucket and path -3. Make it available for download with `bacalhau job get` +```yaml +NameProvider: 'uuid' +API: + Port: 1234 +Compute: + Enabled: true + Orchestrators: + - nats://my-bacalhau-orchestrator-node:4222 + Auth: + Token: 'i_am_very_secret_token' + TLS: + CACert: '/path/to/ca-cert' +``` -### Using Declarative Submission +After restarting the Bacalhau processes on all nodes, secure TLS communication will be established for all node-to-node interactions. -You can also define outputs in a job specification file: +## docs/specifications/job/README.md + +# Job Specification + +A `Job` represents a discrete unit of work that can be scheduled and executed. It carries all the necessary information to define the nature of the work, how it should be executed, and the resources it requires. ```yaml Type: batch Count: 1 +Priority: 50 +Meta: + version: "1.2.5" +Labels: + project: "my-project" +Constraints: + - Key: Architecture + Operator: '=' + Values: + - arm64 + - Key: region + Operator: '=' + Values: + - us-west-2 Tasks: - - Name: main - Engine: - Type: docker - Params: - Image: python:3.9 - Entrypoint: - - 'python' - - '-c' - - "import os; os.makedirs('/outputs', exist_ok=True); open('/outputs/result.txt', 'w').write('Analysis complete!')" - Publisher: - Type: s3 - Params: - Bucket: my-bucket - Key: results-folder - ResultPaths: - - Name: results - Path: /outputs -``` - -Submit this job using: - -```bash -bacalhau job run job-spec.yaml + #... ``` -### Multiple Output Paths +## `job` Parameters -You can specify multiple output paths in a single job: +* **Name** `(string : )`: A logical name to refer to the job. Defaults to job ID. +* **Namespace** `(string: "default")`: The namespace in which the job is running. `ClientID` is used as a namespace in the public demo network. +* **Type** `(string: )`: The type of the job, such as `batch`, `ops`, `daemon` or `service`. You can learn more about the supported jobs types in the [Job Types](type.md) guide. +* **Priority** `(int: 0`): Determines the scheduling priority. +* **Count** `(int: )`:: Task associated with the job, which defines a unit of work within the job. Today we are only supporting single task per job, but with future plans to extend this. -```bash -bacalhau docker run \ - --output logs:/var/log \ - --output results:/outputs \ - --publisher s3://my-bucket/results-folder \ - ubuntu:latest \ - -- -``` +## Server-Generated Parameters -## Downloaded Results Structure +The following parameters are generated by the server and should not be set directly. -After running `bacalhau job get`, the results will be organized in a directory structure like this: +* **ID** `(string)`: A unique identifier assigned to this job. It's auto-generated by the server and should not be set directly. Used for distinguishing between jobs with similar names. +* **State** `(`[`State`](../other/state.md)`)`: Represents the current state of the job. +* **Version** `(int)`: A monotonically increasing version number incremented on job specification update. +* **Revision** `(int)`: A monotonically increasing revision number incremented on each update to the job's state or specification. +* **CreateTime** `(int)`: Timestamp of job creation. +* **ModifyTime** `(int)`: Timestamp of last job modification. -``` -. -├── job-j-6bafb8d4 -│ ├── exitCode -│ ├── outputs -│ │ └── file1 -│ ├── stderr -│ └── stdout -``` +## docs/specifications/job/constraint.md -The directory structure includes: +# Constraint -- `exitCode`: Contains the exit code of the job -- `outputs`: Contains all the files from the job's specified output directories -- `stderr`: Captures any error output from the job -- `stdout`: Captures the standard output from the job +A `Constraint` represents a condition that must be met for a compute node to be eligible to run a given job. Operators have the flexibility to manually define node labels when initiating a node using the bacalhau serve command. Additionally, Bacalhau boasts features like automatic resource detection and dynamic labeling, further enhancing its capability. +By defining constraints, you can ensure that jobs are scheduled on nodes that have the necessary requirements or conditions. -## faqs +### `Constraint` Parameters: -# FAQs +1. **Key**: The name of the attribute or property to check on the compute node. This could be anything from a specific hardware feature, operating system version, or any other node property. +2. **Operator**: Determines the kind of comparison to be made against the `Key`'s value, which can be: + 1. `in`: Checks if the Key's value exists within the provided list of values. + 2. `notin`: Ensures the Key's value doesn't match any in the provided list of values. + 3. `exists`: Verifies that a value for the specified Key is present, regardless of its actual value. + 4. `!`: Confirms the absence of the specified Key. i.e DoesNotExist + 5. `gt`: Assesses if the Key's value is greater than the provided value. + 6. `lt`: Assesses if the Key's value is less than the provided value. + 7. `=` & `==`: Both are used to compare the Key's value for an exact match with the provided value. + 8. `!=`: Ensures the Key's value is not the same as the provided value. +3. **Values (optional)**: A list of values that the node attribute, specified by the `Key`, is compared against using the `Operator`. This is not needed for operators like `exists` or `!`. -## How do I restrict what nodes my jobs run on? +### Example: -You can describe each node with labels in a `key=value` format, which can later be used as conditions for choosing nodes to run your jobs on: +Consider a scenario where a job should only run on nodes with a GPU and an operating system version greater than `2.0`. The constraints for such a requirement might look like: -```bash -bacalhau config set Labels=NodeType=WebServer +```yaml +constraints: + - key: "hardware.gpu" + operator: "exists" + - key: "Operating-System" + operator: "=" + values: ["linux"] + - key: "region" + operator: "in" + values: ["eu-west-1,eu-west-2"] ``` -For multiple labels, use comma-separated values: +In this example, the first constraint checks if the node has a GPU, the second constraint ensures the OS is linux, and deployed in eu-west-1 or eu-west-2\`. -```bash -bacalhau config set Labels=foo=bar,baz=qaz -``` +### Notes: -## How do I specify the orchestrator for my compute node? +1. Constraints are evaluated as a logical AND, meaning all constraints must be satisfied for a node to be eligible. +2. Using too many specific constraints can lead to a job not being scheduled if no nodes satisfy all the conditions. +3. It's essential to balance the specificity of constraints with the broader needs and resources available in the cluster. -The `Compute.Orchestrator` field in the config tells the Bacalhau compute node where to connect: +## docs/specifications/job/input-source.md -```bash -bacalhau config set Compute.Orchestrators=my-great-orchestrator.com -``` +# Input Source -You can add protocol and port if needed: +An `InputSource` defines where and how to retrieve specific artifacts needed for a [`Task`](task.md), such as files or data, and where to mount them within the task's context. This ensures the necessary data is present before the task's execution begins. -```bash -bacalhau config set Compute.Orchestrators=nats://my-great-orchestrator.com:4222 -``` +Bacalhau's `InputSource` natively supports fetching data from remote sources like S3 and IPFS and can also mount local directories. It is intended to be flexible for future expansion. -## How do I enable the WebUI? +## `InputSource` Parameters: -By default, the WebUI for Bacalhau is disabled for security reasons. To enable it: +* **Source** `(`[`SpecConfig`](../other/specconfig.md) `: )`: Specifies the origin of the artifact, which could be a URL, an S3 bucket, or other locations. +* **Alias** `(string: )`: An optional identifier for this input source. It's particularly useful for dynamic operations within a task, such as dynamically importing data in WebAssembly using an alias. +* **Target** `(string: )`: Defines the path inside the task's environment where the retrieved artifact should be mounted or stored. This ensures that the task can access the data during its execution. -```bash -bacalhau config set WebUI.Enabled=true +## Usage Examples + +```YAML +InputSources: + - Source: + Type: s3 + Params: + Bucket: my_bucket + Region: us-west-1 + Target: /my_s3_data + - Source: + Type: localDirectory + Params: + SourcePath: /path/to/local/directory + ReadWrite: true + Target: /my_local_data ``` -## Can I run non-Docker jobs? +In this example, the first input source fetches data from an S3 bucket and mounts it at `/my_s3_data` within the task. The second input source mounts a local directory at `/my_local_data` and allows the task to read and write data to it. -Yes! You can run programs using WebAssembly instead. Refer to the [WebAssembly onboarding documentation](../../references/developers/workload-onboarding/wasm.md) for instructions. +## docs/specifications/job/label.md -## How do I see a job's progress while it's running? +# Labels -Use the job describe command with your job ID: +The `Labels` block within a `Job` specification plays a crucial role in Bacalhau, serving as a mechanism for filtering jobs. By attaching specific labels to jobs, users can quickly and effectively filter and manage jobs via both the Command Line Interface (CLI) and Application Programming Interface (API) based on various criteria. -```bash -bacalhau job describe b4491a4a-7b55-4fa7-a5af-80f3c99bc379 -``` +## `Labels` Parameters -If your job writes to stdout or stderr while running, you can also view the output with the `logs` command. +Labels are essentially key-value pairs attached to jobs, allowing for detailed categorizations and filtrations. Each label consists of a `Key` and a `Value`. These labels can be filtered using operators to pinpoint specific jobs fitting certain criteria. -## Can I stop a running job? +### Filtering Operators -Yes. Given a valid `job ID`, you can use the `stop` command to cancel the job and stop it from running: +Jobs can be filtered using the following operators: -```bash -bacalhau job stop -``` +1. `in`: Checks if the key's value matches any within a specified list of values. +2. `notin`: Validates that the key's value isn’t within a provided list of values. +3. `exists`: Checks for the presence of a specified key, regardless of its value. +4. `!`: Validates the absence of a specified key. (i.e., DoesNotExist) +5. `gt`: Checks if the key's value is greater than a specified value. +6. `lt`: Checks if the key's value is less than a specified value. +7. `= & ==`: Used for exact match comparisons between the key’s value and a specified value. +8. `!=`: Validates that the key’s value doesn't match a specified value. +### Example Usage -## glossary +Filter jobs with a label whose key is "environment" and value is "development": -# Glossary +```shell +bacalhau job list --labels 'environment=development' +``` -## Compute Node +Filter jobs with a label whose key is "version" and value is greater than "2.0": -A Compute Node in the Bacalhau platform is responsible for executing jobs and producing results. These nodes are part of a private network that allows workload distribution and communication between computers. Compute Nodes handle various types of jobs based on their capabilities and resources. They work in tandem with Requester Nodes, which manage user requests, discover and rank Compute Nodes and monitor job lifecycles. +```shell +bacalhau job list --labels 'version gt 2.0' +``` -## CLI (Command Line Interface) +Filter jobs with a label "project" existing: -A CLI (Command Line Interface) in the Bacalhau platform is a tool that allows users to interact with Bacalhau through text-based commands entered into a terminal or command prompt. The CLI provides a set of commands for managing and executing various tasks on the platform, including submitting jobs, monitoring job status, managing nodes and configuring the environment. +```shell +bacalhau job list --labels 'project' +``` -## Data Source +Filter jobs without a "project" label: -A Data Source in Bacalhau refers to the origin of the data used in jobs. This can include various types of storage such as IPFS, S3, local files or URLs. Data sources are specified in the job configuration and are essential for providing the necessary input data for job execution. +```shell +bacalhau job list --labels '!project' +``` -## Docker +### Practical Applications -Docker in Bacalhau refers to the use of Docker containers to package and run applications. Docker provides a standardized unit of software, enabling users to create and manage containers efficiently. Bacalhau supports running Docker workloads, allowing users to utilize containerized applications seamlessly on the platform. +* **Job Management**: Enables efficient management of jobs by categorizing them based on distinct attributes or criteria. +* **Automation**: Facilitates the automation of job deployment and management processes by allowing scripts and tools to target specific categories of jobs. +* **Monitoring & Analytics**: Enhances monitoring and analytics by grouping jobs into meaningful categories, allowing for detailed insights and analysis. -## IPFS +## Conclusion -The InterPlanetary File System (IPFS) is a protocol and peer-to-peer network for storing and sharing data in a distributed file system. In Bacalhau, IPFS is used as a data source and a way to distribute job inputs and outputs, leveraging its decentralized nature for efficient data management. +The `Labels` block is instrumental in the enhanced management, filtering, and operation of jobs within Bacalhau. By understanding and utilizing the available operators and label parameters effectively, users can optimize their workflow, automate processes, and achieve detailed insights into their jobs. -## Job +## docs/specifications/job/meta.md -A Job in the Bacalhau platform is a unit of work that a user submits for execution. Jobs can be simple tasks or complex workflows involving multiple steps. They are defined by specifications that include the job type, resources required and input/output data. Jobs are managed by Requester Nodes, which ensure they are distributed to appropriate Compute Nodes for execution. +# Meta -## Job Results +In both the `Job` and `Task` specifications within Bacalhau, the `Meta` block is a versatile element used to attach arbitrary metadata. This metadata isn't utilized for filtering or categorizing jobs; there's a separate [`Labels`](label.md) block specifically designated for that purpose. Instead, the `Meta` block is instrumental for embedding additional information for operators or external systems, enhancing clarity and context. -Job Results are the output generated after a job has been executed on a Compute Node. These results can include processed data, logs and any other relevant output files. Results are often stored in specified locations such as IPFS or S3, allowing users to retrieve and utilize them after job completion. +## `Meta` Parameters in Job and Task Specs -## Node +The `Meta` block is comprised of key-value pairs, with both keys and values being strings. These pairs aren't constrained by a predefined structure, offering flexibility for users to annotate jobs and tasks with diverse metadata. -A Node in the Bacalhau is a fundamental component of the network, responsible for executing and managing jobs. A Node is the Bacalhau entity installed Nodes can be classified into different types based on their roles, such as Compute Nodes and Requester Nodes. Each node operates as part of a decentralized network, allowing distributed processing and resource management. +### User-Defined Metadata -## Node Management +Users can incorporate any arbitrary key-value pairs to convey descriptive information or context about the job or task. -Node Management in Bacalhau involves configuring and maintaining the nodes within the network, including both Compute Nodes and Requester Nodes. This includes tasks like onboarding new nodes, managing node resources, setting access controls and ensuring nodes meet operational standards for job execution. +#### Example: -## Network +```json +"Meta": { + "project": "frontend", + "version": "1.2.5", + "owner": "team-alpha", + "environment": "development" +} +``` -In the context of the Bacalhau, a Network refers to the interconnected system of nodes that collaborate to execute jobs, manage data and maintain communication. This network is decentralized, meaning it does not rely on a central authority, which enhances its robustness, scalability and efficiency. +1. **project**: Identifies the associated project. +2. **version**: Specifies the version of the application or service. +3. **owner**: Names the responsible team or individual. +4. **environment**: Indicates the stage in the development lifecycle. -## Network Specification +## Auto-Generated Metadata by Bacalhau -The Network Specification in Bacalhau defines the network requirements and settings for job execution. This includes configurations for network access, data transfer protocols and connectivity between nodes. Proper network specification ensures that jobs can communicate effectively and access necessary resources. +Beyond user-defined metadata, Bacalhau automatically injects specific metadata keys for identification and security purposes. -## Workload Onboarding +### Bacalhau Auto-Generated Keys: -Workload Onboarding in Bacalhau is the process of preparing and integrating different types of workloads for execution on the platform. This involves setting up environments for various programming languages, configuring containers and ensuring workloads are optimized for execution across the distributed network of Compute Nodes. +1. **bacalhau.org/requester.id**: A unique identifier for the orchestrator that handled the job. +2. **bacalhau.org/requester.publicKey**: The public key of the requester, aiding in security and validation. +3. **bacalhau.org/client.id**: The ID for the client submitting the job, enhancing traceability. -## WebAssembly (WASM) +#### Example: -WebAssembly (WASM) in Bacalhau is a binary instruction format for a stack-based virtual machine. WASM is designed for safe and efficient execution, making it a suitable target for compilation from high-level languages. Bacalhau supports running WASM workloads, enabling efficient execution of lightweight and portable code. +```json +"Meta": { + "bacalhau.org/requester.id": "QmfZwnVWYjHSchAVxJqXn18Bvd1cpG2ATRYceBBvUGZf2f", + "bacalhau.org/requester.publicKey": "CAASpgIwggEiMA0GCSqG...BcyEhfEZKnAgMBAAE=", + "bacalhau.org/client.id": "dfadea67ab6d8c65761c3d879119e11f157923036f945d969d19a51066dc663a" +} +``` -## Requestor Node +### Implications and Utility -A Requester Node in the Bacalhau platform is responsible for handling user requests, discovering and ranking Compute Nodes, forwarding jobs to these nodes and monitoring the lifecycle of the jobs. Requester Nodes play a crucial role in managing the flow of tasks and ensuring they are executed efficiently by the appropriate Compute Nodes in the network. +1. **Identification**: The metadata aids in uniquely identifying jobs and tasks, connecting them to their originators and executors. +2. **Context Enhancement**: Metadata can supplement jobs and tasks with additional data, offering insights and context that aren't captured by standard parameters. +3. **Security Enhancement**: Auto-generated keys like the requester's public key contribute to the secure handling and execution of jobs and tasks. -## S3 +While the `Meta` block is distinct from the [`Labels`](label.md) block used for filtering, its contribution to providing context, security, and traceability is integral in managing and understanding the diverse jobs and tasks within the Bacalhau ecosystem effectively. -Amazon Simple Storage Service (S3) is a scalable object storage service. Bacalhau supports S3 as a data source, allowing users to store and retrieve input and output data for jobs. S3's integration with Bacalhau provides robust and reliable storage options for large-scale data processing tasks. +## docs/specifications/job/network.md +# Network -## gpu +The `Network` object offers a method to specify the networking requirements of a `Task`. It defines the scope and constraints of the network connectivity based on the demands of the task. -# GPU Workloads +## `Network` Parameters: -## Overview +1. **Type** `(string: "None")`: Indicates the network configuration's nature. There are several network modes available: + * `None`: This mode implies that the task does not necessitate any networking capabilities. + * `Full`: Specifies that the task mandates unrestricted, raw IP networking without any imposed filters. + * `HTTP`: This mode constrains the task to only require HTTP networking with specific domains. In this model: + * The job specifier puts forward a job, stipulating the domain(s) it intends to communicate with. + * The compute provider assesses the inherent risk of the job based on these domains and bids accordingly. + * At runtime, the network traffic remains strictly confined to the designated domain(s). -Bacalhau supports running jobs on GPUs out of the box. This guide covers how to set up and use GPUs with Bacalhau. +:::info +A typical command for this might resemble: `bacalhau docker run —network=http —domain=crates.io —domain=github.com -i ipfs://Qmy1234myd4t4,dst=/code rust/compile` +::: -## Supported GPU Types +The primary risks for the compute provider center around possible violations of its terms, its hosting provider's terms, or even prevailing laws in its jurisdiction. This encompasses issues such as unauthorized access or distribution of illicit content and potential cyber-attacks. -Bacalhau currently supports: +Conversely, the job specifier's primary risk involves operating in a paid environment. External entities might seek to exploit this environment, for instance, through a compromised package download that initiates a crypto mining operation, depleting the allocated, prepaid job time. By limiting traffic strictly to the pre-specified domains, the potential for such cyber threats diminishes considerably. -- NVIDIA GPUs -- AMD GPUs -- Intel GPUs +While a compute provider might impose its limits through other means, having domains declared upfront allows it to selectively bid on jobs that it can execute without issues, improving the user experience for job specifiers. -These are only available with the Docker executor. +2. **Domains** `(string[]: )`: A list of domain strings, relevant primarily when the `Type` is set to **HTTP**. It dictates the specific domains the task can communicate with over HTTP. -## Prerequisites +Understanding and utilizing these configurations aptly can ensure that tasks are executed in an environment that aligns with their networking requirements, bolstering efficiency and security. -### Basic Requirements +## docs/specifications/job/resources.md -1. [Docker](https://get.docker.com/) installed -2. Appropriate GPU drivers for your hardware +# Resources -### GPU-Specific Setup +The `Resources` provides a structured way to detail the computational resources a `Task` requires. By specifying these requirements, you ensure that the task is scheduled on a node with adequate resources, optimizing performance and avoiding potential issues linked to resource constraints. -#### NVIDIA GPUs +## `Resources` Parameters: -1. Install [NVIDIA GPU Drivers](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html) -2. Install [NVIDIA Container Toolkit (nvidia-docker2)](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) -3. Verify with `nvidia-smi` command +1. **CPU** `(string: )`: Defines the CPU resources required for the task. Units can be specified in cores (e.g., `2` for 2 CPU cores) or in milliCPU units (e.g., `250m` or `0.25` for 250 milliCPU units). For instance, if you have half a CPU core, you can represent it as `500m` or `0.5`. +2. **Memory** `(string: )`: Highlights the amount of RAM needed for the task. You can specify the memory in various units such as: + * `Kb` for Kilobytes + * `Mb` for Megabytes + * `Gb` for Gigabytes + * `Tb` for Terabytes +3. **Disk** `(string: )`: States the disk storage space needed for the task. Similarly, the disk space can be expressed in units like `Gb` for Gigabytes, `Mb` for Megabytes, and so on. As an example, `10Gb` indicates 10 Gigabytes of storage space. +4. **GPU** `(string: )`: Denotes the number of GPU units required. For example, `2` signifies the requirement of 2 GPU units. This is crucial for tasks involving heavy computational processes, machine learning models, or tasks that leverage GPU acceleration. -#### AMD GPUs +## docs/specifications/job/result-path.md -1. Install [AMD GPU drivers](https://www.amd.com/en/support/download/drivers.html) -2. Set up Docker for ROCm following [this guide](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/docker.html) -3. Verify with `rocm-smi` command +# ResultPath -#### Intel GPUs +A `ResultPath` denotes a specific location within a `Task` that contains meaningful output or results. By specifying a `ResultPath`, you can pinpoint which files or directories are essential and should be retained or published after the task's execution. -1. Install [Intel GPU drivers](https://www.intel.com/content/www/us/en/download-center/home.html) -2. Set up Docker for Intel GPUs following [this guide](https://github.com/Intel-Media-SDK/MediaSDK/wiki/Running-on-GPU-under-docker) -3. Verify with `xpu-smi` command +## `ResultPath` Parameters: -## Running GPU Jobs +1. **Name**: A descriptive label or identifier for the result, allowing for easier referencing and understanding of the output's nature or significance. +2. **Path**: Specifies the exact location, either a file or a directory, within the task's environment where the result or output is stored. This ensures that after the task completes, the critical data at this path can be accessed, retained, or published as necessary. -### Command Line +## docs/specifications/job/task.md -Use the `--gpu` flag to specify the number of GPUs your job requires: +# Task -```bash -bacalhau docker run --gpu=1 nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi -``` +A `Task` signifies a distinct unit of work within the broader context of a `Job`. It defines the specifics of how the task should be executed, where the results should be published, what environment variables are needed, among other configurations -### Using YAML +## `Task` Parameters -You can also submit GPU jobs using YAML configuration: +1. **Name** `(string : )`: A unique identifier representing the name of the task. +2. **Engine** `(`[`SpecConfig`](../other/specconfig.md) `: required)`: Configures the execution engine for the task, such as [Docker](/components/engines/docker.md) or [WebAssembly](/components/engines/wasm.md). +3. **Publisher** `(`[`SpecConfig`](../other/specconfig.md) `: optional)`: Specifies where the results of the task should be published, such as [S3](/components/publishers/s3.md) and [IPFS](/components/publishers/ipfs.md) publishers. Only applicable for tasks of type `batch` and `ops`. +4. **Env** `(map[string]string : optional)`: A set of environment variables for the driver. +5. **Meta** `(`[`Meta`](meta.md) `: optional)`: Allows association of arbitrary metadata with this task. +6. **InputSources** `(`[`InputSource`](input-source.md)`[] : optional)`: Lists remote artifacts that should be downloaded before task execution and mounted within the task, such as from [S3](/components/sources/s3.md) or [HTTP/HTTPs](/components/sources/url.md). +7. **ResultPaths** `(`[`ResultPath`](result-path.md)`[] : optional)`: Indicates volumes within the task that should be included in the published result. Only applicable for tasks of type `batch` and `ops`. +8. **Resources** `(`[`Resources`](resources.md) `: optional)`: Details the resources that this task requires. +9. **Network** `(`[`Network`](network.md) `: optional)`: Configurations related to the networking aspects of the task. +10. **Timeouts** `(`[`Timeouts`](timeouts.md) `: optional)`: Configurations concerning any timeouts associated with the task. -```yaml -Name: gpu-test-job -Type: batch -Count: 1 -Tasks: - - Engine: - Type: docker - Params: - Image: 'nvidia/cuda:11.6.2-base-ubuntu20.04' - Entrypoint: - - /bin/bash - Parameters: - - -c - - nvidia-smi && echo 'GPU is working!' - Name: TestGPU - ResourcesConfig: - CPU: '1' - Memory: '1GB' - Disk: '10GB' - GPU: '1' -``` +## docs/specifications/job/timeouts.md -## Important Notes +# Timeouts -- Your container must include the appropriate CUDA runtime and be compatible with the CUDA version on the node -- GPU access can be controlled using resource limits -- The Bacalhau network must have executor nodes with GPUs exposed +The `Timeouts` object provides a mechanism to impose timing constraints on specific task operations, particularly execution. By setting these timeouts, users can ensure tasks don't run indefinitely and align them with intended durations. +## `Timeouts` Parameters: -## input-source +* **ExecutionTimeout** `(int: )`: Defines the maximum duration (in seconds) that a task is permitted to run. A value of zero indicates that there's no set timeout. This could be particularly useful for tasks that function as daemons and are designed to run indefinitely. -[Content truncated - see full docs] +Utilizing the `Timeouts` judiciously helps in managing resource utilization and ensures tasks adhere to expected timelines, thereby enhancing the efficiency and predictability of job executions. +## docs/specifications/job/type.md -## inspecting-jobs +# Type -[Content truncated - see full docs] +Bacalhau has recently introduced different job types in v1.1, providing more control and flexibility over the orchestration and scheduling of those jobs - depending on their type. +Despite the differences in job types, all jobs benefit from core functionalities provided by Bacalhau, including: -## ipfs +1. **Node selection** - the appropriate nodes are selected based on several criteria, including resource availability, priority and feedback from the nodes. +2. **Job monitoring** - jobs are monitored to ensure they complete, and that they stay in a healthy state. +3. **Retries** - within limits, Bacalhau will retry certain jobs a set number of times should it fail to complete successfully when requested. -[Content truncated - see full docs] +### Batch Jobs +Batch jobs are executed on demand, running on a specified number of Bacalhau nodes. These jobs either run until completion or until they reach a timeout. They are designed to carry out a single, discrete task before finishing. This is the only [queueable](/guides/queueing.md) job type. -## ipfs +Ideal for intermittent yet intensive data dives, for instance performing computation over large datasets before publishing the response. This approach eliminates the continuous processing overhead, focusing on specific, in-depth investigations and computation. -[Content truncated - see full docs] +
+Batch Job Example -## label +This example shows a sample Batch job [declarative](./) description with all available parameters. -[Content truncated - see full docs] +The example demonstrates a job that: +1. Has a priority of 100 +2. Will be executed on 2 nodes +3. Will be executed only on nodes with Linux OS +4. Uses the docker engine +5. Executes a python script with multiple arguments +6. Preloads and mounts IPFS data as a local directory +7. Publishes the results to the IPFS +8. Has network access type HTTP and 2 allowed domains -## labels-and-constraints +```yaml +# This example shows a sample job file. +# Parameters, marked as Optional can be skipped - the default values will be used -[Content truncated - see full docs] +# Name of the job. Optional. Default value - job ID +Name: Batch Job Example +# Type of the job +Type: batch -## listing-jobs +# The namespace in which the job is running. Default value - “default” +Namespace: default -[Content truncated - see full docs] +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 +# Count - number of replicas to be scheduled. +# This is only applicable for jobs of type batch and service. +Count: 2 -## local +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the batch job + Meta purpose: Describe the job -[Content truncated - see full docs] +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Some option: Some text + Some other option: Some other text +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: +- Key: "Operating-System" + Operator: "=" + Values: ["linux"] -## local +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: Important Calculations -[Content truncated - see full docs] + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: -## meta + # Image: docker image to be used in the task. + Image: alek5eyk/batchjobexample:1.1 + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - python + - supercalc.py + - "5" + - /outputs/result.txt + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - DEFAULT_USER_NAME = root + - API_KEY = none + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task + # Optional + InputSources: + - Target: /data + Source: + Type: ipfs + Params: + CID: "QmSYE8dVx6RTdDFFhBu51JjFG1fwwPdUJoXZ4ZNXvfoK2V" + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs -[Content truncated - see full docs] + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 1Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Domains: + - example.com + - ghcr.io + Type: HTTP + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 +``` +
-## mounting-input-data +### Ops Jobs -[Content truncated - see full docs] +Similar to batch jobs, ops jobs have a broader reach. They are executed on all nodes that align with the job specification, but otherwise behave like batch jobs. +Ops jobs are perfect for urgent investigations, granting direct access to logs on host machines, where previously you may have had to wait for the logs to arrive at a central location before being able to query them. They can also be used for delivering configuration files for other systems should you wish to deploy an update to many machines at once. -## network +
-[Content truncated - see full docs] +Ops Job Example +This example shows a sample Ops job [declarative](./) description with all available parameters. -## networking +The example demonstrates a job that: -[Content truncated - see full docs] +1. Has a priority of 100 +2. Will be executed on all suitable nodes +3. Will be executed only on nodes with label = WebService +4. Uses the docker engine +5. Executes a query with manually specified parameters +6. Has access to a local directory +7. Publishes the results to the IPFS, if any +8. Has network access type HTTP and 2 allowed domains +```yaml +# This example shows a sample ops job file. +# Parameters, marked as Optional can be skipped - the default values will be used +# Example from the https://blog.bacalhau.org/p/real-time-log-analysis-with-bacalhau is used -## node-management +# Name of the job. Optional. Default value - job ID +Name: Live logs processing -[Content truncated - see full docs] +# Type of the job +Type: ops +# The namespace in which the job is running. Default value - “default” +Namespace: logging -## node-tls +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 -[Content truncated - see full docs] +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the ops job + Meta purpose: Describe the job +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Job type: ops job + Ops job feature: To be executed on all suitable nodes -## partitioning +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: + - Key: service + Operator: == + Values: + - WebService -[Content truncated - see full docs] +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: LiveLogProcessing + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker -## queueing + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: -[Content truncated - see full docs] + # Image: docker image to be used in the task. + Image: ghcr.io/bacalhau-project/nginx-access-log-query:1.0.0 + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - --query + - {{.query}} + - --start-time + - {{or (index . "start-time") ""}} + - --end-time + - {{or (index . "end-time") ""}} + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - DEFAULT_USER_NAME = root + - API_KEY = none + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task. + # Ensure that localDirectory source is enabled on the nodes + # Optional + InputSources: + - Target: /logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 1Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Domains: + - example.com + - ghcr.io + Type: HTTP + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 -## resource-requirements +``` -[Content truncated - see full docs] +
+### Daemon Jobs -## resources +Daemon jobs run continuously on all nodes that meet the criteria given in the job specification. Should any new compute nodes join the cluster after the job was started, and should they meet the criteria, the job will be scheduled to run on that node too. -[Content truncated - see full docs] +A good application of daemon jobs is to handle continuously generated data on every compute node. This might be from edge devices like sensors, or cameras, or from logs where they are generated. The data can then be aggregated and compressed them before sending it onwards. For logs, the aggregated data can be relayed at regular intervals to platforms like Kafka or Kinesis, or directly to other logging services with edge devices potentially delivering results via MQTT. +
-## result-path +Daemon Job Example -# ResultPath +This example shows a sample Daemon job [declarative](./) description with all available parameters. -A `ResultPath` denotes a specific location within a `Task` that contains meaningful output or results. By specifying a `ResultPath`, you can pinpoint which files or directories are essential and should be retained or published after the task's execution. +The example demonstrates a job that: -## `ResultPath` Parameters: +1. Has a priority of 100 +2. Will be executed continuously on all suitable nodes +3. Will be executed only on nodes with label = WebService +4. Uses the docker engine +5. Executes a query with manually specified parameters +6. Has access to 2 local directories with logs +7. Publishes the results to the IPFS, if any +8. Has network access type Full in order to send data to the S3 storage -1. **Name**: A descriptive label or identifier for the result, allowing for easier referencing and understanding of the output's nature or significance. -2. **Path**: Specifies the exact location, either a file or a directory, within the task's environment where the result or output is stored. This ensures that after the task completes, the critical data at this path can be accessed, retained, or published as necessary. +```yaml +# This example shows a sample daemon job file. +# Parameters, marked as Optional can be skipped - the default values will be used +# Example from the https://blog.bacalhau.org/p/tutorial-save-25-m-yearly-by-managing is used +# Name of the job. Optional. Default value - job ID +Name: Logstash -## retrieving-logs +# Type of the job +Type: daemon -[Content truncated - see full docs] +# The namespace in which the job is running. Default value - “default” +Namespace: logging +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 -## running-locally +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the daemon job + Meta purpose: Describe the job -[Content truncated - see full docs] +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Job type: daemon job + Daemon job feature: To be executed continuously on all suitable nodes +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: + - Key: service + Operator: == + Values: + - WebService -## s3 +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: main -[Content truncated - see full docs] + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: -## s3 + # Image: docker image to be used in the task. + Image: ghcr.io/bacalhau-project/nginx-access-log-agent:1.0.0 + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - --query + - {{.query}} + - --start-time + - {{or (index . "start-time") ""}} + - --end-time + - {{or (index . "end-time") ""}} + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - OPENSEARCH_ENDPOINT={{.OpenSearchEndpoint}} + - S3_BUCKET={{.AccessLogBucket}} + - AWS_REGION={{.AWSRegion}} + - AGGREGATE_DURATION=10 + - S3_TIME_FILE=60 + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task. + # Ensure that localDirectory source is enabled on the nodes + # Optional + InputSources: + - Target: /app/logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs + - Target: /app/state + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/state + ReadWrite: true + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs -[Content truncated - see full docs] + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 1Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Type: Full + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 +``` +
-## s3-partitioning +### Service Jobs -[Content truncated - see full docs] +Service jobs run continuously on a specified number of nodes that meet the criteria given in the job specification. Bacalhau's orchestrator selects the optimal nodes to run the job, and continuously monitors its health, performance. If required, it will reschedule on other nodes. +This job type is good for long-running consumers such as streaming or queuing services, or real-time event listeners. -## s3managed +
-[Content truncated - see full docs] +Service Job Example +This example shows a sample Service job [declarative](./) description with all available parameters. -## selection-policy +The example demonstrates a job that: -[Content truncated - see full docs] +1. Has a priority of 100 +2. Will be executed continuously on all suitable nodes +3. Will be executed only on nodes with architecture = arm64 and located in the us-west-2 region +4. Uses the docker engine +5. Executes a query with multiple parameters +6. Has access to 2 local directories with logs +7. Publishes the results to the IPFS, if any +8. Has network access type Full in order to send data to the S3 storage +```yaml +# This example shows a sample daemon job file. +# Parameters, marked as Optional can be skipped - the default values will be used +# Example from the https://blog.bacalhau.org/p/introducing-new-job-types-new-horizons is used -## specconfig +# Name of the job. Optional. Default value - job ID +Name: Kinesis Consumer -[Content truncated - see full docs] +# Type of the job +Type: service +# The namespace in which the job is running. Default value - “default” +Namespace: service -## state +# Priority - determines the scheduling priority. By default is 0 +Priority: 100 -[Content truncated - see full docs] +# Meta - arbitrary metadata associated with the job. +# Optional +Meta: + Job purpose : Provide detailed example of the service job + Meta purpose: Describe the job +# Labels - Arbitrary labels associated with the job for filtering purposes. +# Optional +Labels: + Job type: service job + Daemon job feature: To be executed continuously on a certain amount of suitable nodes -## stopping-a-job +# Constraint - a condition that must be met for a compute node to be eligible to run a given job. +# Should be specified in a following format: key - operator - value +# Optional. +Constraints: + - Key: Architecture + Operator: '=' + Values: + - arm64 + - Key: region + Operator: '=' + Values: + - us-west-2 -[Content truncated - see full docs] +# Task associated with the job, which defines a unit of work within the job. +# Currently, only one task per job is supported. +Tasks: + # Name - unique identifier for a task. Default value - “main” + - Name: main + # Engine - the execution engine for the task. + # Defines engine type (docker or wasm) and relevant parameters. + # In this example, docker engine will be used. + Engine: + Type: docker -## submitting-jobs + # Params: A set of key-value pairs that provide the specific configurations for the chosen type + Params: -[Content truncated - see full docs] + # Image: docker image to be used in the task. + Image: my-kinesis-consumer:latest + + # Entrypoint defines a command that will be executed when container starts. + # For this example we don't need any so default value 'null' can be used + Entrypoint: null + + # Parameters define CLI commands, executed after entrypoint + Parameters: + - -stream-arn + - arn:aws:kinesis:us-west-2:123456789012:stream/my-kinesis-stream + - -shard-iterator + - TRIM_HORIZON + + # WorkingDirectory sets a working directory for entrypoint and paramters' commands. + # Default value - empty string "" + WorkingDirectory: "" + + # EnvironmentVariables sets environment variables for the engine + EnvironmentVariables: + - DEFAULT_USER_NAME = root + - API_KEY = none + + # Meta - arbitrary metadata associated with the task. + # Optional + Meta: + Task goal : show how to create declarative descriptions + + # Publisher specifies where the results of the task should be published - S3, IPFS, Local or none + # Optional + # To use IPFS publisher you need to specify only type + # To use S3 publisher you need to specify bucket, key, region and endpoint + # See S3 Publisher specification for more details + Publisher: + Type: ipfs + + # InputSources lists remote artifacts that should be downloaded before task execution + # and mounted within the task. + # Ensure that localDirectory source is enabled on the nodes + # Optional + InputSources: + - Target: /app/logs + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/logs + - Target: /app/state + Source: + Type: localDirectory + Params: + SourcePath: /data/log-orchestration/state + ReadWrite: true + + # ResultPaths indicate volumes within the task that should be included in the published result + # Only applicable for batch and ops jobs. + # Optional + ResultPaths: + - Name: outputs + Path: /outputs + # Resources is a structured way to detail the required computational resources for the task. + # Optional + Resources: + # CPU can be specified in cores (e.g. 1) or in milliCPU units (e.g. 250m or 0.25) + CPU: 250m + + # Memory highlights amount of RAM for a job. Can be specified in Kb, Mb, Gb, Tb + Memory: 4Gb + + # Disk states disk storage space, needed for the task. + Disk: 100mb + + # Denotes the number of GPU units required. + GPU: "0" + + # Network specifies networking requirements. + # Optional + # Job may have full access to the network, + # may have no access at all, + # or may have limited HTTP(S) access to a specific list of domains + Network: + Type: Full + + # Timeouts define configurations concerning any timeouts associated with the task. + # Optional + Timeouts: + # QueueTimeout defines how long will job wait for suitable nodes in the network + # if none are currently available. + QueueTimeout: 101 + + # TotalTimeout defines job execution timeout. When it is reached the job will be terminated + TotalTimeout: 301 +``` -## task +
-[Content truncated - see full docs] +## docs/specifications/other/README.md +# Other Specifications -## timeouts +## docs/specifications/other/specconfig.md -[Content truncated - see full docs] +# SpecConfig +`SpecConfig` provides a unified structure to specify configurations for various components in Bacalhau, including engines, publishers, and input sources. Its flexible design allows seamless integration with multiple systems like Docker, WebAssembly (Wasm), AWS S3, and local directories, among others. -## timeouts +### `SpecConfig` Parameters -# Timeouts +- **Type** `(string : )`: Specifies the type of the configuration. Examples include `docker` and `wasm` for execution engines, `S3` for input sources and publishers, etc. +- **Params** `(map[string]any : )`: A set of key-value pairs that provide the specific configurations for the chosen type. The keys and values are flexible and depend on the `Type`. For instance, parameters for a Docker engine might include image name and version, while an S3 publisher would require configurations like the bucket name and AWS region. If not provided, it defaults to `nil`. -The `Timeouts` object provides a mechanism to impose timing constraints on specific task operations, particularly execution. By setting these timeouts, users can ensure tasks don't run indefinitely and align them with intended durations. +### Usage Examples -## `Timeouts` Parameters: +Here are a few hypothetical examples to demonstrate how you might define `SpecConfig` for different components: -* **ExecutionTimeout** `(int: )`: Defines the maximum duration (in seconds) that a task is permitted to run. A value of zero indicates that there's no set timeout. This could be particularly useful for tasks that function as daemons and are designed to run indefinitely. +#### Docker Engine -Utilizing the `Timeouts` judiciously helps in managing resource utilization and ensures tasks adhere to expected timelines, thereby enhancing the efficiency and predictability of job executions. +Copy +``` +{ + "Type": "docker", + "Params": { + "Image": "my_app_image", + "Entrypoint": "my_app_entrypoint", + } +} +``` -## troubleshooting +Full Docker spec can be found [here](/components/engines/docker.md). -[Content truncated - see full docs] +#### S3 Publisher +Copy -## type +``` +{ + "Type": "s3", + "Params": { + "Bucket": "my_bucket", + "Region": "us-west-1" + } +} +``` -[Content truncated - see full docs] +Full S3 Publisher can be found [here](/components/publishers/s3.md). +#### Local Directory Input Source -## url +Copy -[Content truncated - see full docs] +``` +{ + "Type": "localDirectory", + "Params": { + "SourcePath": "/path/to/local/directory", + "ReadWrite": true, + } +} +``` +Full local source can be found [here](/components/sources/local.md). -## wasm +Remember, the exact keys and values in the `Params` map will vary depending on the specific requirements of the component being configured. Always refer to the individual component's documentation to understand the available parameters. -[Content truncated - see full docs] +## docs/specifications/other/state.md +# State -## wasm +## `State` Structure Specification -[Content truncated - see full docs] +Within Bacalhau, the `State` structure is designed to represent the status or state of an object (like a [`Job`](/docs/specifications/job/)), coupled with a human-readable message for added context. Below is a breakdown of the structure: +### `State` Parameters -## webui +1. **StateType** `(T : )`: Represents the current state of the object. This is a generic parameter that will take on a specific value from a set of defined state types for the object in question. For jobs, this will be one of the [`JobStateType`](state.md#job-state-types) values. +2. **Message** `(string : )`: A human-readable message giving more context about the current state. Particularly useful for states like `Failed` to provide insight into the nature of any error. -[Content truncated - see full docs] +## Job State Types +When `State` is used for a job, the `StateType` can be one of the following: -## working-with-nodes +1. `Pending`: This indicates that the job is submitted but is not yet scheduled for execution. +2. `Running`: The job is scheduled and is currently undergoing execution. +3. `Completed`: This state signifies that a job has successfully executed its task. Only applicable for batch jobs. +4. `Failed`: A state indicating that the job encountered errors and couldn't successfully complete. +5. `JobStateTypeStopped`: The job has been intentionally halted by the user before its natural completion. -[Content truncated - see full docs] +The inclusion of the `Message` field can offer detailed insights, especially in states like `Failed`, aiding in error comprehension and debugging. diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 441ef37..0000000 --- a/yarn.lock +++ /dev/null @@ -1,9437 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@algolia/abtesting@1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.3.0.tgz" - integrity sha512-KqPVLdVNfoJzX5BKNGM9bsW8saHeyax8kmPFXul5gejrSPN3qss7PgsFH5mMem7oR8tvjvNkia97ljEYPYCN8Q== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/autocomplete-core@1.17.9": - version "1.17.9" - resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz" - integrity sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.17.9" - "@algolia/autocomplete-shared" "1.17.9" - -"@algolia/autocomplete-plugin-algolia-insights@1.17.9": - version "1.17.9" - resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz" - integrity sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ== - dependencies: - "@algolia/autocomplete-shared" "1.17.9" - -"@algolia/autocomplete-preset-algolia@1.17.9": - version "1.17.9" - resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz" - integrity sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ== - dependencies: - "@algolia/autocomplete-shared" "1.17.9" - -"@algolia/autocomplete-shared@1.17.9": - version "1.17.9" - resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz" - integrity sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ== - -"@algolia/client-abtesting@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.37.0.tgz" - integrity sha512-Dp2Zq+x9qQFnuiQhVe91EeaaPxWBhzwQ6QnznZQnH9C1/ei3dvtmAFfFeaTxM6FzfJXDLvVnaQagTYFTQz3R5g== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/client-analytics@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.37.0.tgz" - integrity sha512-wyXODDOluKogTuZxRII6mtqhAq4+qUR3zIUJEKTiHLe8HMZFxfUEI4NO2qSu04noXZHbv/sRVdQQqzKh12SZuQ== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/client-common@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.37.0.tgz" - integrity sha512-GylIFlPvLy9OMgFG8JkonIagv3zF+Dx3H401Uo2KpmfMVBBJiGfAb9oYfXtplpRMZnZPxF5FnkWaI/NpVJMC+g== - -"@algolia/client-insights@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.37.0.tgz" - integrity sha512-T63afO2O69XHKw2+F7mfRoIbmXWGzgpZxgOFAdP3fR4laid7pWBt20P4eJ+Zn23wXS5kC9P2K7Bo3+rVjqnYiw== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/client-personalization@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.37.0.tgz" - integrity sha512-1zOIXM98O9zD8bYDCJiUJRC/qNUydGHK/zRK+WbLXrW1SqLFRXECsKZa5KoG166+o5q5upk96qguOtE8FTXDWQ== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/client-query-suggestions@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.37.0.tgz" - integrity sha512-31Nr2xOLBCYVal+OMZn1rp1H4lPs1914Tfr3a34wU/nsWJ+TB3vWjfkUUuuYhWoWBEArwuRzt3YNLn0F/KRVkg== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/client-search@>= 4.9.1 < 6", "@algolia/client-search@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.37.0.tgz" - integrity sha512-DAFVUvEg+u7jUs6BZiVz9zdaUebYULPiQ4LM2R4n8Nujzyj7BZzGr2DCd85ip4p/cx7nAZWKM8pLcGtkTRTdsg== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/events@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" - integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== - -"@algolia/ingestion@1.37.0": - version "1.37.0" - resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.37.0.tgz" - integrity sha512-pkCepBRRdcdd7dTLbFddnu886NyyxmhgqiRcHHaDunvX03Ij4WzvouWrQq7B7iYBjkMQrLS8wQqSP0REfA4W8g== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/monitoring@1.37.0": - version "1.37.0" - resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.37.0.tgz" - integrity sha512-fNw7pVdyZAAQQCJf1cc/ih4fwrRdQSgKwgor4gchsI/Q/ss9inmC6bl/69jvoRSzgZS9BX4elwHKdo0EfTli3w== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/recommend@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.37.0.tgz" - integrity sha512-U+FL5gzN2ldx3TYfQO5OAta2TBuIdabEdFwD5UVfWPsZE5nvOKkc/6BBqP54Z/adW/34c5ZrvvZhlhNTZujJXQ== - dependencies: - "@algolia/client-common" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -"@algolia/requester-browser-xhr@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.37.0.tgz" - integrity sha512-Ao8GZo8WgWFABrU7iq+JAftXV0t+UcOtCDL4mzHHZ+rQeTTf1TZssr4d0vIuoqkVNnKt9iyZ7T4lQff4ydcTrw== - dependencies: - "@algolia/client-common" "5.37.0" - -"@algolia/requester-fetch@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.37.0.tgz" - integrity sha512-H7OJOXrFg5dLcGJ22uxx8eiFId0aB9b0UBhoOi4SMSuDBe6vjJJ/LeZyY25zPaSvkXNBN3vAM+ad6M0h6ha3AA== - dependencies: - "@algolia/client-common" "5.37.0" - -"@algolia/requester-node-http@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.37.0.tgz" - integrity sha512-npZ9aeag4SGTx677eqPL3rkSPlQrnzx/8wNrl1P7GpWq9w/eTmRbOq+wKrJ2r78idlY0MMgmY/mld2tq6dc44g== - dependencies: - "@algolia/client-common" "5.37.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== - dependencies: - "@babel/helper-validator-identifier" "^7.27.1" - js-tokens "^4.0.0" - picocolors "^1.1.1" - -"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz" - integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.21.3", "@babel/core@^7.25.9", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz" - integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.4" - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.4" - "@babel/types" "^7.28.4" - "@jridgewell/remapping" "^2.3.5" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.25.9", "@babel/generator@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz" - integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== - dependencies: - "@babel/parser" "^7.28.3" - "@babel/types" "^7.28.2" - "@jridgewell/gen-mapping" "^0.3.12" - "@jridgewell/trace-mapping" "^0.3.28" - jsesc "^3.0.2" - -"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": - version "7.27.3" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz" - integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== - dependencies: - "@babel/types" "^7.27.3" - -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": - version "7.27.2" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== - dependencies: - "@babel/compat-data" "^7.27.2" - "@babel/helper-validator-option" "^7.27.1" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz" - integrity sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-member-expression-to-functions" "^7.27.1" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.3" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz" - integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - regexpu-core "^6.2.0" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.5": - version "0.6.5" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz" - integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== - dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - debug "^4.4.1" - lodash.debounce "^4.0.8" - resolve "^1.22.10" - -"@babel/helper-globals@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" - integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== - -"@babel/helper-member-expression-to-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz" - integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz" - integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.28.3" - -"@babel/helper-optimise-call-expression@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz" - integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-remap-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz" - integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-wrap-function" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-replace-supers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz" - integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.27.1" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz" - integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== - -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== - -"@babel/helper-validator-option@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" - integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== - -"@babel/helper-wrap-function@^7.27.1": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz" - integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== - dependencies: - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.3" - "@babel/types" "^7.28.2" - -"@babel/helpers@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz" - integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== - dependencies: - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" - -"@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz" - integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== - dependencies: - "@babel/types" "^7.28.4" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz" - integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz" - integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": - version "7.27.1" - 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.27.1.tgz" - integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz" - integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz" - integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.3" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - 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== - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - 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" - -"@babel/plugin-syntax-import-assertions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz" - integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-import-attributes@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz" - integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-jsx@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz" - integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-typescript@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz" - integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - 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== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz" - integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-async-generator-functions@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz" - integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-remap-async-to-generator" "^7.27.1" - "@babel/traverse" "^7.28.0" - -"@babel/plugin-transform-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz" - integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-remap-async-to-generator" "^7.27.1" - -"@babel/plugin-transform-block-scoped-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz" - integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-block-scoping@^7.28.0": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz" - integrity sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-class-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz" - integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-class-static-block@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz" - integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.3" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-classes@^7.28.3": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz" - integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-globals" "^7.28.0" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/traverse" "^7.28.4" - -"@babel/plugin-transform-computed-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz" - integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/template" "^7.27.1" - -"@babel/plugin-transform-destructuring@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz" - integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.0" - -"@babel/plugin-transform-dotall-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz" - integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-duplicate-keys@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz" - integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz" - integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-dynamic-import@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz" - integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-explicit-resource-management@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz" - integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" - -"@babel/plugin-transform-exponentiation-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz" - integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-export-namespace-from@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz" - integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-for-of@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz" - integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - -"@babel/plugin-transform-function-name@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz" - integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== - dependencies: - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/plugin-transform-json-strings@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz" - integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz" - integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-logical-assignment-operators@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz" - integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-member-expression-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz" - integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-modules-amd@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz" - integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-modules-commonjs@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-modules-systemjs@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz" - integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/plugin-transform-modules-umd@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz" - integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz" - integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-new-target@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz" - integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz" - integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-numeric-separator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz" - integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-object-rest-spread@^7.28.0": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz" - integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== - dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" - "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.4" - -"@babel/plugin-transform-object-super@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz" - integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - -"@babel/plugin-transform-optional-catch-binding@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz" - integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz" - integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - -"@babel/plugin-transform-parameters@^7.27.7": - version "7.27.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz" - integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-private-methods@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz" - integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-private-property-in-object@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz" - integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-property-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz" - integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz" - integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-react-display-name@^7.27.1": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz" - integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-react-jsx-development@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz" - integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.27.1" - -"@babel/plugin-transform-react-jsx@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz" - integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-syntax-jsx" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/plugin-transform-react-pure-annotations@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz" - integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-regenerator@^7.28.3": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz" - integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-regexp-modifiers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz" - integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-reserved-words@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz" - integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-runtime@^7.25.9": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz" - integrity sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - babel-plugin-polyfill-corejs2 "^0.4.14" - babel-plugin-polyfill-corejs3 "^0.13.0" - babel-plugin-polyfill-regenerator "^0.6.5" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz" - integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-spread@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz" - integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - -"@babel/plugin-transform-sticky-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz" - integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-template-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz" - integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-typeof-symbol@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz" - integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-typescript@^7.27.1": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz" - integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-syntax-typescript" "^7.27.1" - -"@babel/plugin-transform-unicode-escapes@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz" - integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-unicode-property-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz" - integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-unicode-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz" - integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-unicode-sets-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz" - integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz" - integrity sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg== - dependencies: - "@babel/compat-data" "^7.28.0" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.27.1" - "@babel/plugin-syntax-import-attributes" "^7.27.1" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.27.1" - "@babel/plugin-transform-async-generator-functions" "^7.28.0" - "@babel/plugin-transform-async-to-generator" "^7.27.1" - "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.0" - "@babel/plugin-transform-class-properties" "^7.27.1" - "@babel/plugin-transform-class-static-block" "^7.28.3" - "@babel/plugin-transform-classes" "^7.28.3" - "@babel/plugin-transform-computed-properties" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" - "@babel/plugin-transform-dotall-regex" "^7.27.1" - "@babel/plugin-transform-duplicate-keys" "^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" - "@babel/plugin-transform-dynamic-import" "^7.27.1" - "@babel/plugin-transform-explicit-resource-management" "^7.28.0" - "@babel/plugin-transform-exponentiation-operator" "^7.27.1" - "@babel/plugin-transform-export-namespace-from" "^7.27.1" - "@babel/plugin-transform-for-of" "^7.27.1" - "@babel/plugin-transform-function-name" "^7.27.1" - "@babel/plugin-transform-json-strings" "^7.27.1" - "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" - "@babel/plugin-transform-member-expression-literals" "^7.27.1" - "@babel/plugin-transform-modules-amd" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-modules-systemjs" "^7.27.1" - "@babel/plugin-transform-modules-umd" "^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" - "@babel/plugin-transform-new-target" "^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" - "@babel/plugin-transform-numeric-separator" "^7.27.1" - "@babel/plugin-transform-object-rest-spread" "^7.28.0" - "@babel/plugin-transform-object-super" "^7.27.1" - "@babel/plugin-transform-optional-catch-binding" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" - "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/plugin-transform-private-methods" "^7.27.1" - "@babel/plugin-transform-private-property-in-object" "^7.27.1" - "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.3" - "@babel/plugin-transform-regexp-modifiers" "^7.27.1" - "@babel/plugin-transform-reserved-words" "^7.27.1" - "@babel/plugin-transform-shorthand-properties" "^7.27.1" - "@babel/plugin-transform-spread" "^7.27.1" - "@babel/plugin-transform-sticky-regex" "^7.27.1" - "@babel/plugin-transform-template-literals" "^7.27.1" - "@babel/plugin-transform-typeof-symbol" "^7.27.1" - "@babel/plugin-transform-unicode-escapes" "^7.27.1" - "@babel/plugin-transform-unicode-property-regex" "^7.27.1" - "@babel/plugin-transform-unicode-regex" "^7.27.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.14" - babel-plugin-polyfill-corejs3 "^0.13.0" - babel-plugin-polyfill-regenerator "^0.6.5" - core-js-compat "^3.43.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - 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== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz" - integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-transform-react-display-name" "^7.27.1" - "@babel/plugin-transform-react-jsx" "^7.27.1" - "@babel/plugin-transform-react-jsx-development" "^7.27.1" - "@babel/plugin-transform-react-pure-annotations" "^7.27.1" - -"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz" - integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-syntax-jsx" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.27.1" - -"@babel/runtime-corejs3@^7.25.9": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz" - integrity sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ== - dependencies: - core-js-pure "^3.43.0" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9": - version "7.27.1" - -"@babel/template@^7.27.1", "@babel/template@^7.27.2": - version "7.27.2" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz" - integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" - "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.4" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" - debug "^4.3.1" - -"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz" - integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@cspell/cspell-bundled-dicts@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.19.4.tgz" - integrity sha512-2ZRcZP/ncJ5q953o8i+R0fb8+14PDt5UefUNMrFZZHvfTI0jukAASOQeLY+WT6ASZv6CgbPrApAdbppy9FaXYQ== - dependencies: - "@cspell/dict-ada" "^4.1.0" - "@cspell/dict-al" "^1.1.0" - "@cspell/dict-aws" "^4.0.10" - "@cspell/dict-bash" "^4.2.0" - "@cspell/dict-companies" "^3.1.15" - "@cspell/dict-cpp" "^6.0.8" - "@cspell/dict-cryptocurrencies" "^5.0.4" - "@cspell/dict-csharp" "^4.0.6" - "@cspell/dict-css" "^4.0.17" - "@cspell/dict-dart" "^2.3.0" - "@cspell/dict-data-science" "^2.0.8" - "@cspell/dict-django" "^4.1.4" - "@cspell/dict-docker" "^1.1.13" - "@cspell/dict-dotnet" "^5.0.9" - "@cspell/dict-elixir" "^4.0.7" - "@cspell/dict-en_us" "^4.4.3" - "@cspell/dict-en-common-misspellings" "^2.0.10" - "@cspell/dict-en-gb" "1.1.33" - "@cspell/dict-filetypes" "^3.0.11" - "@cspell/dict-flutter" "^1.1.0" - "@cspell/dict-fonts" "^4.0.4" - "@cspell/dict-fsharp" "^1.1.0" - "@cspell/dict-fullstack" "^3.2.6" - "@cspell/dict-gaming-terms" "^1.1.1" - "@cspell/dict-git" "^3.0.4" - "@cspell/dict-golang" "^6.0.20" - "@cspell/dict-google" "^1.0.8" - "@cspell/dict-haskell" "^4.0.5" - "@cspell/dict-html" "^4.0.11" - "@cspell/dict-html-symbol-entities" "^4.0.3" - "@cspell/dict-java" "^5.0.11" - "@cspell/dict-julia" "^1.1.0" - "@cspell/dict-k8s" "^1.0.10" - "@cspell/dict-kotlin" "^1.1.0" - "@cspell/dict-latex" "^4.0.3" - "@cspell/dict-lorem-ipsum" "^4.0.4" - "@cspell/dict-lua" "^4.0.7" - "@cspell/dict-makefile" "^1.0.4" - "@cspell/dict-markdown" "^2.0.10" - "@cspell/dict-monkeyc" "^1.0.10" - "@cspell/dict-node" "^5.0.7" - "@cspell/dict-npm" "^5.2.1" - "@cspell/dict-php" "^4.0.14" - "@cspell/dict-powershell" "^5.0.14" - "@cspell/dict-public-licenses" "^2.0.13" - "@cspell/dict-python" "^4.2.17" - "@cspell/dict-r" "^2.1.0" - "@cspell/dict-ruby" "^5.0.8" - "@cspell/dict-rust" "^4.0.11" - "@cspell/dict-scala" "^5.0.7" - "@cspell/dict-shell" "^1.1.0" - "@cspell/dict-software-terms" "^5.0.5" - "@cspell/dict-sql" "^2.2.0" - "@cspell/dict-svelte" "^1.0.6" - "@cspell/dict-swift" "^2.0.5" - "@cspell/dict-terraform" "^1.1.1" - "@cspell/dict-typescript" "^3.2.1" - "@cspell/dict-vue" "^3.0.4" - -"@cspell/cspell-json-reporter@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.19.4.tgz" - integrity sha512-pOlUtLUmuDdTIOhDTvWxxta0Wm8RCD/p1V0qUqeP6/Ups1ajBI4FWEpRFd7yMBTUHeGeSNicJX5XeX7wNbAbLQ== - dependencies: - "@cspell/cspell-types" "8.19.4" - -"@cspell/cspell-pipe@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.19.4.tgz" - integrity sha512-GNAyk+7ZLEcL2fCMT5KKZprcdsq3L1eYy3e38/tIeXfbZS7Sd1R5FXUe6CHXphVWTItV39TvtLiDwN/2jBts9A== - -"@cspell/cspell-resolver@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.19.4.tgz" - integrity sha512-S8vJMYlsx0S1D60glX8H2Jbj4mD8519VjyY8lu3fnhjxfsl2bDFZvF3ZHKsLEhBE+Wh87uLqJDUJQiYmevHjDg== - dependencies: - global-directory "^4.0.1" - -"@cspell/cspell-service-bus@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.19.4.tgz" - integrity sha512-uhY+v8z5JiUogizXW2Ft/gQf3eWrh5P9036jN2Dm0UiwEopG/PLshHcDjRDUiPdlihvA0RovrF0wDh4ptcrjuQ== - -"@cspell/cspell-types@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.19.4.tgz" - integrity sha512-ekMWuNlFiVGfsKhfj4nmc8JCA+1ZltwJgxiKgDuwYtR09ie340RfXFF6YRd2VTW5zN7l4F1PfaAaPklVz6utSg== - -"@cspell/dict-ada@^4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.0.tgz" - integrity sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg== - -"@cspell/dict-al@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.0.tgz" - integrity sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg== - -"@cspell/dict-aws@^4.0.10": - version "4.0.10" - resolved "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.10.tgz" - integrity sha512-0qW4sI0GX8haELdhfakQNuw7a2pnWXz3VYQA2MpydH2xT2e6EN9DWFpKAi8DfcChm8MgDAogKkoHtIo075iYng== - -"@cspell/dict-bash@^4.2.0": - version "4.2.0" - resolved "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.0.tgz" - integrity sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg== - dependencies: - "@cspell/dict-shell" "1.1.0" - -"@cspell/dict-companies@^3.1.15": - version "3.2.1" - resolved "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.1.tgz" - integrity sha512-ryaeJ1KhTTKL4mtinMtKn8wxk6/tqD4vX5tFP+Hg89SiIXmbMk5vZZwVf+eyGUWJOyw5A1CVj9EIWecgoi+jYQ== - -"@cspell/dict-cpp@^6.0.8": - version "6.0.8" - resolved "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.8.tgz" - integrity sha512-BzurRZilWqaJt32Gif6/yCCPi+FtrchjmnehVEIFzbWyeBd/VOUw77IwrEzehZsu5cRU91yPWuWp5fUsKfDAXA== - -"@cspell/dict-cryptocurrencies@^5.0.4": - version "5.0.4" - resolved "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.4.tgz" - integrity sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag== - -"@cspell/dict-csharp@^4.0.6": - version "4.0.6" - resolved "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.6.tgz" - integrity sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw== - -"@cspell/dict-css@^4.0.17": - version "4.0.17" - resolved "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.17.tgz" - integrity sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w== - -"@cspell/dict-dart@^2.3.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.0.tgz" - integrity sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg== - -"@cspell/dict-data-science@^2.0.8": - version "2.0.8" - resolved "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.8.tgz" - integrity sha512-uyAtT+32PfM29wRBeAkUSbkytqI8bNszNfAz2sGPtZBRmsZTYugKMEO9eDjAIE/pnT9CmbjNuoiXhk+Ss4fCOg== - -"@cspell/dict-django@^4.1.4": - version "4.1.4" - resolved "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.4.tgz" - integrity sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg== - -"@cspell/dict-docker@^1.1.13": - version "1.1.14" - resolved "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.14.tgz" - integrity sha512-p6Qz5mokvcosTpDlgSUREdSbZ10mBL3ndgCdEKMqjCSZJFdfxRdNdjrGER3lQ6LMq5jGr1r7nGXA0gvUJK80nw== - -"@cspell/dict-dotnet@^5.0.9": - version "5.0.9" - resolved "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.9.tgz" - integrity sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ== - -"@cspell/dict-elixir@^4.0.7": - version "4.0.7" - resolved "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.7.tgz" - integrity sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA== - -"@cspell/dict-en_us@^4.4.3": - version "4.4.8" - resolved "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.8.tgz" - integrity sha512-OkNUVuU9Q+Sf827/61YPkk6ya6dSsllzeYniBFqNW9TkoqQXT3vggkgmtCE1aEhSvVctMwxpPYoC8pZgn1TeSA== - -"@cspell/dict-en-common-misspellings@^2.0.10": - version "2.0.11" - resolved "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.11.tgz" - integrity sha512-xFQjeg0wFHh9sFhshpJ+5BzWR1m9Vu8pD0CGPkwZLK9oii8AD8RXNchabLKy/O5VTLwyqPOi9qpyp1cxm3US4Q== - -"@cspell/dict-en-gb@1.1.33": - version "1.1.33" - resolved "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz" - integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g== - -"@cspell/dict-filetypes@^3.0.11": - version "3.0.12" - resolved "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.12.tgz" - integrity sha512-+ds5wgNdlUxuJvhg8A1TjuSpalDFGCh7SkANCWvIplg6QZPXL4j83lqxP7PgjHpx7PsBUS7vw0aiHPjZy9BItw== - -"@cspell/dict-flutter@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.0.tgz" - integrity sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA== - -"@cspell/dict-fonts@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.4.tgz" - integrity sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg== - -"@cspell/dict-fsharp@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.0.tgz" - integrity sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw== - -"@cspell/dict-fullstack@^3.2.6": - version "3.2.6" - resolved "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.6.tgz" - integrity sha512-cSaq9rz5RIU9j+0jcF2vnKPTQjxGXclntmoNp4XB7yFX2621PxJcekGjwf/lN5heJwVxGLL9toR0CBlGKwQBgA== - -"@cspell/dict-gaming-terms@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.1.tgz" - integrity sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ== - -"@cspell/dict-git@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.4.tgz" - integrity sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg== - -"@cspell/dict-golang@^6.0.20": - version "6.0.21" - resolved "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.21.tgz" - integrity sha512-D3wG1MWhFx54ySFJ00CS1MVjR4UiBVsOWGIjJ5Av+HamnguqEshxbF9mvy+BX0KqzdLVzwFkoLBs8QeOID56HA== - -"@cspell/dict-google@^1.0.8": - version "1.0.8" - resolved "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.8.tgz" - integrity sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A== - -"@cspell/dict-haskell@^4.0.5": - version "4.0.5" - resolved "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.5.tgz" - integrity sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ== - -"@cspell/dict-html-symbol-entities@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz" - integrity sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A== - -"@cspell/dict-html@^4.0.11": - version "4.0.11" - resolved "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.11.tgz" - integrity sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw== - -"@cspell/dict-java@^5.0.11": - version "5.0.11" - resolved "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.11.tgz" - integrity sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w== - -"@cspell/dict-julia@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.0.tgz" - integrity sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w== - -"@cspell/dict-k8s@^1.0.10": - version "1.0.10" - resolved "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.10.tgz" - integrity sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw== - -"@cspell/dict-kotlin@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.0.tgz" - integrity sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ== - -"@cspell/dict-latex@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.3.tgz" - integrity sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw== - -"@cspell/dict-lorem-ipsum@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.4.tgz" - integrity sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw== - -"@cspell/dict-lua@^4.0.7": - version "4.0.7" - resolved "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.7.tgz" - integrity sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q== - -"@cspell/dict-makefile@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.4.tgz" - integrity sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw== - -"@cspell/dict-markdown@^2.0.10": - version "2.0.10" - resolved "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.10.tgz" - integrity sha512-vtVa6L/84F9sTjclTYDkWJF/Vx2c5xzxBKkQp+CEFlxOF2SYgm+RSoEvAvg5vj4N5kuqR4350ZlY3zl2eA3MXw== - -"@cspell/dict-monkeyc@^1.0.10": - version "1.0.10" - resolved "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.10.tgz" - integrity sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw== - -"@cspell/dict-node@^5.0.7": - version "5.0.7" - resolved "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.7.tgz" - integrity sha512-ZaPpBsHGQCqUyFPKLyCNUH2qzolDRm1/901IO8e7btk7bEDF56DN82VD43gPvD4HWz3yLs/WkcLa01KYAJpnOw== - -"@cspell/dict-npm@^5.2.1": - version "5.2.3" - resolved "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.3.tgz" - integrity sha512-EdGkCpAq66Mhi9Qldgsr+NvPVL4TdtmdlqDe4VBp0P3n6J0B7b0jT1MlVDIiLR+F1eqBfL0qjfHf0ey1CafeNw== - -"@cspell/dict-php@^4.0.14": - version "4.0.14" - resolved "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.14.tgz" - integrity sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g== - -"@cspell/dict-powershell@^5.0.14": - version "5.0.14" - resolved "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.14.tgz" - integrity sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA== - -"@cspell/dict-public-licenses@^2.0.13": - version "2.0.13" - resolved "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.13.tgz" - integrity sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ== - -"@cspell/dict-python@^4.2.17": - version "4.2.18" - resolved "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.18.tgz" - integrity sha512-hYczHVqZBsck7DzO5LumBLJM119a3F17aj8a7lApnPIS7cmEwnPc2eACNscAHDk7qAo2127oI7axUoFMe9/g1g== - dependencies: - "@cspell/dict-data-science" "^2.0.8" - -"@cspell/dict-r@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.0.tgz" - integrity sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA== - -"@cspell/dict-ruby@^5.0.8": - version "5.0.8" - resolved "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.8.tgz" - integrity sha512-ixuTneU0aH1cPQRbWJvtvOntMFfeQR2KxT8LuAv5jBKqQWIHSxzGlp+zX3SVyoeR0kOWiu64/O5Yn836A5yMcQ== - -"@cspell/dict-rust@^4.0.11": - version "4.0.11" - resolved "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.11.tgz" - integrity sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw== - -"@cspell/dict-scala@^5.0.7": - version "5.0.7" - resolved "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.7.tgz" - integrity sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA== - -"@cspell/dict-shell@^1.1.0", "@cspell/dict-shell@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.0.tgz" - integrity sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ== - -"@cspell/dict-software-terms@^5.0.5": - version "5.0.8" - resolved "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.0.8.tgz" - integrity sha512-VsJesitvaHZpMgNwHHms3yDsZz7LNToC2HuSAnyt1znn37ribiJF1ty0jWhVQO6fv7K4PM1KsKTJIwqBwc446g== - -"@cspell/dict-sql@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.0.tgz" - integrity sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ== - -"@cspell/dict-svelte@^1.0.6": - version "1.0.6" - resolved "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.6.tgz" - integrity sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q== - -"@cspell/dict-swift@^2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.5.tgz" - integrity sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA== - -"@cspell/dict-terraform@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.1.tgz" - integrity sha512-07KFDwCU7EnKl4hOZLsLKlj6Zceq/IsQ3LRWUyIjvGFfZHdoGtFdCp3ZPVgnFaAcd/DKv+WVkrOzUBSYqHopQQ== - -"@cspell/dict-typescript@^3.2.1": - version "3.2.1" - resolved "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.1.tgz" - integrity sha512-jdnKg4rBl75GUBTsUD6nTJl7FGvaIt5wWcWP7TZSC3rV1LfkwvbUiY3PiGpfJlAIdnLYSeFWIpYU9gyVgz206w== - -"@cspell/dict-vue@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.4.tgz" - integrity sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w== - -"@cspell/dynamic-import@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.19.4.tgz" - integrity sha512-0LLghC64+SiwQS20Sa0VfFUBPVia1rNyo0bYeIDoB34AA3qwguDBVJJkthkpmaP1R2JeR/VmxmJowuARc4ZUxA== - dependencies: - "@cspell/url" "8.19.4" - import-meta-resolve "^4.1.0" - -"@cspell/filetypes@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.19.4.tgz" - integrity sha512-D9hOCMyfKtKjjqQJB8F80PWsjCZhVGCGUMiDoQpcta0e+Zl8vHgzwaC0Ai4QUGBhwYEawHGiWUd7Y05u/WXiNQ== - -"@cspell/strong-weak-map@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.19.4.tgz" - integrity sha512-MUfFaYD8YqVe32SQaYLI24/bNzaoyhdBIFY5pVrvMo1ZCvMl8AlfI2OcBXvcGb5aS5z7sCNCJm11UuoYbLI1zw== - -"@cspell/url@8.19.4": - version "8.19.4" - resolved "https://registry.npmjs.org/@cspell/url/-/url-8.19.4.tgz" - integrity sha512-Pa474iBxS+lxsAL4XkETPGIq3EgMLCEb9agj3hAd2VGMTCApaiUvamR4b+uGXIPybN70piFxvzrfoxsG2uIP6A== - -"@csstools/cascade-layer-name-parser@^2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz" - integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== - -"@csstools/color-helpers@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz" - integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== - -"@csstools/css-calc@^2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz" - integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== - -"@csstools/css-color-parser@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz" - integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== - dependencies: - "@csstools/color-helpers" "^5.1.0" - "@csstools/css-calc" "^2.1.4" - -"@csstools/css-parser-algorithms@^3.0.5": - version "3.0.5" - resolved "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz" - integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== - -"@csstools/css-tokenizer@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz" - integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== - -"@csstools/media-query-list-parser@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz" - integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== - -"@csstools/postcss-alpha-function@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.0.tgz" - integrity sha512-r2L8KNg5Wriq5n8IUQcjzy2Rh37J5YjzP9iOyHZL5fxdWYHB08vqykHQa4wAzN/tXwDuCHnhQDGCtxfS76xn7g== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-cascade-layers@^5.0.2": - version "5.0.2" - resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz" - integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -"@csstools/postcss-color-function-display-p3-linear@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.0.tgz" - integrity sha512-7q+OuUqfowRrP84m/Jl0wv3pfCQyUTCW5MxDIux+/yty5IkUUHOTigCjrC0Fjy3OT0ncGLudHbfLWmP7E1arNA== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-color-function@^4.0.11": - version "4.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.11.tgz" - integrity sha512-AtH22zLHTLm64HLdpv5EedT/zmYTm1MtdQbQhRZXxEB6iYtS6SrS1jLX3TcmUWMFzpumK/OVylCm3HcLms4slw== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-color-mix-function@^3.0.11": - version "3.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.11.tgz" - integrity sha512-cQpXBelpTx0YhScZM5Ve0jDCA4RzwFc7oNafzZOGgCHt/GQVYiU8Vevz9QJcwy/W0Pyi/BneY+KMjz23lI9r+Q== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.1.tgz" - integrity sha512-c7hyBtbF+jlHIcUGVdWY06bHICgguV9ypfcELU3eU3W/9fiz2dxM8PqxQk2ndXYTzLnwPvNNqu1yCmQ++N6Dcg== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-content-alt-text@^2.0.7": - version "2.0.7" - resolved "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.7.tgz" - integrity sha512-cq/zWaEkpcg3RttJ5+GdNwk26NwxY5KgqgtNL777Fdd28AVGHxuBvqmK4Jq4oKhW1NX4M2LbgYAVVN0NZ+/XYQ== - dependencies: - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-exponential-functions@^2.0.9": - version "2.0.9" - resolved "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz" - integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - -"@csstools/postcss-font-format-keywords@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz" - integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gamut-mapping@^2.0.11": - version "2.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz" - integrity sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - -"@csstools/postcss-gradients-interpolation-method@^5.0.11": - version "5.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.11.tgz" - integrity sha512-8M3mcNTL3cGIJXDnvrJ2oWEcKi3zyw7NeYheFKePUlBmLYm1gkw9Rr/BA7lFONrOPeQA3yeMPldrrws6lqHrug== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-hwb-function@^4.0.11": - version "4.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.11.tgz" - integrity sha512-9meZbsVWTZkWsSBazQips3cHUOT29a/UAwFz0AMEXukvpIGGDR9+GMl3nIckWO5sPImsadu4F5Zy+zjt8QgCdA== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-ic-unit@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.3.tgz" - integrity sha512-RtYYm2qUIu9vAaHB0cC8rQGlOCQAUgEc2tMr7ewlGXYipBQKjoWmyVArqsk7SEr8N3tErq6P6UOJT3amaVof5Q== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-initial@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz" - integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== - -"@csstools/postcss-is-pseudo-class@^5.0.3": - version "5.0.3" - resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz" - integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -"@csstools/postcss-light-dark-function@^2.0.10": - version "2.0.10" - resolved "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.10.tgz" - integrity sha512-g7Lwb294lSoNnyrwcqoooh9fTAp47rRNo+ILg7SLRSMU3K9ePIwRt566sNx+pehiCelv4E1ICaU1EwLQuyF2qw== - dependencies: - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-logical-float-and-clear@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz" - integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== - -"@csstools/postcss-logical-overflow@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz" - integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== - -"@csstools/postcss-logical-overscroll-behavior@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz" - integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== - -"@csstools/postcss-logical-resize@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz" - integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz" - integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ== - dependencies: - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-media-minmax@^2.0.9": - version "2.0.9" - resolved "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz" - integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/media-query-list-parser" "^4.0.3" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5": - version "3.0.5" - resolved "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz" - integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg== - dependencies: - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/media-query-list-parser" "^4.0.3" - -"@csstools/postcss-nested-calc@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz" - integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz" - integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^4.0.11": - version "4.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.11.tgz" - integrity sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-progressive-custom-properties@^4.2.0": - version "4.2.0" - resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.0.tgz" - integrity sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-random-function@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz" - integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - -"@csstools/postcss-relative-color-syntax@^3.0.11": - version "3.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.11.tgz" - integrity sha512-oQ5fZvkcBrWR+k6arHXk0F8FlkmD4IxM+rcGDLWrF2f31tWyEM3lSraeWAV0f7BGH6LIrqmyU3+Qo/1acfoJng== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-scope-pseudo-class@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz" - integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== - dependencies: - postcss-selector-parser "^7.0.0" - -"@csstools/postcss-sign-functions@^1.1.4": - version "1.1.4" - resolved "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz" - integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - -"@csstools/postcss-stepped-value-functions@^4.0.9": - version "4.0.9" - resolved "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz" - integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - -"@csstools/postcss-text-decoration-shorthand@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz" - integrity sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA== - dependencies: - "@csstools/color-helpers" "^5.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^4.0.9": - version "4.0.9" - resolved "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz" - integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - -"@csstools/postcss-unset-value@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz" - integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== - -"@csstools/selector-resolve-nested@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz" - integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== - -"@csstools/selector-specificity@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz" - integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== - -"@csstools/utilities@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz" - integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== - -"@discoveryjs/json-ext@0.5.7": - version "0.5.7" - resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@docsearch/css@3.9.0": - version "3.9.0" - resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz" - integrity sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA== - -"@docsearch/react@^3.9.0": - version "3.9.0" - resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz" - integrity sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ== - dependencies: - "@algolia/autocomplete-core" "1.17.9" - "@algolia/autocomplete-preset-algolia" "1.17.9" - "@docsearch/css" "3.9.0" - algoliasearch "^5.14.2" - -"@docusaurus/babel@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz" - integrity sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw== - dependencies: - "@babel/core" "^7.25.9" - "@babel/generator" "^7.25.9" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.25.9" - "@babel/preset-env" "^7.25.9" - "@babel/preset-react" "^7.25.9" - "@babel/preset-typescript" "^7.25.9" - "@babel/runtime" "^7.25.9" - "@babel/runtime-corejs3" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.8.1" - "@docusaurus/utils" "3.8.1" - babel-plugin-dynamic-import-node "^2.3.3" - fs-extra "^11.1.1" - tslib "^2.6.0" - -"@docusaurus/bundler@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz" - integrity sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA== - dependencies: - "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.8.1" - "@docusaurus/cssnano-preset" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - babel-loader "^9.2.1" - clean-css "^5.3.3" - copy-webpack-plugin "^11.0.0" - css-loader "^6.11.0" - css-minimizer-webpack-plugin "^5.0.1" - cssnano "^6.1.2" - file-loader "^6.2.0" - html-minifier-terser "^7.2.0" - mini-css-extract-plugin "^2.9.2" - null-loader "^4.0.1" - postcss "^8.5.4" - postcss-loader "^7.3.4" - postcss-preset-env "^10.2.1" - terser-webpack-plugin "^5.3.9" - tslib "^2.6.0" - url-loader "^4.1.1" - webpack "^5.95.0" - webpackbar "^6.0.1" - -"@docusaurus/core@^3.8.1", "@docusaurus/core@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz" - integrity sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA== - dependencies: - "@docusaurus/babel" "3.8.1" - "@docusaurus/bundler" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - boxen "^6.2.1" - chalk "^4.1.2" - chokidar "^3.5.3" - cli-table3 "^0.6.3" - combine-promises "^1.1.0" - commander "^5.1.0" - core-js "^3.31.1" - detect-port "^1.5.1" - escape-html "^1.0.3" - eta "^2.2.0" - eval "^0.1.8" - execa "5.1.1" - fs-extra "^11.1.1" - html-tags "^3.3.1" - html-webpack-plugin "^5.6.0" - leven "^3.1.0" - lodash "^4.17.21" - open "^8.4.0" - p-map "^4.0.0" - prompts "^2.4.2" - react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.4" - react-router-config "^5.1.1" - react-router-dom "^5.3.4" - semver "^7.5.4" - serve-handler "^6.1.6" - tinypool "^1.0.2" - tslib "^2.6.0" - update-notifier "^6.0.2" - webpack "^5.95.0" - webpack-bundle-analyzer "^4.10.2" - webpack-dev-server "^4.15.2" - webpack-merge "^6.0.1" - -"@docusaurus/cssnano-preset@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz" - integrity sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug== - dependencies: - cssnano-preset-advanced "^6.1.2" - postcss "^8.5.4" - postcss-sort-media-queries "^5.2.0" - tslib "^2.6.0" - -"@docusaurus/logger@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz" - integrity sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww== - dependencies: - chalk "^4.1.2" - tslib "^2.6.0" - -"@docusaurus/mdx-loader@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz" - integrity sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w== - dependencies: - "@docusaurus/logger" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - "@mdx-js/mdx" "^3.0.0" - "@slorber/remark-comment" "^1.0.0" - escape-html "^1.0.3" - estree-util-value-to-estree "^3.0.1" - file-loader "^6.2.0" - fs-extra "^11.1.1" - image-size "^2.0.2" - mdast-util-mdx "^3.0.0" - mdast-util-to-string "^4.0.0" - rehype-raw "^7.0.0" - remark-directive "^3.0.0" - remark-emoji "^4.0.0" - remark-frontmatter "^5.0.0" - remark-gfm "^4.0.0" - stringify-object "^3.3.0" - tslib "^2.6.0" - unified "^11.0.3" - unist-util-visit "^5.0.0" - url-loader "^4.1.1" - vfile "^6.0.1" - webpack "^5.88.1" - -"@docusaurus/module-type-aliases@^3.8.1", "@docusaurus/module-type-aliases@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz" - integrity sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg== - dependencies: - "@docusaurus/types" "3.8.1" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - "@types/react-router-dom" "*" - react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - -"@docusaurus/plugin-client-redirects@^3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.1.tgz" - integrity sha512-F+86R7PBn6VNgy/Ux8w3ZRypJGJEzksbejQKlbTC8u6uhBUhfdXWkDp6qdOisIoW0buY5nLqucvZt1zNJzhJhA== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - eta "^2.2.0" - fs-extra "^11.1.1" - lodash "^4.17.21" - tslib "^2.6.0" - -"@docusaurus/plugin-content-blog@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz" - integrity sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/theme-common" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - cheerio "1.0.0-rc.12" - feed "^4.2.2" - fs-extra "^11.1.1" - lodash "^4.17.21" - schema-dts "^1.1.2" - srcset "^4.0.0" - tslib "^2.6.0" - unist-util-visit "^5.0.0" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@docusaurus/plugin-content-docs@*", "@docusaurus/plugin-content-docs@^3.8.1", "@docusaurus/plugin-content-docs@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz" - integrity sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/module-type-aliases" "3.8.1" - "@docusaurus/theme-common" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - "@types/react-router-config" "^5.0.7" - combine-promises "^1.1.0" - fs-extra "^11.1.1" - js-yaml "^4.1.0" - lodash "^4.17.21" - schema-dts "^1.1.2" - tslib "^2.6.0" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@docusaurus/plugin-content-pages@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz" - integrity sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - fs-extra "^11.1.1" - tslib "^2.6.0" - webpack "^5.88.1" - -"@docusaurus/plugin-css-cascade-layers@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz" - integrity sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - tslib "^2.6.0" - -"@docusaurus/plugin-debug@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz" - integrity sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - fs-extra "^11.1.1" - react-json-view-lite "^2.3.0" - tslib "^2.6.0" - -"@docusaurus/plugin-google-analytics@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz" - integrity sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - tslib "^2.6.0" - -"@docusaurus/plugin-google-gtag@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz" - integrity sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - "@types/gtag.js" "^0.0.12" - tslib "^2.6.0" - -"@docusaurus/plugin-google-tag-manager@^3.8.1", "@docusaurus/plugin-google-tag-manager@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz" - integrity sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - tslib "^2.6.0" - -"@docusaurus/plugin-sitemap@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz" - integrity sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - fs-extra "^11.1.1" - sitemap "^7.1.1" - tslib "^2.6.0" - -"@docusaurus/plugin-svgr@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz" - integrity sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - "@svgr/core" "8.1.0" - "@svgr/webpack" "^8.1.0" - tslib "^2.6.0" - webpack "^5.88.1" - -"@docusaurus/preset-classic@^3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz" - integrity sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/plugin-content-blog" "3.8.1" - "@docusaurus/plugin-content-docs" "3.8.1" - "@docusaurus/plugin-content-pages" "3.8.1" - "@docusaurus/plugin-css-cascade-layers" "3.8.1" - "@docusaurus/plugin-debug" "3.8.1" - "@docusaurus/plugin-google-analytics" "3.8.1" - "@docusaurus/plugin-google-gtag" "3.8.1" - "@docusaurus/plugin-google-tag-manager" "3.8.1" - "@docusaurus/plugin-sitemap" "3.8.1" - "@docusaurus/plugin-svgr" "3.8.1" - "@docusaurus/theme-classic" "3.8.1" - "@docusaurus/theme-common" "3.8.1" - "@docusaurus/theme-search-algolia" "3.8.1" - "@docusaurus/types" "3.8.1" - -"@docusaurus/theme-classic@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz" - integrity sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw== - dependencies: - "@docusaurus/core" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/module-type-aliases" "3.8.1" - "@docusaurus/plugin-content-blog" "3.8.1" - "@docusaurus/plugin-content-docs" "3.8.1" - "@docusaurus/plugin-content-pages" "3.8.1" - "@docusaurus/theme-common" "3.8.1" - "@docusaurus/theme-translations" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - "@mdx-js/react" "^3.0.0" - clsx "^2.0.0" - copy-text-to-clipboard "^3.2.0" - infima "0.2.0-alpha.45" - lodash "^4.17.21" - nprogress "^0.2.0" - postcss "^8.5.4" - prism-react-renderer "^2.3.0" - prismjs "^1.29.0" - react-router-dom "^5.3.4" - rtlcss "^4.1.0" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-common@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz" - integrity sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw== - dependencies: - "@docusaurus/mdx-loader" "3.8.1" - "@docusaurus/module-type-aliases" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - clsx "^2.0.0" - parse-numeric-range "^1.3.0" - prism-react-renderer "^2.3.0" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-search-algolia@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz" - integrity sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ== - dependencies: - "@docsearch/react" "^3.9.0" - "@docusaurus/core" "3.8.1" - "@docusaurus/logger" "3.8.1" - "@docusaurus/plugin-content-docs" "3.8.1" - "@docusaurus/theme-common" "3.8.1" - "@docusaurus/theme-translations" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-validation" "3.8.1" - algoliasearch "^5.17.1" - algoliasearch-helper "^3.22.6" - clsx "^2.0.0" - eta "^2.2.0" - fs-extra "^11.1.1" - lodash "^4.17.21" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-translations@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz" - integrity sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g== - dependencies: - fs-extra "^11.1.1" - tslib "^2.6.0" - -"@docusaurus/tsconfig@^3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.8.1.tgz" - integrity sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A== - -"@docusaurus/types@^3.8.1", "@docusaurus/types@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz" - integrity sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg== - dependencies: - "@mdx-js/mdx" "^3.0.0" - "@types/history" "^4.7.11" - "@types/react" "*" - commander "^5.1.0" - joi "^17.9.2" - react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" - utility-types "^3.10.0" - webpack "^5.95.0" - webpack-merge "^5.9.0" - -"@docusaurus/utils-common@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz" - integrity sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg== - dependencies: - "@docusaurus/types" "3.8.1" - tslib "^2.6.0" - -"@docusaurus/utils-validation@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz" - integrity sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA== - dependencies: - "@docusaurus/logger" "3.8.1" - "@docusaurus/utils" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - fs-extra "^11.2.0" - joi "^17.9.2" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.6.0" - -"@docusaurus/utils@3.8.1": - version "3.8.1" - resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz" - integrity sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ== - dependencies: - "@docusaurus/logger" "3.8.1" - "@docusaurus/types" "3.8.1" - "@docusaurus/utils-common" "3.8.1" - escape-string-regexp "^4.0.0" - execa "5.1.1" - file-loader "^6.2.0" - fs-extra "^11.1.1" - github-slugger "^1.5.0" - globby "^11.1.0" - gray-matter "^4.0.3" - jiti "^1.20.0" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - p-queue "^6.6.2" - prompts "^2.4.2" - resolve-pathname "^3.0.0" - tslib "^2.6.0" - url-loader "^4.1.1" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": - version "9.3.0" - resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.1.0": - 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" - -"@jest/schemas@^29.6.3": - 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" - -"@jest/types@^29.6.3": - 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" - -"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" - integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/remapping@^2.3.5": - version "2.3.5" - resolved "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz" - integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/source-map@^0.3.3": - 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" - -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": - version "0.3.31" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" - integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== - -"@mdx-js/mdx@^3.0.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz" - integrity sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdx" "^2.0.0" - acorn "^8.0.0" - collapse-white-space "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-util-scope "^1.0.0" - estree-walker "^3.0.0" - hast-util-to-jsx-runtime "^2.0.0" - markdown-extensions "^2.0.0" - recma-build-jsx "^1.0.0" - recma-jsx "^1.0.0" - recma-stringify "^1.0.0" - rehype-recma "^1.0.0" - remark-mdx "^3.0.0" - remark-parse "^11.0.0" - remark-rehype "^11.0.0" - source-map "^0.7.0" - unified "^11.0.0" - unist-util-position-from-estree "^2.0.0" - unist-util-stringify-position "^4.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -"@mdx-js/react@^3.0.0", "@mdx-js/react@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz" - integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== - dependencies: - "@types/mdx" "^2.0.0" - -"@nodelib/fs.scandir@2.1.5": - 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" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - 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" - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.3.1" - resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" - integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.29" - resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz" - integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== - -"@sideway/address@^4.1.5": - 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" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/is@^5.2.0": - version "5.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz" - integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== - -"@slorber/remark-comment@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz" - integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.1.0" - micromark-util-symbol "^1.0.1" - -"@svgr/babel-plugin-add-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" - integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== - -"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz" - integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== - -"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz" - integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz" - integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== - -"@svgr/babel-plugin-svg-dynamic-title@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz" - integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== - -"@svgr/babel-plugin-svg-em-dimensions@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz" - integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== - -"@svgr/babel-plugin-transform-react-native-svg@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz" - integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== - -"@svgr/babel-plugin-transform-svg-component@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz" - integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== - -"@svgr/babel-preset@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz" - integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" - "@svgr/babel-plugin-transform-svg-component" "8.0.0" - -"@svgr/core@*", "@svgr/core@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" - integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - camelcase "^6.2.0" - cosmiconfig "^8.1.3" - snake-case "^3.0.4" - -"@svgr/hast-util-to-babel-ast@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz" - integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== - dependencies: - "@babel/types" "^7.21.3" - entities "^4.4.0" - -"@svgr/plugin-jsx@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz" - integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - "@svgr/hast-util-to-babel-ast" "8.0.0" - svg-parser "^2.0.4" - -"@svgr/plugin-svgo@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz" - integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== - dependencies: - cosmiconfig "^8.1.3" - deepmerge "^4.3.1" - svgo "^3.0.2" - -"@svgr/webpack@^8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz" - integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== - dependencies: - "@babel/core" "^7.21.3" - "@babel/plugin-transform-react-constant-elements" "^7.21.3" - "@babel/preset-env" "^7.20.2" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.21.0" - "@svgr/core" "8.1.0" - "@svgr/plugin-jsx" "8.1.0" - "@svgr/plugin-svgo" "8.1.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/body-parser@*": - version "1.19.5" - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.13" - resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz" - integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.4" - resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz" - integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/eslint-scope@^3.7.7": - version "3.7.7" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "9.6.1" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" - integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" - integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6": - version "1.0.7" - -"@types/express-serve-static-core@*": - version "5.0.6" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz" - integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.19.6" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" - integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.21" - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/gtag.js@^0.0.12": - version "0.0.12" - resolved "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz" - integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== - -"@types/hast@^3.0.0": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-cache-semantics@^4.0.2": - version "4.0.4" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-errors@*": - version "2.0.4" - -"@types/http-proxy@^1.17.8": - version "1.17.16" - resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz" - integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - 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== - -"@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" "*" - -"@types/istanbul-reports@^3.0.0": - 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" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/mdast@^4.0.0", "@types/mdast@^4.0.2": - version "4.0.4" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz" - integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== - dependencies: - "@types/unist" "*" - -"@types/mdx@^2.0.0": - version "2.0.13" - resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz" - integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/ms@*": - version "2.1.0" - resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" - integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== - -"@types/node-forge@^1.3.0": - version "1.3.11" - resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz" - integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "22.15.3" - dependencies: - undici-types "~6.21.0" - -"@types/node@^17.0.5": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - -"@types/prismjs@^1.26.0": - version "1.26.5" - resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz" - integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== - -"@types/qs@*": - version "6.9.18" - -"@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== - -"@types/react-router-config@*", "@types/react-router-config@^5.0.7": - version "5.0.11" - resolved "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz" - integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "^5.1.0" - -"@types/react-router-dom@*": - version "5.3.3" - resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*", "@types/react-router@^5.1.0": - version "5.1.20" - resolved "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz" - integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - -"@types/react@*", "@types/react@>= 16.8.0 < 20.0.0", "@types/react@>=16": - version "19.1.2" - dependencies: - csstype "^3.0.2" - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/sax@^1.2.1": - version "1.2.7" - resolved "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz" - integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== - dependencies: - "@types/node" "*" - -"@types/send@*": - version "0.17.4" - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.4" - resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz" - integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.7" - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/sockjs@^0.3.33": - version "0.3.36" - resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz" - integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== - -"@types/unist@^2.0.0": - version "2.0.11" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== - -"@types/ws@^8.5.5": - version "8.18.1" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz" - integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== - dependencies: - "@types/node" "*" - -"@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== - -"@types/yargs@^17.0.8": - 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" "*" - -"@ungap/structured-clone@^1.0.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" - integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== - -"@webassemblyjs/ast@^1.14.1", "@webassemblyjs/ast@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" - integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== - dependencies: - "@webassemblyjs/helper-numbers" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - -"@webassemblyjs/floating-point-hex-parser@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz" - integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== - -"@webassemblyjs/helper-api-error@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz" - integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== - -"@webassemblyjs/helper-buffer@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz" - integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== - -"@webassemblyjs/helper-numbers@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz" - integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.13.2" - "@webassemblyjs/helper-api-error" "1.13.2" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz" - integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== - -"@webassemblyjs/helper-wasm-section@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz" - integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/wasm-gen" "1.14.1" - -"@webassemblyjs/ieee754@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz" - integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz" - integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.13.2": - version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz" - integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== - -"@webassemblyjs/wasm-edit@^1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" - integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/helper-wasm-section" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-opt" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - "@webassemblyjs/wast-printer" "1.14.1" - -"@webassemblyjs/wasm-gen@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz" - integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wasm-opt@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz" - integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - -"@webassemblyjs/wasm-parser@^1.14.1", "@webassemblyjs/wasm-parser@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" - integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-api-error" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wast-printer@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz" - integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.8: - 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" - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0: - version "8.3.4" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.2: - version "8.14.1" - -address@^1.0.1: - version "1.2.2" - resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -aggregate-error@^3.0.0: - 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" - -ajv-formats@^2.1.1: - 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" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - 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" - -ajv@^6.12.5, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.8.2, ajv@^8.9.0: - 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" - -algoliasearch-helper@^3.22.6: - version "3.26.0" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz" - integrity sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch@^5.14.2, algoliasearch@^5.17.1, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": - version "5.37.0" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.37.0.tgz" - integrity sha512-y7gau/ZOQDqoInTQp0IwTOjkrHc4Aq4R8JgpmCleFwiLl+PbN2DMWoDUWZnrK8AhNJwT++dn28Bt4NZYNLAmuA== - dependencies: - "@algolia/abtesting" "1.3.0" - "@algolia/client-abtesting" "5.37.0" - "@algolia/client-analytics" "5.37.0" - "@algolia/client-common" "5.37.0" - "@algolia/client-insights" "5.37.0" - "@algolia/client-personalization" "5.37.0" - "@algolia/client-query-suggestions" "5.37.0" - "@algolia/client-search" "5.37.0" - "@algolia/ingestion" "1.37.0" - "@algolia/monitoring" "1.37.0" - "@algolia/recommend" "5.37.0" - "@algolia/requester-browser-xhr" "5.37.0" - "@algolia/requester-fetch" "5.37.0" - "@algolia/requester-node-http" "5.37.0" - -ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-escapes@^4.3.2: - 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" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - 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" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@~3.1.2: - 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" - -arg@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^1.0.7: - 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" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-timsort@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz" - integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -astring@^1.8.0: - version "1.9.0" - resolved "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz" - integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== - -autoprefixer@^10.4.19, autoprefixer@^10.4.21: - version "10.4.21" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz" - integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== - dependencies: - browserslist "^4.24.4" - caniuse-lite "^1.0.30001702" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.1.1" - postcss-value-parser "^4.2.0" - -babel-loader@^9.2.1: - version "9.2.1" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz" - integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== - dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.4.14: - version "0.4.14" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz" - integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== - dependencies: - "@babel/compat-data" "^7.27.7" - "@babel/helper-define-polyfill-provider" "^0.6.5" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.13.0: - version "0.13.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz" - integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" - core-js-compat "^3.43.0" - -babel-plugin-polyfill-regenerator@^0.6.5: - version "0.6.5" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz" - integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -baseline-browser-mapping@^2.8.3: - version "2.8.6" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz" - integrity sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.3.0" - resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz" - integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== - dependencies: - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -boxen@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz" - integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== - dependencies: - ansi-align "^3.0.1" - camelcase "^6.2.0" - chalk "^4.1.2" - cli-boxes "^3.0.0" - string-width "^5.0.1" - type-fest "^2.5.0" - widest-line "^4.0.1" - wrap-ansi "^8.0.1" - -boxen@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz" - integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.1" - chalk "^5.2.0" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.3, braces@~3.0.2: - 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" - -browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.25.1, browserslist@^4.25.3, "browserslist@>= 4.21.0": - version "4.26.2" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz" - integrity sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== - dependencies: - baseline-browser-mapping "^2.8.3" - caniuse-lite "^1.0.30001741" - electron-to-chromium "^1.5.218" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== - dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.3" - mimic-response "^4.0.0" - normalize-url "^8.0.0" - responselike "^3.0.0" - -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -callsites@^3.0.0, callsites@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001741: - version "1.0.30001743" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz" - integrity sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk-template@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz" - integrity sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg== - dependencies: - chalk "^5.2.0" - -chalk@^4.0.0, chalk@^4.1.2: - 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" - -chalk@^5.0.1, chalk@^5.2.0: - version "5.4.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz" - integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== - -chalk@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz" - integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@1.0.0-rc.12: - version "1.0.0-rc.12" - resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -clean-css@^5.2.2, clean-css@^5.3.3, clean-css@~5.3.2: - version "5.3.3" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clear-module@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz" - integrity sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw== - dependencies: - parent-module "^2.0.0" - resolve-from "^5.0.0" - -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - -cli-table3@^0.6.3: - version "0.6.5" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -clone-deep@^4.0.1: - 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" - -clsx@^2.0.0, clsx@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -collapse-white-space@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz" - integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== - -color-convert@^2.0.1: - 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" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10: - version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combine-promises@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz" - integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ== - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz" - integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== - -commander@^2.20.0: - 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== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -comment-json@^4.2.5: - version "4.2.5" - resolved "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz" - integrity sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw== - dependencies: - array-timsort "^1.0.3" - core-util-is "^1.0.3" - esprima "^4.0.1" - has-own-prop "^2.0.0" - repeat-string "^1.6.1" - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -compressible@~2.0.18: - 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" - -compression@^1.7.4: - version "1.8.0" - resolved "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz" - integrity sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA== - 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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -consola@^3.2.3: - version "3.4.2" - resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" - integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" - integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - 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== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== - -copy-text-to-clipboard@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.1.tgz" - integrity sha512-3am6cw+WOicd0+HyzhC4kYS02wHJUiVQXmAADxfUARKsHBkWl1Vl3QQEiILlSs8YcPS/C0+y/urCNEYQk+byWA== - -copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -core-js-compat@^3.43.0: - version "3.45.1" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz" - integrity sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA== - dependencies: - browserslist "^4.25.3" - -core-js-pure@^3.43.0: - version "3.45.1" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz" - integrity sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ== - -core-js@^3.31.1: - version "3.42.0" - -core-util-is@^1.0.3, core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: - version "8.3.6" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -cspell-config-lib@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz" - integrity sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg== - dependencies: - "@cspell/cspell-types" "8.19.4" - comment-json "^4.2.5" - yaml "^2.7.1" - -cspell-dictionary@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz" - integrity sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g== - dependencies: - "@cspell/cspell-pipe" "8.19.4" - "@cspell/cspell-types" "8.19.4" - cspell-trie-lib "8.19.4" - fast-equals "^5.2.2" - -cspell-gitignore@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz" - integrity sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og== - dependencies: - "@cspell/url" "8.19.4" - cspell-glob "8.19.4" - cspell-io "8.19.4" - -cspell-glob@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz" - integrity sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw== - dependencies: - "@cspell/url" "8.19.4" - picomatch "^4.0.2" - -cspell-grammar@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz" - integrity sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow== - dependencies: - "@cspell/cspell-pipe" "8.19.4" - "@cspell/cspell-types" "8.19.4" - -cspell-io@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz" - integrity sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg== - dependencies: - "@cspell/cspell-service-bus" "8.19.4" - "@cspell/url" "8.19.4" - -cspell-lib@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz" - integrity sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA== - dependencies: - "@cspell/cspell-bundled-dicts" "8.19.4" - "@cspell/cspell-pipe" "8.19.4" - "@cspell/cspell-resolver" "8.19.4" - "@cspell/cspell-types" "8.19.4" - "@cspell/dynamic-import" "8.19.4" - "@cspell/filetypes" "8.19.4" - "@cspell/strong-weak-map" "8.19.4" - "@cspell/url" "8.19.4" - clear-module "^4.1.2" - comment-json "^4.2.5" - cspell-config-lib "8.19.4" - cspell-dictionary "8.19.4" - cspell-glob "8.19.4" - cspell-grammar "8.19.4" - cspell-io "8.19.4" - cspell-trie-lib "8.19.4" - env-paths "^3.0.0" - fast-equals "^5.2.2" - gensequence "^7.0.0" - import-fresh "^3.3.1" - resolve-from "^5.0.0" - vscode-languageserver-textdocument "^1.0.12" - vscode-uri "^3.1.0" - xdg-basedir "^5.1.0" - -cspell-trie-lib@8.19.4: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz" - integrity sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg== - dependencies: - "@cspell/cspell-pipe" "8.19.4" - "@cspell/cspell-types" "8.19.4" - gensequence "^7.0.0" - -cspell@^8.6.0: - version "8.19.4" - resolved "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz" - integrity sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA== - dependencies: - "@cspell/cspell-json-reporter" "8.19.4" - "@cspell/cspell-pipe" "8.19.4" - "@cspell/cspell-types" "8.19.4" - "@cspell/dynamic-import" "8.19.4" - "@cspell/url" "8.19.4" - chalk "^5.4.1" - chalk-template "^1.1.0" - commander "^13.1.0" - cspell-dictionary "8.19.4" - cspell-gitignore "8.19.4" - cspell-glob "8.19.4" - cspell-io "8.19.4" - cspell-lib "8.19.4" - fast-json-stable-stringify "^2.1.0" - file-entry-cache "^9.1.0" - semver "^7.7.1" - tinyglobby "^0.2.13" - -css-blank-pseudo@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz" - integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== - dependencies: - postcss-selector-parser "^7.0.0" - -css-declaration-sorter@^7.2.0: - version "7.3.0" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz" - integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ== - -css-has-pseudo@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz" - integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-value-parser "^4.2.0" - -css-loader@^6.11.0: - version "6.11.0" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz" - integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.33" - postcss-modules-extract-imports "^3.1.0" - postcss-modules-local-by-default "^4.0.5" - postcss-modules-scope "^3.2.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.5.4" - -css-minimizer-webpack-plugin@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-prefers-color-scheme@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz" - integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-select@^5.1.0: - version "5.2.2" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz" - integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssdb@^8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/cssdb/-/cssdb-8.4.0.tgz" - integrity sha512-lyATYGyvXwQ8h55WeQeEHXhI+47rl52pXSYkFK/ZrCbAJSgVIaPFjYc3RM8TpRHKk7W3wsAZImmLps+P5VyN9g== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-advanced@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz" - integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== - dependencies: - autoprefixer "^10.4.19" - browserslist "^4.23.0" - cssnano-preset-default "^6.1.2" - postcss-discard-unused "^6.0.5" - postcss-merge-idents "^6.0.3" - postcss-reduce-idents "^6.0.3" - postcss-zindex "^6.0.2" - -cssnano-preset-default@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz" - integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== - dependencies: - browserslist "^4.23.0" - css-declaration-sorter "^7.2.0" - cssnano-utils "^4.0.2" - postcss-calc "^9.0.1" - postcss-colormin "^6.1.0" - postcss-convert-values "^6.1.0" - postcss-discard-comments "^6.0.2" - postcss-discard-duplicates "^6.0.3" - postcss-discard-empty "^6.0.3" - postcss-discard-overridden "^6.0.2" - postcss-merge-longhand "^6.0.5" - postcss-merge-rules "^6.1.1" - postcss-minify-font-values "^6.1.0" - postcss-minify-gradients "^6.0.3" - postcss-minify-params "^6.1.0" - postcss-minify-selectors "^6.0.4" - postcss-normalize-charset "^6.0.2" - postcss-normalize-display-values "^6.0.2" - postcss-normalize-positions "^6.0.2" - postcss-normalize-repeat-style "^6.0.2" - postcss-normalize-string "^6.0.2" - postcss-normalize-timing-functions "^6.0.2" - postcss-normalize-unicode "^6.1.0" - postcss-normalize-url "^6.0.2" - postcss-normalize-whitespace "^6.0.2" - postcss-ordered-values "^6.0.2" - postcss-reduce-initial "^6.1.0" - postcss-reduce-transforms "^6.0.2" - postcss-svgo "^6.0.3" - postcss-unique-selectors "^6.0.4" - -cssnano-utils@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz" - integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== - -cssnano@^6.0.1, cssnano@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz" - integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== - dependencies: - cssnano-preset-default "^6.1.2" - lilconfig "^3.1.1" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.1, debug@4: - version "4.4.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - -debug@2.6.9: - 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" - -decode-named-character-reference@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz" - integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== - dependencies: - character-entities "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deepmerge@^4.3.1: - 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== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - 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" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.2.1: - 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" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -detect-port@^1.5.1: - version "1.6.1" - resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz" - integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== - dependencies: - address "^1.0.1" - debug "4" - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -dir-glob@^3.0.1: - 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" - -dns-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.2.2" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz" - integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.218: - version "1.5.222" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz" - integrity sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -emoticon@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz" - integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -enhanced-resolve@^5.17.1: - version "5.18.1" - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -entities@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz" - integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== - -env-paths@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz" - integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A== - -error-ex@^1.3.1: - version "1.3.4" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz" - integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== - dependencies: - is-arrayish "^0.2.1" - -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.2.1: - version "1.7.0" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -esast-util-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz" - integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - unist-util-position-from-estree "^2.0.0" - -esast-util-from-js@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz" - integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== - dependencies: - "@types/estree-jsx" "^1.0.0" - acorn "^8.0.0" - esast-util-from-estree "^2.0.0" - vfile-message "^4.0.0" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-goat@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz" - integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-util-attach-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz" - integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-build-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz" - integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz" - integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== - -estree-util-scope@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz" - integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - -estree-util-to-js@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz" - integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== - dependencies: - "@types/estree-jsx" "^1.0.0" - astring "^1.8.0" - source-map "^0.7.0" - -estree-util-value-to-estree@^3.0.1: - version "3.4.0" - resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz" - integrity sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-visit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz" - integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^3.0.0" - -estree-walker@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eta@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz" - integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eval@^0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== - dependencies: - "@types/node" "*" - require-like ">= 0.1.1" - -eventemitter3@^4.0.0, eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0, execa@5.1.1: - 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" - -express@^4.17.3: - version "4.21.2" - resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" - integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.12" - proxy-addr "~2.0.7" - qs "6.13.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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== - -fast-equals@^5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz" - integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== - -fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - 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.8" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - 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== - -fast-uri@^3.0.1: - version "3.0.6" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz" - integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== - -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" - -fault@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz" - integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== - dependencies: - format "^0.2.0" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fdir@^6.4.4: - version "6.4.4" - resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz" - integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg== - -feed@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz" - integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== - dependencies: - xml-js "^1.6.11" - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz" - integrity sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg== - dependencies: - flat-cache "^5.0.0" - -file-loader@*, file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -fill-range@^7.1.1: - 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" - -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat-cache@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz" - integrity sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ== - dependencies: - flatted "^3.3.1" - keyv "^4.5.4" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.3.1: - version "3.3.3" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" - integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== - -follow-redirects@^1.0.0: - version "1.15.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" - integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^11.1.1, fs-extra@^11.2.0: - version "11.3.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz" - integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensequence@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz" - integrity sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ== - -gensync@^1.0.0-beta.2: - 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== - -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -github-slugger@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - 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" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -global-directory@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz" - integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== - dependencies: - ini "4.1.1" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -globby@^11.1.0: - 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" - -globby@^13.1.1: - version "13.2.2" - resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -got@^12.1.0: - version "12.6.1" - resolved "https://registry.npmjs.org/got/-/got-12.6.1.tgz" - integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - 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== - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-own-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz" - integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - 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" - -has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-yarn@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" - integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== - -hasown@^2.0.2: - 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" - -hast-util-from-parse5@^8.0.0: - version "8.0.3" - resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz" - integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - hastscript "^9.0.0" - property-information "^7.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - web-namespaces "^2.0.0" - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-raw@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz" - integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-from-parse5 "^8.0.0" - hast-util-to-parse5 "^8.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - parse5 "^7.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-estree@^3.0.0: - version "3.1.3" - resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz" - integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-attach-comments "^3.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" - unist-util-position "^5.0.0" - zwitch "^2.0.0" - -hast-util-to-jsx-runtime@^2.0.0: - version "2.3.6" - resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz" - integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" - unist-util-position "^5.0.0" - vfile-message "^4.0.0" - -hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz" - integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0: - 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" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.6.0" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz" - integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== - -html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-minifier-terser@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz" - integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== - dependencies: - camel-case "^4.1.2" - clean-css "~5.3.2" - commander "^10.0.0" - entities "^4.4.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.15.1" - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -html-void-elements@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - -html-webpack-plugin@^5.6.0: - version "5.6.3" - resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz" - integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -http-cache-semantics@^4.1.1: - version "4.1.1" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@2.0.0: - 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" - -http-parser-js@>=0.5.1: - version "0.5.10" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz" - integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== - -http-proxy-middleware@^2.0.3: - version "2.0.9" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz" - integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.1" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" - integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -image-size@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz" - integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== - -import-fresh@^3.3.0, import-fresh@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -import-meta-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz" - integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infima@0.2.0-alpha.45: - version "0.2.0-alpha.45" - resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz" - integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz" - integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== - -inline-style-parser@0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz" - integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== - -invariant@^2.2.4: - 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" - -ipaddr.js@^2.0.1: - version "2.2.0" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -ipaddr.js@1.9.1: - 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== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.16.0: - version "2.16.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - 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== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - 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" - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-npm@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz" - integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2: - 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== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-plain-object@^2.0.4: - 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" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-wsl@^2.2.0: - 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" - -is-yarn-global@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" - integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -jest-util@^29.7.0: - 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" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3: - 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" - -jiti@^1.20.0: - version "1.21.7" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz" - integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== - -joi@^17.9.2: - 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" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - 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" - -js-yaml@^4.1.0: - 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" - -jsesc@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - 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== - -json-schema-traverse@^0.4.1: - 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== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - 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" - -keyv@^4.5.3, keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - -launch-editor@^2.6.0: - version "2.10.0" - resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz" - integrity sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -lilconfig@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - 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" - -lottie-web@^5.13.0: - version "5.13.0" - resolved "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz" - integrity sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ== - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^5.1.1: - 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" - -markdown-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" - integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== - -markdown-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz" - integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== - dependencies: - repeat-string "^1.0.0" - -markdown-table@^3.0.0: - version "3.0.4" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz" - integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -mdast-util-directive@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz" - integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz" - integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== - dependencies: - "@types/mdast" "^4.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz" - integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-frontmatter@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" - integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - escape-string-regexp "^5.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - -mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz" - integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== - dependencies: - "@types/mdast" "^4.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-find-and-replace "^3.0.0" - micromark-util-character "^2.0.0" - -mdast-util-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz" - integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - -mdast-util-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz" - integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz" - integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-task-list-item@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz" - integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz" - integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm-autolink-literal "^2.0.0" - mdast-util-gfm-footnote "^2.0.0" - mdast-util-gfm-strikethrough "^2.0.0" - mdast-util-gfm-table "^2.0.0" - mdast-util-gfm-task-list-item "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz" - integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-jsx@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz" - integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -mdast-util-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz" - integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdxjs-esm@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz" - integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-hast@^13.0.0: - version "13.2.0" - resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -mdast-util-to-markdown@^2.0.0: - version "2.1.2" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz" - integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.3: - version "3.5.3" - dependencies: - fs-monkey "^1.0.4" - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromark-core-commonmark@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz" - integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-directive@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz" - integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - parse-entities "^4.0.0" - -micromark-extension-frontmatter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz" - integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== - dependencies: - fault "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz" - integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz" - integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== - dependencies: - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-strikethrough@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz" - integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-table@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz" - integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-tagfilter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz" - integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-gfm-task-list-item@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz" - integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz" - integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== - dependencies: - micromark-extension-gfm-autolink-literal "^2.0.0" - micromark-extension-gfm-footnote "^2.0.0" - micromark-extension-gfm-strikethrough "^2.0.0" - micromark-extension-gfm-table "^2.0.0" - micromark-extension-gfm-tagfilter "^2.0.0" - micromark-extension-gfm-task-list-item "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-expression@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz" - integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-jsx@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz" - integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdx-md@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz" - integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-mdxjs-esm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz" - integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdxjs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz" - integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^3.0.0" - micromark-extension-mdx-jsx "^3.0.0" - micromark-extension-mdx-md "^2.0.0" - micromark-extension-mdxjs-esm "^3.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz" - integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz" - integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-mdx-expression@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz" - integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-factory-space@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz" - integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz" - integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz" - integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz" - integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz" - integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz" - integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz" - integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz" - integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz" - integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz" - integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== - -micromark-util-events-to-acorn@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz" - integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== - dependencies: - "@types/estree" "^1.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-util-html-tag-name@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz" - integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz" - integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz" - integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz" - integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz" - integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz" - integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== - -micromark-util-symbol@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz" - integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== - -micromark-util-types@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz" - integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== - -micromark-util-types@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz" - integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== - -micromark@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz" - integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: - 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" - -"mime-db@>= 1.43.0 < 2": - version "1.54.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27: - 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" - -mime-types@^2.1.31: - 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" - -mime-types@~2.1.17, mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" - -mime-types@~2.1.24: - 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" - -mime-types@~2.1.34: - 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" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - -mini-css-extract-plugin@^2.9.2: - version "2.9.4" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz" - integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== - dependencies: - schema-utils "^4.0.0" - tapable "^2.2.1" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.1.1, minimatch@3.1.2: - 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" - -minimist@^1.2.0: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mrmime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" - integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== - -ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -nanoid@^3.3.11: - version "3.3.11" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" - integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== - -negotiator@~0.6.4: - version "0.6.4" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-emoji@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz" - integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" - -node-forge@^1: - version "1.3.1" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.21: - version "2.0.21" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz" - integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^8.0.0: - version "8.0.1" - -npm-run-path@^4.0.1: - 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" - -nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz" - integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -null-loader@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz" - integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.7" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - 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" - -on-headers@~1.0.2: - 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== - -once@^1.3.0: - 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" - -onetime@^5.1.2: - 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" - -open@^8.0.9, open@^8.4.0: - 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" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - 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" - -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -package-json@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz" - integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - 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== - dependencies: - callsites "^3.0.0" - -parent-module@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz" - integrity sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg== - dependencies: - callsites "^3.1.0" - -parse-entities@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz" - integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== - dependencies: - "@types/unist" "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-numeric-range@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" - integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz" - integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== - dependencies: - domhandler "^5.0.3" - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.3.0" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz" - integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== - dependencies: - entities "^6.0.0" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-is-inside@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - dependencies: - isarray "0.0.1" - -path-to-regexp@0.1.12: - version "0.1.12" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" - integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== - -path-to-regexp@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0, picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -"picomatch@^3 || ^4", picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - -pkg-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.0" - -postcss-attribute-case-insensitive@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz" - integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-calc@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^7.0.11: - version "7.0.11" - resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.11.tgz" - integrity sha512-zfqoUSaHMko/k2PA9xnaydVTHqYv5vphq5Q2AHcG/dCdv/OkHYWcVWfVTBKZ526uzT8L7NghuvSw3C9PxlKnLg== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -postcss-color-hex-alpha@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz" - integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz" - integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz" - integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - colord "^2.9.3" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz" - integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^11.0.6: - version "11.0.6" - resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz" - integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.5" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/media-query-list-parser" "^4.0.3" - -postcss-custom-properties@^14.0.6: - version "14.0.6" - resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz" - integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.5" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^8.0.5: - version "8.0.5" - resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz" - integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.5" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - postcss-selector-parser "^7.0.0" - -postcss-dir-pseudo-class@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz" - integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-discard-comments@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz" - integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== - -postcss-discard-duplicates@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz" - integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== - -postcss-discard-empty@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz" - integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== - -postcss-discard-overridden@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz" - integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== - -postcss-discard-unused@^6.0.5: - version "6.0.5" - resolved "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz" - integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-double-position-gradients@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.3.tgz" - integrity sha512-Dl0Z9sdbMwrPslgOaGBZRGo3TASmmgTcqcUODr82MTYyJk6devXZM6MlQjpQKMJqlLJ6oL1w78U7IXFdPA5+ug== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz" - integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-focus-within@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz" - integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz" - integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== - -postcss-image-set-function@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz" - integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-lab-function@^7.0.11: - version "7.0.11" - resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.11.tgz" - integrity sha512-BEA4jId8uQe1gyjZZ6Bunb6ZsH2izks+v25AxQJDBtigXCjTLmCPWECwQpLTtcxH589MVxhs/9TAmRC6lUEmXQ== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/utilities" "^2.0.0" - -postcss-loader@^7.3.4: - version "7.3.4" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz" - integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== - dependencies: - cosmiconfig "^8.3.5" - jiti "^1.20.0" - semver "^7.5.4" - -postcss-logical@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz" - integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-merge-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz" - integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.5: - version "6.0.5" - resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz" - integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.1.1" - -postcss-merge-rules@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz" - integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.2" - postcss-selector-parser "^6.0.16" - -postcss-minify-font-values@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz" - integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz" - integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== - dependencies: - colord "^2.9.3" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz" - integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== - dependencies: - browserslist "^4.23.0" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz" - integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-modules-extract-imports@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz" - integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== - -postcss-modules-local-by-default@^4.0.5: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz" - integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz" - integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nesting@^13.0.2: - version "13.0.2" - resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz" - integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== - dependencies: - "@csstools/selector-resolve-nested" "^3.1.0" - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -postcss-normalize-charset@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz" - integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== - -postcss-normalize-display-values@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz" - integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz" - integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz" - integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz" - integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz" - integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz" - integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz" - integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz" - integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-opacity-percentage@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz" - integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== - -postcss-ordered-values@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz" - integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz" - integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz" - integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^10.2.1: - version "10.3.1" - resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.3.1.tgz" - integrity sha512-8ZOOWVwQ0iMpfEYkYo+U6W7fE2dJ/tP6dtEFwPJ66eB5JjnFupfYh+y6zo+vWDO72nGhKOVdxwhTjfzcSNRg4Q== - dependencies: - "@csstools/postcss-alpha-function" "^1.0.0" - "@csstools/postcss-cascade-layers" "^5.0.2" - "@csstools/postcss-color-function" "^4.0.11" - "@csstools/postcss-color-function-display-p3-linear" "^1.0.0" - "@csstools/postcss-color-mix-function" "^3.0.11" - "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.1" - "@csstools/postcss-content-alt-text" "^2.0.7" - "@csstools/postcss-exponential-functions" "^2.0.9" - "@csstools/postcss-font-format-keywords" "^4.0.0" - "@csstools/postcss-gamut-mapping" "^2.0.11" - "@csstools/postcss-gradients-interpolation-method" "^5.0.11" - "@csstools/postcss-hwb-function" "^4.0.11" - "@csstools/postcss-ic-unit" "^4.0.3" - "@csstools/postcss-initial" "^2.0.1" - "@csstools/postcss-is-pseudo-class" "^5.0.3" - "@csstools/postcss-light-dark-function" "^2.0.10" - "@csstools/postcss-logical-float-and-clear" "^3.0.0" - "@csstools/postcss-logical-overflow" "^2.0.0" - "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" - "@csstools/postcss-logical-resize" "^3.0.0" - "@csstools/postcss-logical-viewport-units" "^3.0.4" - "@csstools/postcss-media-minmax" "^2.0.9" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" - "@csstools/postcss-nested-calc" "^4.0.0" - "@csstools/postcss-normalize-display-values" "^4.0.0" - "@csstools/postcss-oklab-function" "^4.0.11" - "@csstools/postcss-progressive-custom-properties" "^4.2.0" - "@csstools/postcss-random-function" "^2.0.1" - "@csstools/postcss-relative-color-syntax" "^3.0.11" - "@csstools/postcss-scope-pseudo-class" "^4.0.1" - "@csstools/postcss-sign-functions" "^1.1.4" - "@csstools/postcss-stepped-value-functions" "^4.0.9" - "@csstools/postcss-text-decoration-shorthand" "^4.0.3" - "@csstools/postcss-trigonometric-functions" "^4.0.9" - "@csstools/postcss-unset-value" "^4.0.0" - autoprefixer "^10.4.21" - browserslist "^4.25.1" - css-blank-pseudo "^7.0.1" - css-has-pseudo "^7.0.3" - css-prefers-color-scheme "^10.0.0" - cssdb "^8.4.0" - postcss-attribute-case-insensitive "^7.0.1" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^7.0.11" - postcss-color-hex-alpha "^10.0.0" - postcss-color-rebeccapurple "^10.0.0" - postcss-custom-media "^11.0.6" - postcss-custom-properties "^14.0.6" - postcss-custom-selectors "^8.0.5" - postcss-dir-pseudo-class "^9.0.1" - postcss-double-position-gradients "^6.0.3" - postcss-focus-visible "^10.0.1" - postcss-focus-within "^9.0.1" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^6.0.0" - postcss-image-set-function "^7.0.0" - postcss-lab-function "^7.0.11" - postcss-logical "^8.1.0" - postcss-nesting "^13.0.2" - postcss-opacity-percentage "^3.0.0" - postcss-overflow-shorthand "^6.0.0" - postcss-page-break "^3.0.4" - postcss-place "^10.0.0" - postcss-pseudo-class-any-link "^10.0.1" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^8.0.1" - -postcss-pseudo-class-any-link@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz" - integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-reduce-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz" - integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz" - integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz" - integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz" - integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.2" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz" - integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-sort-media-queries@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz" - integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== - dependencies: - sort-css-media-queries "2.2.0" - -postcss-svgo@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz" - integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.2.0" - -postcss-unique-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz" - integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss-zindex@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz" - integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== - -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.2, postcss@^8.4, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.6, postcss@^8.5.4: - version "8.5.6" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz" - integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== - dependencies: - nanoid "^3.3.11" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" - integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== - -prism-react-renderer@^2.3.0, prism-react-renderer@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz" - integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== - dependencies: - "@types/prismjs" "^1.26.0" - clsx "^2.0.0" - -prismjs@^1.29.0: - version "1.30.0" - resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz" - integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== - -process-nextick-args@~2.0.0: - 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== - -prompts@^2.4.2: - 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" - -prop-types@^15.6.2, prop-types@^15.7.2: - 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" - -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -property-information@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz" - integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pupa@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz" - integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== - dependencies: - escape-goat "^4.0.0" - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" - integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@1.2.8: - 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" - -react-dom@*, "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18.0.0 || ^19.0.0", react-dom@^19.1.0, "react-dom@>= 16.8.0 < 20.0.0": - version "19.1.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz" - integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== - dependencies: - scheduler "^0.26.0" - -react-fast-compare@^3.2.0: - 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== - -"react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz" - integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A== - dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-json-view-lite@^2.3.0: - version "2.5.0" - resolved "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz" - integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g== - -react-loadable-ssr-addon-v5-slorber@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz" - integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== - dependencies: - "@babel/runtime" "^7.10.3" - -react-loadable@*, "react-loadable@npm:@docusaurus/react-loadable@6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz" - integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== - dependencies: - "@types/react" "*" - -react-router-config@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" - integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== - dependencies: - "@babel/runtime" "^7.1.2" - -react-router-dom@^5.3.4: - version "5.3.4" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@^5.3.4, react-router@>=5, react-router@5.3.4: - version "5.3.4" - resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react@*, "react@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18.0.0 || ^19.0.0", react@^19.1.0, "react@>= 16.8.0 < 20.0.0", react@>=15, react@>=16, react@>=16.0.0: - version "19.1.0" - resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz" - integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== - -readable-stream@^2.0.1: - 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" - -readable-stream@^3.0.6: - 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" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recma-build-jsx@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz" - integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== - dependencies: - "@types/estree" "^1.0.0" - estree-util-build-jsx "^3.0.0" - vfile "^6.0.0" - -recma-jsx@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz" - integrity sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== - dependencies: - acorn-jsx "^5.0.0" - estree-util-to-js "^2.0.0" - recma-parse "^1.0.0" - recma-stringify "^1.0.0" - unified "^11.0.0" - -recma-parse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz" - integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== - dependencies: - "@types/estree" "^1.0.0" - esast-util-from-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -recma-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz" - integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== - dependencies: - "@types/estree" "^1.0.0" - estree-util-to-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -regenerate-unicode-properties@^10.2.2: - version "10.2.2" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz" - integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regexpu-core@^6.2.0: - version "6.3.1" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.3.1.tgz" - integrity sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.2" - regjsgen "^0.8.0" - regjsparser "^0.12.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.2.1" - -registry-auth-token@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz" - integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz" - integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== - dependencies: - jsesc "~3.0.2" - -rehype-raw@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz" - integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== - dependencies: - "@types/hast" "^3.0.0" - hast-util-raw "^9.0.0" - vfile "^6.0.0" - -rehype-recma@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz" - integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - hast-util-to-estree "^3.0.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -remark-directive@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz" - integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-directive "^3.0.0" - micromark-extension-directive "^3.0.0" - unified "^11.0.0" - -remark-emoji@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz" - integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== - dependencies: - "@types/mdast" "^4.0.2" - emoticon "^4.0.1" - mdast-util-find-and-replace "^3.0.1" - node-emoji "^2.1.0" - unified "^11.0.4" - -remark-frontmatter@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz" - integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-frontmatter "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - unified "^11.0.0" - -remark-gfm@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz" - integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-gfm "^3.0.0" - micromark-extension-gfm "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -remark-mdx@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz" - integrity sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg== - dependencies: - mdast-util-mdx "^3.0.0" - micromark-extension-mdxjs "^3.0.0" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-rehype@^11.0.0: - version "11.1.2" - resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz" - integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - mdast-util-to-hast "^13.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.0.0" - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -repeat-string@^1.0.0, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -require-from-string@^2.0.2: - 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== - -"require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve@^1.22.10: - version "1.22.10" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.0.0" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rtlcss@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz" - integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - postcss "^8.4.21" - strip-json-comments "^3.1.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.2.4: - version "1.4.1" - resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== - -scheduler@^0.26.0: - version "0.26.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz" - integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== - -schema-dts@^1.1.2: - version "1.1.5" - resolved "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz" - integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg== - -schema-utils@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.3.0, schema-utils@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz" - integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -"search-insights@>= 1 < 3": - version "2.17.3" - resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz" - integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - 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" - -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.5, semver@^7.3.7, semver@^7.5.4, semver@^7.7.1: - version "7.7.1" - -send@0.19.0: - 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" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-handler@^6.1.6: - version "6.1.6" - resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz" - integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== - dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - mime-types "2.1.18" - minimatch "3.1.2" - path-is-inside "1.0.2" - path-to-regexp "3.3.0" - range-parser "1.2.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.16.2: - 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" - -set-function-length@^1.2.2: - 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" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - 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" - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - -shebang-command@^2.0.0: - 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" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.2" - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.0.6: - version "1.1.0" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sirv@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz" - integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -sitemap@^7.1.1: - version "7.1.2" - resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz" - integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== - dependencies: - "@types/node" "^17.0.5" - "@types/sax" "^1.2.1" - arg "^5.0.0" - sax "^1.2.4" - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -sort-css-media-queries@2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz" - integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== - -source-map-js@^1.0.1, source-map-js@^1.2.1: - 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== - -source-map-support@~0.5.20: - 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" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.0: - version "0.7.6" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz" - integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== - -source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -srcset@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz" - integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -std-env@^3.7.0: - version "3.9.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz" - integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== - -string_decoder@^1.1.1: - 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" - -string_decoder@~1.1.1: - 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" - -string-width@^4.1.0: - 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" - -string-width@^4.2.0: - 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" - -string-width@^5.0.1, string-width@^5.1.2: - 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" - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - 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" - -strip-ansi@^7.0.1: - 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" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - 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== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -style-to-js@^1.0.0: - version "1.1.17" - resolved "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz" - integrity sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA== - dependencies: - style-to-object "1.0.9" - -style-to-object@1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz" - integrity sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw== - dependencies: - inline-style-parser "0.2.4" - -stylehacks@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz" - integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== - dependencies: - browserslist "^4.23.0" - postcss-selector-parser "^6.0.16" - -supports-color@^7.1.0: - 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" - -supports-color@^8.0.0: - 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" - -supports-preserve-symlinks-flag@^1.0.0: - 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== - -svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^3.0.2, svgo@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.1" - -terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: - version "5.3.14" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz" - integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.25" - jest-worker "^27.4.5" - schema-utils "^4.3.0" - serialize-javascript "^6.0.2" - terser "^5.31.1" - -terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: - version "5.39.0" - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tiny-invariant@^1.0.2: - version "1.3.3" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -tiny-warning@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tinyglobby@^0.2.13: - version "0.2.13" - resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz" - integrity sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw== - dependencies: - fdir "^6.4.4" - picomatch "^4.0.2" - -tinypool@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz" - integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== - -to-regex-range@^5.0.1: - 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" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -tslib@^2.0.3, tslib@^2.6.0: - version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -type-fest@^0.21.3: - 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== - -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.13.0, type-fest@^2.5.0: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@>=4.9.5, typescript@~5.8.3: - version "5.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== - -undici-types@~6.21.0: - version "6.21.0" - -unicode-canonical-property-names-ecmascript@^2.0.0: - 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== - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unicode-match-property-ecmascript@^2.0.0: - 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" - -unicode-match-property-value-ecmascript@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz" - integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz" - integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ== - -unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: - version "11.0.5" - resolved "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz" - integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@~1.0.0, unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -update-notifier@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz" - integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== - dependencies: - boxen "^7.0.0" - chalk "^5.0.1" - configstore "^6.0.0" - has-yarn "^3.0.0" - import-lazy "^4.0.0" - is-ci "^3.0.1" - is-installed-globally "^0.4.0" - is-npm "^6.0.0" - is-yarn-global "^0.4.0" - latest-version "^7.0.0" - pupa "^3.1.0" - semver "^7.3.7" - semver-diff "^4.0.0" - xdg-basedir "^5.1.0" - -uri-js@^4.2.2: - 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" - -url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utila@~0.4: - version "0.4.0" - resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utility-types@^3.10.0: - version "3.11.0" - resolved "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz" - integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vfile-location@^5.0.0: - version "5.0.3" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz" - integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== - dependencies: - "@types/unist" "^3.0.0" - vfile "^6.0.0" - -vfile-message@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz" - integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile@^6.0.0, vfile@^6.0.1: - version "6.0.3" - resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== - dependencies: - "@types/unist" "^3.0.0" - vfile-message "^4.0.0" - -vscode-languageserver-textdocument@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz" - integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== - -vscode-uri@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz" - integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== - -watchpack@^2.4.1: - version "2.4.2" - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - -webpack-bundle-analyzer@^4.10.2: - version "4.10.2" - resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz" - integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - commander "^7.2.0" - debounce "^1.2.1" - escape-string-regexp "^4.0.0" - gzip-size "^6.0.0" - html-escaper "^2.0.2" - opener "^1.5.2" - picocolors "^1.0.0" - sirv "^2.0.3" - ws "^7.3.1" - -webpack-dev-middleware@^5.3.4: - version "5.3.4" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz" - integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.15.2: - version "4.15.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz" - integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.4" - ws "^8.13.0" - -webpack-merge@^5.9.0: - version "5.10.0" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-merge@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz" - integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.1" - -webpack-sources@^3.2.3: - version "3.2.3" - -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.88.1, webpack@^5.95.0, "webpack@>=4.41.1 || 5.x", webpack@>=5, "webpack@3 || 4 || 5": - version "5.99.7" - dependencies: - "@types/eslint-scope" "^3.7.7" - "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" - "@webassemblyjs/ast" "^1.14.1" - "@webassemblyjs/wasm-edit" "^1.14.1" - "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.14.0" - browserslist "^4.24.0" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.1" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^4.3.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.11" - watchpack "^2.4.1" - webpack-sources "^3.2.3" - -webpackbar@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz" - integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== - dependencies: - ansi-escapes "^4.3.2" - chalk "^4.1.2" - consola "^3.2.3" - figures "^3.2.0" - markdown-table "^2.0.0" - pretty-time "^1.1.0" - std-env "^3.7.0" - wrap-ansi "^7.0.0" - -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which@^2.0.1: - 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" - -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - -wildcard@^2.0.0, wildcard@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrap-ansi@^7.0.0: - 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" - -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: - 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" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.3.1: - version "7.5.10" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -ws@^8.13.0: - version "8.18.2" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz" - integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== - -xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - -xml-js@^1.6.11: - version "1.6.11" - resolved "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz" - integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== - dependencies: - sax "^1.2.4" - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yaml@^2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz" - integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== - -yocto-queue@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz" - integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg== - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==