20 Commits

Author SHA1 Message Date
minori c18e22d62e deps: update eslint to 10.0.0
Node.js CI / CI (pull_request) Failing after 20s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m26s
2026-02-17 07:04:51 -08:00
minori 2f7add2e10 deps: update eslint to 9.39.2
Node.js CI / CI (pull_request) Successful in 26s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m34s
2026-02-04 08:22:34 -08:00
hikari 2a8f9bd7ae docs: update feedback section to use support forum
Node.js CI / CI (push) Successful in 19s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m33s
2026-01-26 12:37:05 -08:00
naomi f11b8273c2 feat: automated upload of .gitea/workflows/ci.yml
Node.js CI / CI (push) Successful in 22s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 58s
2025-12-22 19:42:19 +01:00
naomi 9c0d38f61a feat: automated upload of .gitea/workflows/ci.yml
Node.js CI / CI (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has been cancelled
2025-12-22 19:35:47 +01:00
naomi 7ebb556d1b feat: automated upload of .gitea/workflows/ci.yml
Node.js CI / Lint and Test (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has been cancelled
2025-12-22 19:25:36 +01:00
naomi bfe7f682c0 feat: automated upload of .npmrc
Node.js CI / Lint and Test (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has been cancelled
2025-12-22 19:16:26 +01:00
naomi 24e3793eec feat: automated upload of .gitea/workflows/security.yml
Node.js CI / Lint and Test (push) Successful in 22s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m1s
2025-12-18 03:08:18 +01:00
naomi 61ecc80e9a feat: automated upload of .gitea/workflows/security.yml
Node.js CI / Lint and Test (push) Successful in 22s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m0s
2025-12-17 23:26:18 +01:00
naomi 2c46672a81 feat: automated upload of .gitea/workflows/security.yml
Node.js CI / Lint and Test (push) Successful in 20s
Security Scan / Security Audit (push) Failing after 6m54s
2025-12-12 03:38:03 +01:00
naomi 0387262581 feat: automated delete of .gitea/workflows/sonar.yml
Node.js CI / Lint and Test (push) Successful in 18s
Security Scan / Trivy Security Scan (push) Failing after 4m48s
2025-12-12 00:15:15 +01:00
naomi efa6028b4c feat: automated upload of .gitea/workflows/security.yml
Node.js CI / Lint and Test (push) Successful in 19s
Security Scan / Trivy Security Scan (push) Failing after 4m48s
Code Analysis / SonarQube (push) Failing after 4m47s
2025-12-11 20:12:08 +01:00
naomi d56d5dcbfc chore: cyc cohort is over
Code Analysis / SonarQube (push) Failing after 18s
Node.js CI / Lint and Test (push) Successful in 38s
2025-08-14 09:55:50 -07:00
naomi efaf3dce16 feat: add mentorship channel
Code Analysis / SonarQube (push) Failing after 17s
Node.js CI / Lint and Test (push) Successful in 38s
2025-07-31 17:05:29 -07:00
naomi 0441f1c68a chore: remove freecodecamp channels
Code Analysis / SonarQube (push) Failing after 22s
Node.js CI / Lint and Test (push) Successful in 45s
2025-07-29 10:02:53 -07:00
naomi fa1d627178 feat: add support for dsd cohort channels
Code Analysis / SonarQube (push) Failing after 17s
Node.js CI / Lint and Test (push) Successful in 36s
2025-07-14 17:44:55 -07:00
naomi c0b21ce82f feat: confirm participation
Code Analysis / SonarQube (push) Failing after 14s
Node.js CI / Lint and Test (push) Successful in 34s
2025-07-02 14:48:50 -07:00
naomi 8121f3bb6d feat: only assign participation in Maribelle's threads
Code Analysis / SonarQube (push) Failing after 16s
Node.js CI / Lint and Test (push) Successful in 35s
2025-07-02 14:29:18 -07:00
naomi a632f2b924 feat: make fallback ping use guild instead of hardcoded value
Code Analysis / SonarQube (push) Failing after 17s
Node.js CI / Lint and Test (push) Successful in 38s
So we can reuse this bot for other utilities
2025-07-01 13:47:07 -07:00
naomi 5a8e56d188 feat: allow pinging roles 2025-07-01 13:39:45 -07:00
10 changed files with 457 additions and 336 deletions
+13 -4
View File
@@ -8,23 +8,32 @@ on:
- main - main
jobs: jobs:
lint: ci:
name: Lint and Test name: CI
runs-on: ubuntu-latest
steps: steps:
- name: Checkout Source Files - name: Checkout Source Files
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Use Node.js v22 - name: Use Node.js v24
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: 22 node-version: 24
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v2 uses: pnpm/action-setup@v2
with: with:
version: 10 version: 10
- name: Ensure Dependencies are Pinned
uses: naomi-lgbt/dependency-pin-check@main
with:
language: javascript
dev-dependencies: true
peer-dependencies: true
optional-dependencies: true
- name: Install Dependencies - name: Install Dependencies
run: pnpm install run: pnpm install
+177
View File
@@ -0,0 +1,177 @@
name: Security Scan and Upload
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 0 * * 1'
workflow_dispatch:
jobs:
security-audit:
name: Security & DefectDojo Upload
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4
# --- AUTO-SETUP PROJECT ---
- name: Ensure DefectDojo Product Exists
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
PRODUCT_NAME: ${{ github.repository }}
PRODUCT_TYPE_ID: 1
run: |
sudo apt-get install jq -y > /dev/null
echo "Checking connection to $DD_URL..."
# Check if product exists - capture HTTP code to debug connection issues
RESPONSE=$(curl --write-out "%{http_code}" --silent --output /tmp/response.json \
-H "Authorization: Token $DD_TOKEN" \
"$DD_URL/api/v2/products/?name=$PRODUCT_NAME")
# If response is not 200, print error
if [ "$RESPONSE" != "200" ]; then
echo "::error::Failed to query DefectDojo. HTTP Code: $RESPONSE"
cat /tmp/response.json
exit 1
fi
COUNT=$(cat /tmp/response.json | jq -r '.count')
if [ "$COUNT" = "0" ]; then
echo "Creating product '$PRODUCT_NAME'..."
curl -s -X POST "$DD_URL/api/v2/products/" \
-H "Authorization: Token $DD_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "'"$PRODUCT_NAME"'", "description": "Auto-created by Gitea Actions", "prod_type": '$PRODUCT_TYPE_ID' }'
else
echo "Product '$PRODUCT_NAME' already exists."
fi
# --- 1. TRIVY (Dependencies & Misconfig) ---
- name: Install Trivy
run: |
sudo apt-get install wget apt-transport-https gnupg lsb-release -y
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update && sudo apt-get install trivy -y
- name: Run Trivy (FS Scan)
run: |
trivy fs . --scanners vuln,misconfig --format json --output trivy-results.json --exit-code 0
- name: Upload Trivy to DefectDojo
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
run: |
echo "Uploading Trivy results..."
# Generate today's date in YYYY-MM-DD format
TODAY=$(date +%Y-%m-%d)
HTTP_CODE=$(curl --write-out "%{http_code}" --output response.txt --silent -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "active=true" \
-F "verified=true" \
-F "scan_type=Trivy Scan" \
-F "engagement_name=CI/CD Pipeline" \
-F "product_name=${{ github.repository }}" \
-F "scan_date=$TODAY" \
-F "auto_create_context=true" \
-F "file=@trivy-results.json")
if [[ "$HTTP_CODE" != "200" && "$HTTP_CODE" != "201" ]]; then
echo "::error::Upload Failed with HTTP $HTTP_CODE"
echo "--- SERVER RESPONSE ---"
cat response.txt
echo "-----------------------"
exit 1
else
echo "Upload Success!"
fi
# --- 2. GITLEAKS (Secrets) ---
- name: Install Gitleaks
run: |
wget -qO gitleaks.tar.gz https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gz
tar -xzf gitleaks.tar.gz
sudo mv gitleaks /usr/local/bin/ && chmod +x /usr/local/bin/gitleaks
- name: Run Gitleaks
run: gitleaks detect --source . -v --report-path gitleaks-results.json --report-format json --no-git || true
- name: Upload Gitleaks to DefectDojo
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
run: |
echo "Uploading Gitleaks results..."
TODAY=$(date +%Y-%m-%d)
HTTP_CODE=$(curl --write-out "%{http_code}" --output response.txt --silent -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "active=true" \
-F "verified=true" \
-F "scan_type=Gitleaks Scan" \
-F "engagement_name=CI/CD Pipeline" \
-F "product_name=${{ github.repository }}" \
-F "scan_date=$TODAY" \
-F "auto_create_context=true" \
-F "file=@gitleaks-results.json")
if [[ "$HTTP_CODE" != "200" && "$HTTP_CODE" != "201" ]]; then
echo "::error::Upload Failed with HTTP $HTTP_CODE"
echo "--- SERVER RESPONSE ---"
cat response.txt
echo "-----------------------"
exit 1
else
echo "Upload Success!"
fi
# --- 3. SEMGREP (SAST) ---
- name: Install Semgrep (via pipx)
run: |
sudo apt-get install pipx -y
pipx install semgrep
# Add pipx binary path to GITHUB_PATH so next steps can see 'semgrep'
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Run Semgrep
run: semgrep scan --config=p/security-audit --config=p/owasp-top-ten --json --output semgrep-results.json . || true
- name: Upload Semgrep to DefectDojo
env:
DD_URL: ${{ secrets.DD_URL }}
DD_TOKEN: ${{ secrets.DD_TOKEN }}
run: |
echo "Uploading Semgrep results..."
TODAY=$(date +%Y-%m-%d)
HTTP_CODE=$(curl --write-out "%{http_code}" --output response.txt --silent -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "active=true" \
-F "verified=true" \
-F "scan_type=Semgrep JSON Report" \
-F "engagement_name=CI/CD Pipeline" \
-F "product_name=${{ github.repository }}" \
-F "scan_date=$TODAY" \
-F "auto_create_context=true" \
-F "file=@semgrep-results.json")
if [[ "$HTTP_CODE" != "200" && "$HTTP_CODE" != "201" ]]; then
echo "::error::Upload Failed with HTTP $HTTP_CODE"
echo "--- SERVER RESPONSE ---"
cat response.txt
echo "-----------------------"
exit 1
else
echo "Upload Success!"
fi
-34
View File
@@ -1,34 +0,0 @@
name: Code Analysis
on:
push:
branches:
- main
jobs:
sonar:
name: SonarQube
steps:
- name: Checkout Source Files
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: SonarCube Scan
uses: SonarSource/sonarqube-scan-action@v4
timeout-minutes: 10
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: "https://quality.nhcarrigan.com"
with:
args: >
-Dsonar.sources=.
-Dsonar.projectKey=standup-bot
- name: SonarQube Quality Gate check
uses: sonarsource/sonarqube-quality-gate-action@v1
with:
pollingTimeoutSec: 600
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: "https://quality.nhcarrigan.com"
+25
View File
@@ -0,0 +1,25 @@
# Package Manager Configuration
# Force pnpm usage - breaks npm/yarn intentionally
node-linker=pnpm
# Security: Disable all lifecycle scripts
ignore-scripts=true
enable-pre-post-scripts=false
# Security: Require packages to be 10+ days old before installation
minimum-release-age=14400
# Security: Verify package integrity hashes
verify-store-integrity=true
# Security: Enforce strict trust policies
trust-policy=strict
# Security: Strict peer dependency resolution
strict-peer-dependencies=true
# Performance: Use symlinks for node_modules
symlink=true
# Lockfile: Ensure lockfile is not modified during install
frozen-lockfile=false
+1 -1
View File
@@ -18,7 +18,7 @@ This page is currently deployed. [View the live website.]
## Feedback and Bugs ## Feedback and Bugs
If you have feedback or a bug report, please feel free to open a GitHub issue! If you have feedback or a bug report, please [log a ticket on our forum](https://support.nhcarrigan.com).
## Contributing ## Contributing
+1 -1
View File
@@ -19,7 +19,7 @@
"@types/node": "24.0.6", "@types/node": "24.0.6",
"@types/node-schedule": "2.1.7", "@types/node-schedule": "2.1.7",
"@vitest/coverage-istanbul": "3.2.4", "@vitest/coverage-istanbul": "3.2.4",
"eslint": "9.30.0", "eslint": "10.0.0",
"typescript": "5.8.3", "typescript": "5.8.3",
"vitest": "3.2.4" "vitest": "3.2.4"
}, },
+203 -188
View File
@@ -20,7 +20,7 @@ importers:
devDependencies: devDependencies:
'@nhcarrigan/eslint-config': '@nhcarrigan/eslint-config':
specifier: 5.2.0 specifier: 5.2.0
version: 5.2.0(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)) version: 5.2.0(@typescript-eslint/utils@8.25.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))
'@nhcarrigan/typescript-config': '@nhcarrigan/typescript-config':
specifier: 4.0.0 specifier: 4.0.0
version: 4.0.0(typescript@5.8.3) version: 4.0.0(typescript@5.8.3)
@@ -34,8 +34,8 @@ importers:
specifier: 3.2.4 specifier: 3.2.4
version: 3.2.4(vitest@3.2.4(@types/node@24.0.6)) version: 3.2.4(vitest@3.2.4(@types/node@24.0.6))
eslint: eslint:
specifier: 9.30.0 specifier: 10.0.0
version: 9.30.0 version: 10.0.0
typescript: typescript:
specifier: 5.8.3 specifier: 5.8.3
version: 5.8.3 version: 5.8.3
@@ -306,10 +306,20 @@ packages:
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/eslint-utils@4.9.1':
resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.12.1': '@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint-community/regexpp@4.12.2':
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/compat@1.2.4': '@eslint/compat@1.2.4':
resolution: {integrity: sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==} resolution: {integrity: sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -319,45 +329,33 @@ packages:
eslint: eslint:
optional: true optional: true
'@eslint/config-array@0.21.0': '@eslint/config-array@0.23.1':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} resolution: {integrity: sha512-uVSdg/V4dfQmTjJzR0szNczjOH/J+FyUMMjYtr07xFRXR7EDf9i1qdxrD0VusZH9knj1/ecxzCQQxyic5NzAiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/config-helpers@0.3.0': '@eslint/config-helpers@0.5.2':
resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/core@0.14.0': '@eslint/core@1.1.0':
resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/core@0.15.1':
resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.2.0': '@eslint/eslintrc@3.2.0':
resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.17.0': '@eslint/js@9.17.0':
resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.30.0': '@eslint/object-schema@3.0.1':
resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==} resolution: {integrity: sha512-P9cq2dpr+LU8j3qbLygLcSZrl2/ds/pUpfnHNNuk5HW7mnngHs+6WSq5C9mO3rqRX8A1poxqLTC9cu0KOyJlBg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/object-schema@2.1.6': '@eslint/plugin-kit@0.6.0':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/plugin-kit@0.3.3':
resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1': '@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@@ -379,6 +377,14 @@ packages:
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
engines: {node: '>=18.18'} engines: {node: '>=18.18'}
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
engines: {node: 20 || >=22}
'@isaacs/brace-expansion@5.0.1':
resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==}
engines: {node: 20 || >=22}
'@isaacs/cliui@8.0.2': '@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -478,51 +484,61 @@ packages:
resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.34.8': '@rollup/rollup-linux-arm-musleabihf@4.34.8':
resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.34.8': '@rollup/rollup-linux-arm64-gnu@4.34.8':
resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.34.8': '@rollup/rollup-linux-arm64-musl@4.34.8':
resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-loongarch64-gnu@4.34.8': '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8': '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.34.8': '@rollup/rollup-linux-riscv64-gnu@4.34.8':
resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-s390x-gnu@4.34.8': '@rollup/rollup-linux-s390x-gnu@4.34.8':
resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.34.8': '@rollup/rollup-linux-x64-gnu@4.34.8':
resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.34.8': '@rollup/rollup-linux-x64-musl@4.34.8':
resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.34.8': '@rollup/rollup-win32-arm64-msvc@4.34.8':
resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
@@ -566,9 +582,15 @@ packages:
'@types/deep-eql@4.0.2': '@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
'@types/esrecurse@4.3.1':
resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
'@types/estree@1.0.6': '@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/json-schema@7.0.15': '@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -747,11 +769,6 @@ packages:
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
hasBin: true
acorn@8.15.0: acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
@@ -880,10 +897,6 @@ packages:
resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
engines: {node: '>=12'} engines: {node: '>=12'}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
check-error@2.1.1: check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
@@ -1134,9 +1147,9 @@ packages:
peerDependencies: peerDependencies:
eslint: '>=8.56.0' eslint: '>=8.56.0'
eslint-scope@8.4.0: eslint-scope@9.1.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} resolution: {integrity: sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
eslint-visitor-keys@1.3.0: eslint-visitor-keys@1.3.0:
resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
@@ -1154,9 +1167,13 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.30.0: eslint-visitor-keys@5.0.0:
resolution: {integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==} resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
eslint@10.0.0:
resolution: {integrity: sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
jiti: '*' jiti: '*'
@@ -1168,9 +1185,9 @@ packages:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
espree@10.4.0: espree@11.1.0:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^20.19.0 || ^22.13.0 || >=24}
espree@6.2.1: espree@6.2.1:
resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==}
@@ -1180,6 +1197,10 @@ packages:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
esquery@1.7.0:
resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
esrecurse@4.3.0: esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
@@ -1592,9 +1613,6 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'} engines: {node: '>=10'}
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash.snakecase@4.1.1: lodash.snakecase@4.1.1:
resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
@@ -1653,6 +1671,10 @@ packages:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'} engines: {node: '>=4'}
minimatch@10.1.2:
resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==}
engines: {node: 20 || >=22}
minimatch@3.1.2: minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -2535,38 +2557,43 @@ snapshots:
'@esbuild/win32-x64@0.25.0': '@esbuild/win32-x64@0.25.0':
optional: true optional: true
'@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.30.0)': '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@10.0.0)':
dependencies: dependencies:
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint: 9.30.0 eslint: 10.0.0
ignore: 5.3.2 ignore: 5.3.2
'@eslint-community/eslint-utils@4.4.1(eslint@9.30.0)': '@eslint-community/eslint-utils@4.4.1(eslint@10.0.0)':
dependencies: dependencies:
eslint: 9.30.0 eslint: 10.0.0
eslint-visitor-keys: 3.4.3
'@eslint-community/eslint-utils@4.9.1(eslint@10.0.0)':
dependencies:
eslint: 10.0.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {} '@eslint-community/regexpp@4.12.1': {}
'@eslint/compat@1.2.4(eslint@9.30.0)': '@eslint-community/regexpp@4.12.2': {}
optionalDependencies:
eslint: 9.30.0
'@eslint/config-array@0.21.0': '@eslint/compat@1.2.4(eslint@10.0.0)':
optionalDependencies:
eslint: 10.0.0
'@eslint/config-array@0.23.1':
dependencies: dependencies:
'@eslint/object-schema': 2.1.6 '@eslint/object-schema': 3.0.1
debug: 4.4.0 debug: 4.4.1
minimatch: 3.1.2 minimatch: 10.1.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint/config-helpers@0.3.0': {} '@eslint/config-helpers@0.5.2':
'@eslint/core@0.14.0':
dependencies: dependencies:
'@types/json-schema': 7.0.15 '@eslint/core': 1.1.0
'@eslint/core@0.15.1': '@eslint/core@1.1.0':
dependencies: dependencies:
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
@@ -2584,29 +2611,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
debug: 4.4.0
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.1.0
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
'@eslint/js@9.17.0': {} '@eslint/js@9.17.0': {}
'@eslint/js@9.30.0': {} '@eslint/object-schema@3.0.1': {}
'@eslint/object-schema@2.1.6': {} '@eslint/plugin-kit@0.6.0':
'@eslint/plugin-kit@0.3.3':
dependencies: dependencies:
'@eslint/core': 0.15.1 '@eslint/core': 1.1.0
levn: 0.4.1 levn: 0.4.1
'@humanfs/core@0.19.1': {} '@humanfs/core@0.19.1': {}
@@ -2622,6 +2633,12 @@ snapshots:
'@humanwhocodes/retry@0.4.2': {} '@humanwhocodes/retry@0.4.2': {}
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.1':
dependencies:
'@isaacs/balanced-match': 4.0.1
'@isaacs/cliui@8.0.2': '@isaacs/cliui@8.0.2':
dependencies: dependencies:
string-width: 5.1.2 string-width: 5.1.2
@@ -2650,24 +2667,24 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
'@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))': '@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.25.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))':
dependencies: dependencies:
'@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.30.0) '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@10.0.0)
'@eslint/compat': 1.2.4(eslint@9.30.0) '@eslint/compat': 1.2.4(eslint@10.0.0)
'@eslint/eslintrc': 3.2.0 '@eslint/eslintrc': 3.2.0
'@eslint/js': 9.17.0 '@eslint/js': 9.17.0
'@stylistic/eslint-plugin': 2.12.1(eslint@9.30.0)(typescript@5.8.3) '@stylistic/eslint-plugin': 2.12.1(eslint@10.0.0)(typescript@5.8.3)
'@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)(typescript@5.8.3)
'@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/parser': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
'@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)) '@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.25.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))
eslint: 9.30.0 eslint: 10.0.0
eslint-plugin-deprecation: 3.0.0(eslint@9.30.0)(typescript@5.8.3) eslint-plugin-deprecation: 3.0.0(eslint@10.0.0)(typescript@5.8.3)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)
eslint-plugin-jsdoc: 50.6.1(eslint@9.30.0) eslint-plugin-jsdoc: 50.6.1(eslint@10.0.0)
eslint-plugin-playwright: 2.1.0(eslint@9.30.0) eslint-plugin-playwright: 2.1.0(eslint@10.0.0)
eslint-plugin-react: 7.37.3(eslint@9.30.0) eslint-plugin-react: 7.37.3(eslint@10.0.0)
eslint-plugin-sort-keys-fix: 1.1.2 eslint-plugin-sort-keys-fix: 1.1.2
eslint-plugin-unicorn: 56.0.1(eslint@9.30.0) eslint-plugin-unicorn: 56.0.1(eslint@10.0.0)
globals: 15.14.0 globals: 15.14.0
playwright: 1.50.1 playwright: 1.50.1
react: 19.0.0 react: 19.0.0
@@ -2770,10 +2787,10 @@ snapshots:
'@sapphire/snowflake@3.5.3': {} '@sapphire/snowflake@3.5.3': {}
'@stylistic/eslint-plugin@2.12.1(eslint@9.30.0)(typescript@5.8.3)': '@stylistic/eslint-plugin@2.12.1(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/utils': 8.25.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/utils': 8.25.0(eslint@10.0.0)(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.0
espree: 10.3.0 espree: 10.3.0
estraverse: 5.3.0 estraverse: 5.3.0
@@ -2788,8 +2805,12 @@ snapshots:
'@types/deep-eql@4.0.2': {} '@types/deep-eql@4.0.2': {}
'@types/esrecurse@4.3.1': {}
'@types/estree@1.0.6': {} '@types/estree@1.0.6': {}
'@types/estree@1.0.8': {}
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {} '@types/json5@0.0.29': {}
@@ -2808,15 +2829,15 @@ snapshots:
dependencies: dependencies:
'@types/node': 24.0.6 '@types/node': 24.0.6
'@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)': '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/parser': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.19.0 '@typescript-eslint/scope-manager': 8.19.0
'@typescript-eslint/type-utils': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/type-utils': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/utils': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.19.0 '@typescript-eslint/visitor-keys': 8.19.0
eslint: 9.30.0 eslint: 10.0.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.2 ignore: 5.3.2
natural-compare: 1.4.0 natural-compare: 1.4.0
@@ -2825,14 +2846,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3)': '@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.19.0 '@typescript-eslint/scope-manager': 8.19.0
'@typescript-eslint/types': 8.19.0 '@typescript-eslint/types': 8.19.0
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.19.0 '@typescript-eslint/visitor-keys': 8.19.0
debug: 4.4.0 debug: 4.4.0
eslint: 9.30.0 eslint: 10.0.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -2852,12 +2873,12 @@ snapshots:
'@typescript-eslint/types': 8.25.0 '@typescript-eslint/types': 8.25.0
'@typescript-eslint/visitor-keys': 8.25.0 '@typescript-eslint/visitor-keys': 8.25.0
'@typescript-eslint/type-utils@8.19.0(eslint@9.30.0)(typescript@5.8.3)': '@typescript-eslint/type-utils@8.19.0(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/utils': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
debug: 4.4.0 debug: 4.4.1
eslint: 9.30.0 eslint: 10.0.0
ts-api-utils: 1.4.3(typescript@5.8.3) ts-api-utils: 1.4.3(typescript@5.8.3)
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
@@ -2873,7 +2894,7 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/types': 7.18.0 '@typescript-eslint/types': 7.18.0
'@typescript-eslint/visitor-keys': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0
debug: 4.4.0 debug: 4.4.1
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.5 minimatch: 9.0.5
@@ -2888,7 +2909,7 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/types': 8.19.0 '@typescript-eslint/types': 8.19.0
'@typescript-eslint/visitor-keys': 8.19.0 '@typescript-eslint/visitor-keys': 8.19.0
debug: 4.4.0 debug: 4.4.1
fast-glob: 3.3.3 fast-glob: 3.3.3
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.5 minimatch: 9.0.5
@@ -2902,7 +2923,7 @@ snapshots:
dependencies: dependencies:
'@typescript-eslint/types': 8.25.0 '@typescript-eslint/types': 8.25.0
'@typescript-eslint/visitor-keys': 8.25.0 '@typescript-eslint/visitor-keys': 8.25.0
debug: 4.4.0 debug: 4.4.1
fast-glob: 3.3.3 fast-glob: 3.3.3
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.5 minimatch: 9.0.5
@@ -2912,35 +2933,35 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@7.18.0(eslint@9.30.0)(typescript@5.8.3)': '@typescript-eslint/utils@7.18.0(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0)
'@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/scope-manager': 7.18.0
'@typescript-eslint/types': 7.18.0 '@typescript-eslint/types': 7.18.0
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/utils@8.19.0(eslint@9.30.0)(typescript@5.8.3)': '@typescript-eslint/utils@8.19.0(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0)
'@typescript-eslint/scope-manager': 8.19.0 '@typescript-eslint/scope-manager': 8.19.0
'@typescript-eslint/types': 8.19.0 '@typescript-eslint/types': 8.19.0
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3)': '@typescript-eslint/utils@8.25.0(eslint@10.0.0)(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0)
'@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/scope-manager': 8.25.0
'@typescript-eslint/types': 8.25.0 '@typescript-eslint/types': 8.25.0
'@typescript-eslint/typescript-estree': 8.25.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -2953,12 +2974,12 @@ snapshots:
'@typescript-eslint/visitor-keys@8.19.0': '@typescript-eslint/visitor-keys@8.19.0':
dependencies: dependencies:
'@typescript-eslint/types': 8.19.0 '@typescript-eslint/types': 8.19.0
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.1
'@typescript-eslint/visitor-keys@8.25.0': '@typescript-eslint/visitor-keys@8.25.0':
dependencies: dependencies:
'@typescript-eslint/types': 8.25.0 '@typescript-eslint/types': 8.25.0
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.1
'@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/node@24.0.6))': '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/node@24.0.6))':
dependencies: dependencies:
@@ -2976,10 +2997,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))': '@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.25.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))':
dependencies: dependencies:
'@typescript-eslint/utils': 8.25.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/utils': 8.25.0(eslint@10.0.0)(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
optionalDependencies: optionalDependencies:
typescript: 5.8.3 typescript: 5.8.3
vitest: 3.2.4(@types/node@24.0.6) vitest: 3.2.4(@types/node@24.0.6)
@@ -3032,18 +3053,12 @@ snapshots:
dependencies: dependencies:
acorn: 7.4.1 acorn: 7.4.1
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
acorn-jsx@5.3.2(acorn@8.15.0): acorn-jsx@5.3.2(acorn@8.15.0):
dependencies: dependencies:
acorn: 8.15.0 acorn: 8.15.0
acorn@7.4.1: {} acorn@7.4.1: {}
acorn@8.14.0: {}
acorn@8.15.0: {} acorn@8.15.0: {}
ajv@6.12.6: ajv@6.12.6:
@@ -3196,11 +3211,6 @@ snapshots:
loupe: 3.1.3 loupe: 3.1.3
pathval: 2.0.0 pathval: 2.0.0
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
check-error@2.1.1: {} check-error@2.1.1: {}
ci-info@4.1.0: {} ci-info@4.1.0: {}
@@ -3472,27 +3482,27 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.0): eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.0):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/parser': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-deprecation@3.0.0(eslint@9.30.0)(typescript@5.8.3): eslint-plugin-deprecation@3.0.0(eslint@10.0.0)(typescript@5.8.3):
dependencies: dependencies:
'@typescript-eslint/utils': 7.18.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/utils': 7.18.0(eslint@10.0.0)(typescript@5.8.3)
eslint: 9.30.0 eslint: 10.0.0
ts-api-utils: 1.4.3(typescript@5.8.3) ts-api-utils: 1.4.3(typescript@5.8.3)
tslib: 2.8.1 tslib: 2.8.1
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0): eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3))(eslint@10.0.0):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.8 array-includes: 3.1.8
@@ -3501,9 +3511,9 @@ snapshots:
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7 debug: 3.2.7
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.30.0 eslint: 10.0.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.0) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@10.0.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.0)
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@@ -3515,20 +3525,20 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) '@typescript-eslint/parser': 8.19.0(eslint@10.0.0)(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-plugin-jsdoc@50.6.1(eslint@9.30.0): eslint-plugin-jsdoc@50.6.1(eslint@10.0.0):
dependencies: dependencies:
'@es-joy/jsdoccomment': 0.49.0 '@es-joy/jsdoccomment': 0.49.0
are-docs-informative: 0.0.2 are-docs-informative: 0.0.2
comment-parser: 1.4.1 comment-parser: 1.4.1
debug: 4.4.0 debug: 4.4.0
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint: 9.30.0 eslint: 10.0.0
espree: 10.3.0 espree: 10.3.0
esquery: 1.6.0 esquery: 1.6.0
parse-imports: 2.2.1 parse-imports: 2.2.1
@@ -3538,12 +3548,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-playwright@2.1.0(eslint@9.30.0): eslint-plugin-playwright@2.1.0(eslint@10.0.0):
dependencies: dependencies:
eslint: 9.30.0 eslint: 10.0.0
globals: 13.24.0 globals: 13.24.0
eslint-plugin-react@7.37.3(eslint@9.30.0): eslint-plugin-react@7.37.3(eslint@10.0.0):
dependencies: dependencies:
array-includes: 3.1.8 array-includes: 3.1.8
array.prototype.findlast: 1.2.5 array.prototype.findlast: 1.2.5
@@ -3551,7 +3561,7 @@ snapshots:
array.prototype.tosorted: 1.1.4 array.prototype.tosorted: 1.1.4
doctrine: 2.1.0 doctrine: 2.1.0
es-iterator-helpers: 1.2.1 es-iterator-helpers: 1.2.1
eslint: 9.30.0 eslint: 10.0.0
estraverse: 5.3.0 estraverse: 5.3.0
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
@@ -3572,14 +3582,14 @@ snapshots:
natural-compare: 1.4.0 natural-compare: 1.4.0
requireindex: 1.2.0 requireindex: 1.2.0
eslint-plugin-unicorn@56.0.1(eslint@9.30.0): eslint-plugin-unicorn@56.0.1(eslint@10.0.0):
dependencies: dependencies:
'@babel/helper-validator-identifier': 7.25.9 '@babel/helper-validator-identifier': 7.25.9
'@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) '@eslint-community/eslint-utils': 4.4.1(eslint@10.0.0)
ci-info: 4.1.0 ci-info: 4.1.0
clean-regexp: 1.0.0 clean-regexp: 1.0.0
core-js-compat: 3.40.0 core-js-compat: 3.40.0
eslint: 9.30.0 eslint: 10.0.0
esquery: 1.6.0 esquery: 1.6.0
globals: 15.14.0 globals: 15.14.0
indent-string: 4.0.0 indent-string: 4.0.0
@@ -3592,8 +3602,10 @@ snapshots:
semver: 7.7.1 semver: 7.7.1
strip-indent: 3.0.0 strip-indent: 3.0.0
eslint-scope@8.4.0: eslint-scope@9.1.0:
dependencies: dependencies:
'@types/esrecurse': 4.3.1
'@types/estree': 1.0.8
esrecurse: 4.3.0 esrecurse: 4.3.0
estraverse: 5.3.0 estraverse: 5.3.0
@@ -3605,30 +3617,28 @@ snapshots:
eslint-visitor-keys@4.2.1: {} eslint-visitor-keys@4.2.1: {}
eslint@9.30.0: eslint-visitor-keys@5.0.0: {}
eslint@10.0.0:
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0)
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.0 '@eslint/config-array': 0.23.1
'@eslint/config-helpers': 0.3.0 '@eslint/config-helpers': 0.5.2
'@eslint/core': 0.14.0 '@eslint/core': 1.1.0
'@eslint/eslintrc': 3.3.1 '@eslint/plugin-kit': 0.6.0
'@eslint/js': 9.30.0
'@eslint/plugin-kit': 0.3.3
'@humanfs/node': 0.16.6 '@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.2 '@humanwhocodes/retry': 0.4.2
'@types/estree': 1.0.6 '@types/estree': 1.0.6
'@types/json-schema': 7.0.15
ajv: 6.12.6 ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 4.4.0 debug: 4.4.1
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 8.4.0 eslint-scope: 9.1.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 5.0.0
espree: 10.4.0 espree: 11.1.0
esquery: 1.6.0 esquery: 1.7.0
esutils: 2.0.3 esutils: 2.0.3
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
file-entry-cache: 8.0.0 file-entry-cache: 8.0.0
@@ -3638,25 +3648,24 @@ snapshots:
imurmurhash: 0.1.4 imurmurhash: 0.1.4
is-glob: 4.0.3 is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1 json-stable-stringify-without-jsonify: 1.0.1
lodash.merge: 4.6.2 minimatch: 10.1.2
minimatch: 3.1.2
natural-compare: 1.4.0 natural-compare: 1.4.0
optionator: 0.9.4 optionator: 0.9.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
espree@10.3.0: espree@10.3.0:
dependencies:
acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 4.2.0
espree@10.4.0:
dependencies: dependencies:
acorn: 8.15.0 acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0) acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
espree@11.1.0:
dependencies:
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 5.0.0
espree@6.2.1: espree@6.2.1:
dependencies: dependencies:
acorn: 7.4.1 acorn: 7.4.1
@@ -3667,6 +3676,10 @@ snapshots:
dependencies: dependencies:
estraverse: 5.3.0 estraverse: 5.3.0
esquery@1.7.0:
dependencies:
estraverse: 5.3.0
esrecurse@4.3.0: esrecurse@4.3.0:
dependencies: dependencies:
estraverse: 5.3.0 estraverse: 5.3.0
@@ -4087,8 +4100,6 @@ snapshots:
dependencies: dependencies:
p-locate: 5.0.0 p-locate: 5.0.0
lodash.merge@4.6.2: {}
lodash.snakecase@4.1.1: {} lodash.snakecase@4.1.1: {}
lodash@4.17.21: {} lodash@4.17.21: {}
@@ -4138,6 +4149,10 @@ snapshots:
min-indent@1.0.1: {} min-indent@1.0.1: {}
minimatch@10.1.2:
dependencies:
'@isaacs/brace-expansion': 5.0.1
minimatch@3.1.2: minimatch@3.1.2:
dependencies: dependencies:
brace-expansion: 1.1.11 brace-expansion: 1.1.11
+18 -103
View File
@@ -4,112 +4,27 @@
* @author Naomi Carrigan * @author Naomi Carrigan
*/ */
/** interface Channel {
* The channels to post standup reminders in.
*/
export const channels: Array<{
channelId: string; channelId: string;
roleId: string; roleId: string;
name: string; name: string;
}> = [ }
const nhcarriganMentorshipChannels: Array<Channel> = [
{ {
channelId: "1382093555228606484", channelId: "1400630073010163792",
name: "red-script", name: "accountability",
roleId: "1382091453987029144", roleId: "1400588705273745550",
},
{
channelId: "1382093583963656223",
name: "orange-bytes",
roleId: "1382091462707122186",
},
{
channelId: "1382093618017337574",
name: "yellow-packet",
roleId: "1382091466767208538",
},
{
channelId: "1382093654885138439",
name: "green-loop",
roleId: "1382091470877491364",
},
{
channelId: "1382093684925005935",
name: "blue-stack",
roleId: "1382091474560356393",
},
{
channelId: "1382093724200210522",
name: "purple-array",
roleId: "1382091477710012456",
},
{
channelId: "1382093753489162330",
name: "pink-protocol",
roleId: "1382091502255341568",
},
{
channelId: "1382093785973915820",
name: "cyan-branch",
roleId: "1382091520533856337",
},
{
channelId: "1382093811693387867",
name: "teal-cache",
roleId: "1382091525873336400",
},
{
channelId: "1382093843918225520",
name: "mint-syntax",
roleId: "1382091530428219603",
},
{
channelId: "1382093883722174605",
name: "lime-variable",
roleId: "1382091534538641458",
},
{
channelId: "1382093910259798046",
name: "rose-token",
roleId: "1382091538900979762",
},
{
channelId: "1382093973488799886",
name: "lavender-query",
roleId: "1382091542961066014",
},
{
channelId: "1382094002526097489",
name: "indigo-class",
roleId: "1382091547742568559",
},
{
channelId: "1382094051360116837",
name: "golden-index",
roleId: "1382091551982882936",
},
{
channelId: "1382094088739754096",
name: "silver-promise",
roleId: "1382091556613394443",
},
{
channelId: "1382094114467745912",
name: "bronze-thread",
roleId: "1382091560367292536",
},
{
channelId: "1382094146206044181",
name: "maroon-socket",
roleId: "1382091564498681907",
},
{
channelId: "1382094200211771522",
name: "violet-function",
roleId: "1382091568252719205",
},
{
channelId: "1382094311264616670",
name: "grey-database",
roleId: "1382091572602212622",
}, },
]; ];
const freeCodeCampHackathonChannels: Array<Channel> = [];
const dallasSoftwareDevelopersCohortChannels: Array<Channel> = [];
/**
* The channels to post standup reminders in.
*/
export const channels: Array<Channel> = [
...freeCodeCampHackathonChannels,
...dallasSoftwareDevelopersCohortChannels,
...nhcarriganMentorshipChannels,
];
+13 -1
View File
@@ -38,7 +38,8 @@ client.on(Events.ClientReady, () => {
}); });
}); });
client.on(Events.MessageCreate, (message) => { // eslint-disable-next-line @typescript-eslint/no-misused-promises -- sod off this is going away next month.
client.on(Events.MessageCreate, async(message) => {
if (!message.channel.isThread() || !message.inGuild()) { if (!message.channel.isThread() || !message.inGuild()) {
return; return;
} }
@@ -54,8 +55,19 @@ client.on(Events.MessageCreate, (message) => {
if (message.author.bot) { if (message.author.bot) {
return; return;
} }
const threadOwner = await message.channel.fetchOwner();
// Check if thread owner is Maribelle (to indicate it is progress thread)
if (threadOwner?.id !== "1386862413936328796") {
return;
}
if (!activeIds.includes(message.author.id)) { if (!activeIds.includes(message.author.id)) {
activeIds.push(message.author.id); activeIds.push(message.author.id);
await message.channel.send({
allowedMentions: {
parse: [],
},
content: `-# Thank you for your progress update, <@${message.author.id}>! Your participation for today has been recorded.`,
});
} }
}); });
+6 -4
View File
@@ -66,17 +66,19 @@ export const standup = async(
await Promise.all( await Promise.all(
filtered.map(async(channel) => { filtered.map(async(channel) => {
const sent = await channel. const sent = await channel.
send( send({ allowedMentions: {
parse: [ "roles" ],
},
content:
`Good morning <@&${ `Good morning <@&${
channels.find((c) => { channels.find((c) => {
return c.channelId === channel.id; return c.channelId === channel.id;
})?.roleId ?? "692816967895220344" })?.roleId ?? channel.guildId
}> It is time for your daily progress update. Please share the following in this thread: }> It is time for your daily progress update. Please share the following in this thread:
1️⃣ What did you accomplish yesterday? 1️⃣ What did you accomplish yesterday?
2️⃣ What are you working on today? 2️⃣ What are you working on today?
3️⃣ Are there any blockers or issues you need help with?`, 3️⃣ Are there any blockers or issues you need help with?` }).
).
catch(() => { catch(() => {
void logger.log( void logger.log(
"warn", "warn",