commit 21008063a53d8ebcb462b84346ce81fabf3f66d4
parent 7322a77ddd9166af81222569838beebde5f8a713
Author: iostpa <iostpa@iostpa.com>
Date: Sun, 28 Jun 2026 18:05:17 +0300
v1.6.0 (#66)
* chore(): move from MariaDB to SQLite
* fix(): some unremovable labels keep getting removed
* v1.6.0
Diffstat:
12 files changed, 670 insertions(+), 372 deletions(-)
diff --git a/.env.example b/.env.example
@@ -1,12 +1,8 @@
NODE_ENV="production"
APP_ID=""
-PRIVATE_KEY_PATH="private-key.pem"
+PRIVATE_KEY_PATH="./data/private-key.pem"
+DB_PATH="./data/reviewbot.db"
WEBHOOK_SECRET=""
SENTRY=""
PORT="3000"
INSTALLATION_ID=""
-SQL_HOST=""
-SQL_PORT=""
-SQL_USER=""
-SQL_PASSWORD=""
-SQL_DB_NAME=""
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
@@ -12,9 +12,9 @@ updates:
patterns:
- "*"
cooldown:
- semver-major-days: 14 # Waits 14 days before updating major versions
- semver-minor-days: 7 # Waits 7 days before updating minor versions
- semver-patch-days: 3 # Waits 3 days before updating patch versions
+ semver-major-days: 5 # Waits 5 days before updating major versions
+ semver-minor-days: 3 # Waits 3 days before updating minor versions
+ semver-patch-days: 2 # Waits 2 days before updating patch versions
- package-ecosystem: "github-actions"
target-branch: "main"
diff --git a/.gitignore b/.gitignore
@@ -25,3 +25,4 @@ dist-ssr
*.sw?
private-key.pem
+data
diff --git a/docker-compose.yml b/docker-compose.yml
@@ -1,17 +1,4 @@
services:
- mariadb:
- ports:
- - "3306:3306"
- image: mariadb:12
- restart: always
- volumes:
- - "./database:/var/lib/mysql"
- environment:
- MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
- MYSQL_DATABASE: "${MYSQL_DATABASE}"
- MYSQL_USER: "${MYSQL_USER}"
- MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
- env_file: ".db.env"
reviewbot:
image: ghcr.io/iostpa/reviewbot:latest
restart: always
@@ -19,4 +6,4 @@ services:
ports:
- "3000:3000"
volumes:
- - ./private-key.pem:/app/private-key.pem:ro # read-only-
\ No newline at end of file
+ - ./data:/app/data+
\ No newline at end of file
diff --git a/package.json b/package.json
@@ -1,7 +1,7 @@
{
"name": "reviewbot",
"private": true,
- "version": "1.5.2",
+ "version": "1.6.0",
"type": "module",
"description": "An app to assist in the review process of is-a-dev",
"author": "iostpa",
@@ -12,8 +12,8 @@
},
"devDependencies": {
"@eslint/js": "^10.0.1",
- "eslint": "^10.4.1",
- "globals": "^17.6.0",
+ "eslint": "^10.6.0",
+ "globals": "^17.7.0",
"prettier": "3.8.4",
"smee-client": "^5.0.0"
},
@@ -22,7 +22,8 @@
"@octokit/auth-app": "^8.2.0",
"@octokit/core": "^7.0.6",
"@octokit/webhooks": "^14.2.0",
- "@sentry/node": "^10.57.0",
+ "@sentry/node": "^10.62.0",
+ "better-sqlite3": "^12.11.1",
"cron": "^4.4.0",
"dotenv": "^17.4.2",
"fastify": "^5.8.5",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
@@ -21,8 +21,11 @@ importers:
specifier: ^14.2.0
version: 14.2.0
'@sentry/node':
- specifier: ^10.57.0
- version: 10.57.0
+ specifier: ^10.62.0
+ version: 10.62.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))
+ better-sqlite3:
+ specifier: ^12.11.1
+ version: 12.11.1
cron:
specifier: ^4.4.0
version: 4.4.0
@@ -41,13 +44,13 @@ importers:
devDependencies:
'@eslint/js':
specifier: ^10.0.1
- version: 10.0.1(eslint@10.4.1)
+ version: 10.0.1(eslint@10.6.0)
eslint:
- specifier: ^10.4.1
- version: 10.4.1
+ specifier: ^10.6.0
+ version: 10.6.0
globals:
- specifier: ^17.6.0
- version: 17.6.0
+ specifier: ^17.7.0
+ version: 17.7.0
prettier:
specifier: 3.8.4
version: 3.8.4
@@ -57,6 +60,17 @@ importers:
packages:
+ '@apm-js-collab/code-transformer-bundler-plugins@0.5.0':
+ resolution: {integrity: sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@apm-js-collab/code-transformer@0.15.0':
+ resolution: {integrity: sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==}
+ hasBin: true
+
+ '@apm-js-collab/tracing-hooks@0.10.0':
+ resolution: {integrity: sha512-2/Z3NTewJTruUkmsSnBC5bJlLNUd9keuD1OLlTEpim4FyLhm6m2Rnfv+wrFdUvFfhmH8CRdiDZBqBrn+wyaGuA==}
+
'@eslint-community/eslint-utils@4.9.1':
resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -137,6 +151,9 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
'@octokit/app@16.1.2':
resolution: {integrity: sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==}
engines: {node: '>= 20'}
@@ -252,8 +269,8 @@ packages:
resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/core@2.7.1':
- resolution: {integrity: sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==}
+ '@opentelemetry/core@2.8.0':
+ resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
@@ -264,14 +281,14 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/resources@2.7.1':
- resolution: {integrity: sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ==}
+ '@opentelemetry/resources@2.8.0':
+ resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
- '@opentelemetry/sdk-trace-base@2.7.1':
- resolution: {integrity: sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw==}
+ '@opentelemetry/sdk-trace-base@2.8.0':
+ resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
@@ -283,16 +300,16 @@ packages:
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
- '@sentry-internal/server-utils@10.57.0':
- resolution: {integrity: sha512-Qu8ETmX/ITzteG7Im46b9HOxKKzeaIeqNvftaIlFURu1RUQdHbtGerS7QOmXzwnhuqNGNeiCQYkduB798IfRqA==}
- engines: {node: '>=18'}
+ '@sentry/conventions@0.12.0':
+ resolution: {integrity: sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==}
+ engines: {node: '>=14'}
- '@sentry/core@10.57.0':
- resolution: {integrity: sha512-kntItTA2kiT0YpL7encXaF6mkdZMB+y48lwj8w1wkfBpfJAC7sifdgrzLQZqmsqVNE3crg9VfufaAGA+78uFMg==}
+ '@sentry/core@10.62.0':
+ resolution: {integrity: sha512-tV69fMg2sS5DUFmQSnS7Jd5qJAp0izxwcsvBVz2ieTM9VMRi99IfOSYW9UYr3p1yfuksk41kefN5PEbeedUE+A==}
engines: {node: '>=18'}
- '@sentry/node-core@10.57.0':
- resolution: {integrity: sha512-2v2IF6MfTiu7pimWEq2rYhZsmlwyNbs3bHUsrYFPeP/Rpa6ObDuUWPdVEzJjfyK+AqqYZYxZdV0l3+B13kTEmQ==}
+ '@sentry/node-core@10.62.0':
+ resolution: {integrity: sha512-V7rDgbxViiHU0OpcFEDp3l41IFvWTasKHfXw8SQ6yIgtZ8VpFqmz2TR5N7X85iIOmWIvK5HV0yp0eDdsly0+rA==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -300,7 +317,6 @@ packages:
'@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1'
'@opentelemetry/instrumentation': '>=0.57.1 <1'
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
- '@opentelemetry/semantic-conventions': ^1.39.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
@@ -312,21 +328,22 @@ packages:
optional: true
'@opentelemetry/sdk-trace-base':
optional: true
- '@opentelemetry/semantic-conventions':
- optional: true
- '@sentry/node@10.57.0':
- resolution: {integrity: sha512-7KEStrJ97wPf1fA5nU5ONeTTcIIlh7oT8OMffEVA1PXmlhFoXhcQZVzr4rM+zj9tfMWT01og5Ng/Grgh3dN+FA==}
+ '@sentry/node@10.62.0':
+ resolution: {integrity: sha512-4hoU67bJY0o3irEDMZu2UIztAOsvEqFkLXA7EUKl1LXMA3Ba1Lb32OUVqlsTypiEInSDs/BtM+aAFKojZ3P3Fw==}
engines: {node: '>=18'}
- '@sentry/opentelemetry@10.57.0':
- resolution: {integrity: sha512-iwRz8cEK0GOISG34aJRO8GdYOk3nfpuT6dT2GDQrxw8f7JjkJKx9LPU8MaenOFa4MhY+Z02hI6NNcrbsoI3cXg==}
+ '@sentry/opentelemetry@10.62.0':
+ resolution: {integrity: sha512-nFwBgtjfwgY8P5lAuQFWfAsQW1MXxuQ6kR/HtBs+A6julqwGGS2QnQ65OCWMzz6IqDEL/pRgT1405/gU+OXU3A==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
'@opentelemetry/core': ^1.30.1 || ^2.1.0
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
- '@opentelemetry/semantic-conventions': ^1.39.0
+
+ '@sentry/server-utils@10.62.0':
+ resolution: {integrity: sha512-S5szsj6kKBhxw97b2HA98fYp/PpWXvSizlisEzb2rnL4IH6RAJ8wP05/fnth8pSywTH+gtUu+i6Wn8e8rX5HvA==}
+ engines: {node: '>=18'}
'@types/aws-lambda@8.10.162':
resolution: {integrity: sha512-Fn658grtLOci1oxi1391vvDWJRKNGWRSqfxRkmN/Iy3c0tQH1USMKEXcPYHLvope+ZgTFocx9FRQJx1muBL6qw==}
@@ -343,11 +360,11 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/luxon@3.7.1':
- resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==}
+ '@types/luxon@3.7.2':
+ resolution: {integrity: sha512-gW+Oib+vUtGJBtNC8V9Reww0oIpusw+4m81uncg9REGZAJfqOQHfo/nkabnc7w0QReXyPqjrbWMJk6NuAkiX3Q==}
- '@types/node@25.9.2':
- resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==}
+ '@types/node@26.0.1':
+ resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==}
abstract-logging@2.0.1:
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
@@ -362,8 +379,8 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.16.0:
- resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ acorn@8.17.0:
+ resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -381,6 +398,10 @@ packages:
ajv@8.20.0:
resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
atomic-sleep@1.0.0:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
@@ -392,9 +413,22 @@ packages:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
before-after-hook@4.0.0:
resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==}
+ better-sqlite3@12.11.1:
+ resolution: {integrity: sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==}
+ engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x || 26.x}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
bottleneck@2.19.5:
resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==}
@@ -402,6 +436,12 @@ packages:
resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
engines: {node: 18 || 20 || >=22}
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
cjs-module-lexer@2.2.0:
resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
@@ -430,6 +470,14 @@ packages:
supports-color:
optional: true
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -441,10 +489,20 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
dotenv@17.4.2:
resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
engines: {node: '>=12'}
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ es-module-lexer@2.1.0:
+ resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -461,8 +519,8 @@ packages:
resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint@10.4.1:
- resolution: {integrity: sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==}
+ eslint@10.6.0:
+ resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
peerDependencies:
@@ -499,6 +557,10 @@ packages:
resolution: {integrity: sha512-2GuF51iuHX6A9xdTccMTsNb7VO0lHZihApxhvQzJB5A03DvHDd2FQepodbMaztPBmBcE/ox7o2gqaxGhYB9LhQ==}
engines: {node: '>=20.0.0'}
+ expand-template@2.0.3:
+ resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+ engines: {node: '>=6'}
+
fast-decode-uri-component@1.0.1:
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
@@ -533,6 +595,9 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
find-my-way@9.6.0:
resolution: {integrity: sha512-Zf4Xve4RymLl7NgaavNebZ01joJ8MfVerOG43wy7SHLO+r+K0C6d/SE0BiR7AV5V1VOCFlOP7ecdo+I4qmiHrQ==}
engines: {node: '>=20'}
@@ -548,30 +613,45 @@ packages:
flatted@3.4.2:
resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+ github-from-package@0.0.0:
+ resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- globals@17.6.0:
- resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==}
+ globals@17.7.0:
+ resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==}
engines: {node: '>=18'}
iconv-lite@0.7.2:
resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
engines: {node: '>=0.10.0'}
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- import-in-the-middle@3.0.2:
- resolution: {integrity: sha512-LGLYRl0A2gtyUJb2WDliBHmk6TtlHwdDjxonacZ8QrEs/ZW+YDgNv2QAfjRQWpS8HqvNcq6GGnN6jrOa5FysDQ==}
+ import-in-the-middle@3.2.0:
+ resolution: {integrity: sha512-vR2B6HKIhaBjcZr2bLpFiJ1VbzOlRQ7aby4/gw5WPIzToLjqpfWw3VJ4sk1uDchoOODEirvO2jyrSPtUSL5CrQ==}
engines: {node: '>=18'}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
ipaddr.js@2.4.0:
resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==}
engines: {node: '>= 10'}
@@ -627,23 +707,47 @@ packages:
resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
mariadb@3.5.3:
resolution: {integrity: sha512-i053Kc0MgdUv/hu9mCyq67TYfPXFj3/MV8I7ZW5wvJNixIyXC0VztMPUjIVj/449nQo+BsxFD4Fdk/sA/uqKPQ==}
engines: {node: '>= 20.0.0'}
+ meriyah@6.1.4:
+ resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==}
+ engines: {node: '>=18.0.0'}
+
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
minimatch@10.2.5:
resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp-classic@0.5.3:
+ resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+
module-details-from-path@1.0.4:
resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ napi-build-utils@2.0.0:
+ resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ node-abi@3.92.0:
+ resolution: {integrity: sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==}
+ engines: {node: '>=10'}
+
octokit@5.0.5:
resolution: {integrity: sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==}
engines: {node: '>= 20'}
@@ -652,6 +756,9 @@ packages:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -685,6 +792,12 @@ packages:
resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
hasBin: true
+ prebuild-install@7.1.3:
+ resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
+ engines: {node: '>=10'}
+ deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available.
+ hasBin: true
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -700,6 +813,9 @@ packages:
process-warning@5.0.0:
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+ pump@3.0.4:
+ resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -707,6 +823,14 @@ packages:
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
real-require@0.2.0:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
@@ -733,6 +857,9 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
safe-regex2@5.1.1:
resolution: {integrity: sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==}
hasBin: true
@@ -747,8 +874,11 @@ packages:
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
- semver@7.8.4:
- resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==}
+ semifies@1.0.0:
+ resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==}
+
+ semver@7.8.5:
+ resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
engines: {node: '>=10'}
hasBin: true
@@ -763,6 +893,12 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
+ simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+ simple-get@4.0.1:
+ resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+
smee-client@5.0.0:
resolution: {integrity: sha512-OYL8xPr1Tc0iqGohTGqHO/qEvUrPktK0a2Qcb0Uuj+j4KLnH5bsOhOlmpnmdh4zgzL3OwTfodcmkg5fVgiMUHw==}
engines: {node: ^20.18 || >= 22}
@@ -771,10 +907,28 @@ packages:
sonic-boom@4.2.1:
resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
+ tar-fs@2.1.5:
+ resolution: {integrity: sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==}
+
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
thread-stream@4.2.0:
resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==}
engines: {node: '>=20'}
@@ -783,15 +937,18 @@ packages:
resolution: {integrity: sha512-5DXWzE4Vz7xNHsv+xQ+MGfJYyC78Aok3tEr0MNwHoRf7vZnga1mQXZ4/Nsodld4VR6Wd+VhfmqnNrsRJyYPfrQ==}
engines: {node: '>=20'}
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- undici-types@7.24.6:
- resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
+ undici-types@8.3.0:
+ resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==}
- undici@7.27.2:
- resolution: {integrity: sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==}
+ undici@7.28.0:
+ resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==}
engines: {node: '>=20.18.1'}
universal-github-app-jwt@2.2.2:
@@ -803,6 +960,9 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -812,15 +972,42 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
snapshots:
- '@eslint-community/eslint-utils@4.9.1(eslint@10.4.1)':
+ '@apm-js-collab/code-transformer-bundler-plugins@0.5.0':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.15.0
+ es-module-lexer: 2.1.0
+ magic-string: 0.30.21
+ module-details-from-path: 1.0.4
+
+ '@apm-js-collab/code-transformer@0.15.0':
+ dependencies:
+ '@types/estree': 1.0.9
+ astring: 1.9.0
+ esquery: 1.7.0
+ meriyah: 6.1.4
+ semifies: 1.0.0
+ source-map: 0.6.1
+
+ '@apm-js-collab/tracing-hooks@0.10.0':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.15.0
+ debug: 4.4.3
+ module-details-from-path: 1.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)':
dependencies:
- eslint: 10.4.1
+ eslint: 10.6.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -841,9 +1028,9 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/js@10.0.1(eslint@10.4.1)':
+ '@eslint/js@10.0.1(eslint@10.6.0)':
optionalDependencies:
- eslint: 10.4.1
+ eslint: 10.6.0
'@eslint/object-schema@3.0.5': {}
@@ -899,6 +1086,8 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
'@octokit/app@16.1.2':
dependencies:
'@octokit/auth-app': 8.2.0
@@ -1053,7 +1242,7 @@ snapshots:
'@opentelemetry/api@1.9.1': {}
- '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1)':
+ '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)':
dependencies:
'@opentelemetry/api': 1.9.1
'@opentelemetry/semantic-conventions': 1.41.1
@@ -1062,69 +1251,78 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.1
'@opentelemetry/api-logs': 0.214.0
- import-in-the-middle: 3.0.2
+ import-in-the-middle: 3.2.0
require-in-the-middle: 8.0.1
transitivePeerDependencies:
- supports-color
- '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.1)':
+ '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)':
dependencies:
'@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
'@opentelemetry/semantic-conventions': 1.41.1
- '@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1)':
+ '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)':
dependencies:
'@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
- '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.1)
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1)
'@opentelemetry/semantic-conventions': 1.41.1
'@opentelemetry/semantic-conventions@1.41.1': {}
'@pinojs/redact@0.4.0': {}
- '@sentry-internal/server-utils@10.57.0':
- dependencies:
- '@sentry/core': 10.57.0
+ '@sentry/conventions@0.12.0': {}
- '@sentry/core@10.57.0': {}
+ '@sentry/core@10.62.0': {}
- '@sentry/node-core@10.57.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)':
+ '@sentry/node-core@10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))':
dependencies:
- '@sentry/core': 10.57.0
- '@sentry/opentelemetry': 10.57.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
- import-in-the-middle: 3.0.2
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.62.0
+ '@sentry/opentelemetry': 10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ import-in-the-middle: 3.2.0
optionalDependencies:
'@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
'@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1)
- '@opentelemetry/semantic-conventions': 1.41.1
+ '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
- '@sentry/node@10.57.0':
+ '@sentry/node@10.62.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))':
dependencies:
'@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
'@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
'@opentelemetry/semantic-conventions': 1.41.1
- '@sentry-internal/server-utils': 10.57.0
- '@sentry/core': 10.57.0
- '@sentry/node-core': 10.57.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
- '@sentry/opentelemetry': 10.57.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
- import-in-the-middle: 3.0.2
+ '@sentry/core': 10.62.0
+ '@sentry/node-core': 10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ '@sentry/opentelemetry': 10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))
+ '@sentry/server-utils': 10.62.0
+ import-in-the-middle: 3.2.0
transitivePeerDependencies:
+ - '@opentelemetry/core'
- '@opentelemetry/exporter-trace-otlp-http'
- supports-color
- '@sentry/opentelemetry@10.57.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)':
+ '@sentry/opentelemetry@10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))':
dependencies:
'@opentelemetry/api': 1.9.1
- '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1)
- '@opentelemetry/semantic-conventions': 1.41.1
- '@sentry/core': 10.57.0
+ '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1)
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.62.0
+
+ '@sentry/server-utils@10.62.0':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.15.0
+ '@apm-js-collab/code-transformer-bundler-plugins': 0.5.0
+ '@apm-js-collab/tracing-hooks': 0.10.0
+ '@sentry/conventions': 0.12.0
+ '@sentry/core': 10.62.0
+ magic-string: 0.30.21
+ transitivePeerDependencies:
+ - supports-color
'@types/aws-lambda@8.10.162': {}
@@ -1136,23 +1334,23 @@ snapshots:
'@types/json-schema@7.0.15': {}
- '@types/luxon@3.7.1': {}
+ '@types/luxon@3.7.2': {}
- '@types/node@25.9.2':
+ '@types/node@26.0.1':
dependencies:
- undici-types: 7.24.6
+ undici-types: 8.3.0
abstract-logging@2.0.1: {}
- acorn-import-attributes@1.9.5(acorn@8.16.0):
+ acorn-import-attributes@1.9.5(acorn@8.17.0):
dependencies:
- acorn: 8.16.0
+ acorn: 8.17.0
- acorn-jsx@5.3.2(acorn@8.16.0):
+ acorn-jsx@5.3.2(acorn@8.17.0):
dependencies:
- acorn: 8.16.0
+ acorn: 8.17.0
- acorn@8.16.0: {}
+ acorn@8.17.0: {}
ajv-formats@3.0.1(ajv@8.20.0):
optionalDependencies:
@@ -1172,6 +1370,8 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ astring@1.9.0: {}
+
atomic-sleep@1.0.0: {}
avvio@9.2.0:
@@ -1181,14 +1381,38 @@ snapshots:
balanced-match@4.0.4: {}
+ base64-js@1.5.1: {}
+
before-after-hook@4.0.0: {}
+ better-sqlite3@12.11.1:
+ dependencies:
+ bindings: 1.5.0
+ prebuild-install: 7.1.3
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
bottleneck@2.19.5: {}
brace-expansion@5.0.6:
dependencies:
balanced-match: 4.0.4
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ chownr@1.1.4: {}
+
cjs-module-lexer@2.2.0: {}
content-type@2.0.0: {}
@@ -1197,7 +1421,7 @@ snapshots:
cron@4.4.0:
dependencies:
- '@types/luxon': 3.7.1
+ '@types/luxon': 3.7.2
luxon: 3.7.2
cross-spawn@7.0.6:
@@ -1210,14 +1434,28 @@ snapshots:
dependencies:
ms: 2.1.3
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ deep-extend@0.6.0: {}
+
deep-is@0.1.4: {}
denque@2.1.0: {}
dequal@2.0.3: {}
+ detect-libc@2.1.2: {}
+
dotenv@17.4.2: {}
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ es-module-lexer@2.1.0: {}
+
escape-string-regexp@4.0.0: {}
eslint-scope@9.1.2:
@@ -1231,9 +1469,9 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@10.4.1:
+ eslint@10.6.0:
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0)
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.23.5
'@eslint/config-helpers': 0.6.0
@@ -1268,8 +1506,8 @@ snapshots:
espree@11.2.0:
dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
+ acorn: 8.17.0
+ acorn-jsx: 5.3.2(acorn@8.17.0)
eslint-visitor-keys: 5.0.1
esquery@1.7.0:
@@ -1290,6 +1528,8 @@ snapshots:
dependencies:
eventsource-parser: 3.1.0
+ expand-template@2.0.3: {}
+
fast-decode-uri-component@1.0.1: {}
fast-deep-equal@3.1.3: {}
@@ -1330,7 +1570,7 @@ snapshots:
process-warning: 5.0.0
rfdc: 1.4.1
secure-json-parse: 4.1.0
- semver: 7.8.4
+ semver: 7.8.5
toad-cache: 3.7.1
fastq@1.20.1:
@@ -1341,6 +1581,8 @@ snapshots:
dependencies:
flat-cache: 4.0.1
+ file-uri-to-path@1.0.0: {}
+
find-my-way@9.6.0:
dependencies:
fast-deep-equal: 3.1.3
@@ -1359,27 +1601,37 @@ snapshots:
flatted@3.4.2: {}
+ fs-constants@1.0.0: {}
+
+ github-from-package@0.0.0: {}
+
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
- globals@17.6.0: {}
+ globals@17.7.0: {}
iconv-lite@0.7.2:
dependencies:
safer-buffer: 2.1.2
+ ieee754@1.2.1: {}
+
ignore@5.3.2: {}
- import-in-the-middle@3.0.2:
+ import-in-the-middle@3.2.0:
dependencies:
- acorn: 8.16.0
- acorn-import-attributes: 1.9.5(acorn@8.16.0)
+ acorn: 8.17.0
+ acorn-import-attributes: 1.9.5(acorn@8.17.0)
cjs-module-lexer: 2.2.0
module-details-from-path: 1.0.4
imurmurhash@0.1.4: {}
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
ipaddr.js@2.4.0: {}
is-extglob@2.1.1: {}
@@ -1427,24 +1679,42 @@ snapshots:
luxon@3.7.2: {}
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
mariadb@3.5.3:
dependencies:
'@types/geojson': 7946.0.16
- '@types/node': 25.9.2
+ '@types/node': 26.0.1
denque: 2.1.0
iconv-lite: 0.7.2
lru-cache: 11.5.1
+ meriyah@6.1.4: {}
+
+ mimic-response@3.1.0: {}
+
minimatch@10.2.5:
dependencies:
brace-expansion: 5.0.6
+ minimist@1.2.8: {}
+
+ mkdirp-classic@0.5.3: {}
+
module-details-from-path@1.0.4: {}
ms@2.1.3: {}
+ napi-build-utils@2.0.0: {}
+
natural-compare@1.4.0: {}
+ node-abi@3.92.0:
+ dependencies:
+ semver: 7.8.5
+
octokit@5.0.5:
dependencies:
'@octokit/app': 16.1.2
@@ -1461,6 +1731,10 @@ snapshots:
on-exit-leak-free@2.1.2: {}
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -1504,6 +1778,21 @@ snapshots:
sonic-boom: 4.2.1
thread-stream: 4.2.0
+ prebuild-install@7.1.3:
+ dependencies:
+ detect-libc: 2.1.2
+ expand-template: 2.0.3
+ github-from-package: 0.0.0
+ minimist: 1.2.8
+ mkdirp-classic: 0.5.3
+ napi-build-utils: 2.0.0
+ node-abi: 3.92.0
+ pump: 3.0.4
+ rc: 1.2.8
+ simple-get: 4.0.1
+ tar-fs: 2.1.5
+ tunnel-agent: 0.6.0
+
prelude-ls@1.2.1: {}
prettier@3.8.4: {}
@@ -1512,10 +1801,28 @@ snapshots:
process-warning@5.0.0: {}
+ pump@3.0.4:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
punycode@2.3.1: {}
quick-format-unescaped@4.0.4: {}
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
real-require@0.2.0: {}
real-require@1.0.0: {}
@@ -1535,6 +1842,8 @@ snapshots:
rfdc@1.4.1: {}
+ safe-buffer@5.2.1: {}
+
safe-regex2@5.1.1:
dependencies:
ret: 0.5.0
@@ -1545,7 +1854,9 @@ snapshots:
secure-json-parse@4.1.0: {}
- semver@7.8.4: {}
+ semifies@1.0.0: {}
+
+ semver@7.8.5: {}
set-cookie-parser@2.7.2: {}
@@ -1555,30 +1866,65 @@ snapshots:
shebang-regex@3.0.0: {}
+ simple-concat@1.0.1: {}
+
+ simple-get@4.0.1:
+ dependencies:
+ decompress-response: 6.0.0
+ once: 1.4.0
+ simple-concat: 1.0.1
+
smee-client@5.0.0:
dependencies:
eventsource: 4.1.0
- undici: 7.27.2
+ undici: 7.28.0
sonic-boom@4.2.1:
dependencies:
atomic-sleep: 1.0.0
+ source-map@0.6.1: {}
+
split2@4.2.0: {}
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-json-comments@2.0.1: {}
+
+ tar-fs@2.1.5:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.4
+ tar-stream: 2.2.0
+
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.5
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
thread-stream@4.2.0:
dependencies:
real-require: 1.0.0
toad-cache@3.7.1: {}
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
- undici-types@7.24.6: {}
+ undici-types@8.3.0: {}
- undici@7.27.2: {}
+ undici@7.28.0: {}
universal-github-app-jwt@2.2.2: {}
@@ -1588,10 +1934,14 @@ snapshots:
dependencies:
punycode: 2.3.1
+ util-deprecate@1.0.2: {}
+
which@2.0.2:
dependencies:
isexe: 2.0.0
word-wrap@1.2.5: {}
+ wrappy@1.0.2: {}
+
yocto-queue@0.1.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
@@ -0,0 +1,2 @@
+allowBuilds:
+ better-sqlite3: true
diff --git a/src/index.js b/src/index.js
@@ -12,7 +12,7 @@ import { unlabeled } from './webhooks/unlabeled.js';
import { opened } from './webhooks/opened.js';
import { closed } from './webhooks/closed.js';
import { labeled } from './webhooks/labeled.js';
-import { createPool } from 'mariadb';
+import Database from 'better-sqlite3';
// Load environment variables from .env file
dotenv.config();
@@ -37,16 +37,18 @@ Sentry.init({
});
// Database
-// Following order of columns: username, prnumber, time, repoowner, repo
-export const pool = createPool({
- user: process.env.SQL_USER,
- password: process.env.SQL_PASSWORD,
- host: process.env.SQL_HOST,
- port: process.env.SQL_PORT,
- database: process.env.SQL_DB_NAME,
- ssl: false,
- connectionLimit: 5,
-});
+
+export const db = new Database(process.env.DB_PATH);
+
+/*db.exec(`
+ CREATE TABLE LIST (
+ username TEXT NOT NULL,
+ prnumber TEXT NOT NULL,
+ time TEXT NOT NULL,
+ repoowner TEXT NOT NULL,
+ repo TEXT NOT NULL
+ );
+`);*/
// Create an authenticated Octokit client authenticated as a GitHub App
const app = new App({
@@ -83,18 +85,16 @@ let job = new CronJob(
'0 * * * *', // cronTime 0 * * * *
async function () {
let date = new Date();
- let conn;
try {
- conn = await pool.getConnection();
- let res = await conn.query(`SELECT * FROM LIST`);
+ let res = await db.prepare(`SELECT * FROM LIST`).all();
let resJson = JSON.stringify(res);
if (resJson !== '[]') {
let parsed = JSON.parse(resJson);
for (let i in parsed) {
if (getNumberOfDays(parsed[i].time, date) >= numberOfDays) {
- await conn.query(`DELETE FROM LIST WHERE time=(?)`, [
- parsed[i].time,
- ]);
+ await db
+ .prepare(`DELETE FROM LIST WHERE time = ?`)
+ .run(parsed[i].time);
await appOctokit.request(
'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
{
@@ -122,8 +122,6 @@ let job = new CronJob(
} else {
console.error(error);
}
- } finally {
- if (conn) conn.end();
}
}, // onTick
null, // onComplete
@@ -139,6 +137,7 @@ app.webhooks.on('pull_request.opened', async ({ payload }) => {
payload.repository.name,
payload.repository.full_name,
payload.pull_request.number,
+ payload.pull_request.updated_at,
payload.pull_request.user.login,
payload.pull_request.draft
);
diff --git a/src/webhooks/closed.js b/src/webhooks/closed.js
@@ -1,4 +1,4 @@
-import { pool } from '../index.js';
+import { db } from '../index.js';
import fs from 'fs';
import path from 'path';
@@ -37,96 +37,81 @@ export async function closed(
prUsername,
prSender
) {
- let conn;
- try {
- if (prMerged === true) {
- const labels = await appOctokit.rest.issues.listLabelsOnIssue({
+ if (prMerged === true) {
+ const labels = await appOctokit.rest.issues.listLabelsOnIssue({
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ });
+ const allLabels = labels.data.map((label) => label.name);
+ if (ignoreLabels.some((label) => allLabels.includes(label))) {
+ return;
+ }
+ await appOctokit.rest.issues.createComment({
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ body: mergedPRs,
+ });
+ console.log(
+ `Sent a merged message to #${prNumber} on https://github.com/${repoFullName}`
+ );
+
+ // remove almost all labels if there are any
+ const listOfLabels = [];
+ const data = await appOctokit.request(
+ 'GET /repos/{owner}/{repo}/pulls/{pull_number}',
+ {
owner: repoOwner,
repo: repoName,
- issue_number: prNumber,
- });
- const allLabels = labels.data.map((label) => label.name);
- if (ignoreLabels.some((label) => allLabels.includes(label))) {
- return;
+ pull_number: prNumber,
}
- await appOctokit.rest.issues.createComment({
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- body: mergedPRs,
- });
- console.log(
- `Sent a merged message to #${prNumber} on https://github.com/${repoFullName}`
- );
+ );
- // remove almost all labels if there are any
- const listOfLabels = [];
- const data = await appOctokit.request(
- 'GET /repos/{owner}/{repo}/pulls/{pull_number}',
- {
- owner: repoOwner,
- repo: repoName,
- pull_number: prNumber,
- }
- );
-
- const labelData = data.data.labels;
- for (let i in labelData) {
- if (labelData[i].name) {
- listOfLabels.push(labelData[i].name);
- }
+ const labelData = data.data.labels;
+ for (let i in labelData) {
+ if (labelData[i].name) {
+ listOfLabels.push(labelData[i].name);
}
+ }
- for (let i in listOfLabels) {
- if (!listOfLabels.includes(unremovableLabels)) {
- await appOctokit.request(
- 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
- {
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- name: listOfLabels[i],
- }
- );
- } else if (listOfLabels[i] == 'status: low priority') {
- return;
- } else if (unremovableLabels.includes(listOfLabels[i])) {
- return;
- }
+ for (let i in listOfLabels) {
+ if (!unremovableLabels.includes(listOfLabels[i])) {
+ await appOctokit.request(
+ 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
+ {
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ name: listOfLabels[i],
+ }
+ );
}
- console.log(
- `Removed all labels from #${prNumber} on https://github.com/${repoFullName}`
- );
- } else {
- conn = await pool.getConnection();
- let res = await conn.query(
- `SELECT * FROM LIST WHERE username=(?)`,
- [prUsername]
- );
+ }
+ } else {
+ let res = await db
+ .prepare(`SELECT * FROM LIST WHERE username = ?;`)
+ .get(prUsername);
+ if (res !== undefined) {
let resJson = JSON.stringify(res);
- if (resJson !== '[]') {
- let parsed = JSON.parse(resJson);
- if (reviewerUsernames.includes(prSender)) {
- res = await conn.query(
- 'DELETE FROM LIST WHERE username=(?)',
- [parsed[0].username]
- );
- await appOctokit.request(
- 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
- {
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- name: 'status: low priority',
- }
- );
- console.log(
- `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database as well as the label.`
- );
- }
+ let parsed = JSON.parse(resJson);
+ if (reviewerUsernames.includes(prSender)) {
+ await db
+ .prepare(`DELETE FROM LIST WHERE username = ?;`)
+ .run(parsed.username);
+ await appOctokit.request(
+ 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
+ {
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ name: 'status: low priority',
+ }
+ );
+ console.log(
+ `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database as well as the label.`
+ );
}
}
- } finally {
- if (conn) conn.end();
}
}
diff --git a/src/webhooks/labeled.js b/src/webhooks/labeled.js
@@ -1,4 +1,4 @@
-import { pool } from '../index.js';
+import { db } from '../index.js';
import fs from 'fs';
import path from 'path';
@@ -137,37 +137,32 @@ If you need any help, please create an issue or ask our team in the [Discord ser
);
}
} else if (lowpriority === true) {
- let conn;
- try {
- conn = await pool.getConnection();
- let res = await conn.query(
- `SELECT * FROM LIST WHERE username=(?)`,
- [prUsername]
+ let res = await db
+ .prepare(`SELECT * FROM LIST WHERE username = ?;`)
+ .get(prUsername);
+ let resString = JSON.stringify(res);
+ if (resString === undefined) {
+ await appOctokit.rest.issues.createComment({
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ body: lowPriorityMessage,
+ });
+ console.log(
+ `Sent low priority message to #${prNumber} from https://github.com/${repoFullName}`
);
- let resJson = JSON.stringify(res);
- if (resJson === '[]') {
- await appOctokit.rest.issues.createComment({
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- body: lowPriorityMessage,
- });
- console.log(
- `Sent low priority message to #${prNumber} from https://github.com/${repoFullName}`
- );
- await conn.query('INSERT INTO LIST VALUES (?, ?, ?, ?, ?)', [
+ await db
+ .prepare(`INSERT INTO LIST VALUES (?, ?, ?, ?, ?);`)
+ .run(
prUsername,
- prNumber,
+ `${prNumber}`,
prUpdatedAt,
repoOwner,
- repoName,
- ]);
- console.log(
- `Logged #${prNumber} from https://github.com/${repoFullName} to the low priority database.`
+ repoName
);
- }
- } finally {
- if (conn) conn.end();
+ console.log(
+ `Logged #${prNumber} from https://github.com/${repoFullName} to the low priority database.`
+ );
}
}
}
diff --git a/src/webhooks/opened.js b/src/webhooks/opened.js
@@ -1,4 +1,4 @@
-import { pool, numberOfDays } from '../index.js';
+import { db, numberOfDays } from '../index.js';
import { getNumberOfDays } from '../tools/numberofdays.js';
import fs from 'fs';
import path from 'path';
@@ -27,111 +27,103 @@ export async function opened(
console.log(
`Received a open pull request event for #${prNumber} on https://github.com/${repoFullName}`
);
- let conn;
- try {
- const labels = await appOctokit.rest.issues.listLabelsOnIssue({
+ const labels = await appOctokit.rest.issues.listLabelsOnIssue({
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ });
+ const allLabels = labels.data.map((label) => label.name);
+ if (ignoreLabels.some((label) => allLabels.includes(label))) {
+ console.log(
+ `#${prNumber} from https://github.com/${repoFullName} is by a maintainer, skipping pull request.`
+ );
+ return;
+ }
+ if (prDraft === true) {
+ await appOctokit.rest.issues.createComment({
owner: repoOwner,
repo: repoName,
issue_number: prNumber,
+ body: draftPRs,
});
- const allLabels = labels.data.map((label) => label.name);
- if (ignoreLabels.some((label) => allLabels.includes(label))) {
- console.log(
- `#${prNumber} from https://github.com/${repoFullName} is by a maintainer, skipping pull request.`
- );
- return;
- }
- if (prDraft === true) {
- await appOctokit.rest.issues.createComment({
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- body: draftPRs,
- });
- console.log(
- `Sent a draft message to #${prNumber} on https://github.com/${repoFullName}`
+ console.log(
+ `Sent a draft message to #${prNumber} on https://github.com/${repoFullName}`
+ );
+ } else {
+ await appOctokit.rest.issues.createComment({
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ body: newPRs,
+ });
+ console.log(
+ `Sent a opened message to #${prNumber} on https://github.com/${repoFullName}`
+ );
+ }
+ // low priority check
+ let res = await db
+ .prepare(`SELECT * FROM LIST WHERE username = ?;`)
+ .get(prUsername);
+ if (res !== undefined) {
+ let resJson = JSON.stringify(res);
+ let parsed = JSON.parse(resJson);
+ let date = new Date();
+ if (
+ parsed.username === prUsername &&
+ getNumberOfDays(parsed.time, date) <= numberOfDays
+ ) {
+ let lowPriority = `
+# Low priority
+
+You're attempting to create a new pull request to bypass the low priority label placed on your previous pull request, #${parsed.prnumber}. Unfortunately, we've noticed this attempt, and we're applying the label you were trying to escape on this pull request, too.
+
+If you think this is a mistake then please contact [iostpa](https://github.com/iostpa).
+ `;
+ await appOctokit.request(
+ 'POST /repos/{owner}/{repo}/issues/{issue_number}/labels',
+ {
+ owner: repoOwner,
+ repo: repoName,
+ issue_number: prNumber,
+ labels: ['status: low priority'],
+ }
);
- } else {
await appOctokit.rest.issues.createComment({
owner: repoOwner,
repo: repoName,
issue_number: prNumber,
- body: newPRs,
+ body: lowPriority,
});
+ await db
+ .prepare(`UPDATE LIST SET prnumber = ? WHERE prnumber = ?;`)
+ .run(`${prNumber}`, `${parsed.prnumber}`);
+ await db
+ .prepare(`UPDATE LIST SET time = ? WHERE prnumber = ?;`)
+ .run(prCreatedAt, `${prNumber}`);
console.log(
- `Sent a opened message to #${prNumber} on https://github.com/${repoFullName}`
+ `Auto-added, replaced with new PR number and sent low priority message to #${prNumber} on https://github.com/${repoFullName} because it was found in the database.`
);
- }
- // low priority check
- conn = await pool.getConnection();
- let res = await conn.query(`SELECT * FROM LIST WHERE username=(?)`, [
- prUsername,
- ]);
- let resJson = JSON.stringify(res);
- if (resJson !== '[]') {
- let parsed = JSON.parse(resJson);
- let date = new Date();
- if (
- parsed[0].username === prUsername &&
- getNumberOfDays(parsed[0].time, date) <= numberOfDays
- ) {
- let lowPriority = `
-# Low priority
-
-You're attempting to create a new pull request to bypass the low priority label placed on your previous pull request, #${parsed[0].prnumber}. Unfortunately, we've noticed this attempt, and we're applying the label you were trying to escape on this pull request, too.
-
-If you think this is a mistake then please contact [iostpa](https://github.com/iostpa).
- `;
- await appOctokit.request(
- 'POST /repos/{owner}/{repo}/issues/{issue_number}/labels',
- {
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- labels: ['status: low priority'],
- }
- );
- await appOctokit.rest.issues.createComment({
+ } else if (
+ parsed.username === prUsername &&
+ getNumberOfDays(parsed.time, date) >= numberOfDays
+ ) {
+ await appOctokit.request(
+ 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
+ {
owner: repoOwner,
repo: repoName,
issue_number: prNumber,
- body: lowPriority,
- });
- await conn.query(
- `UPDATE LIST SET prnumber=(?) WHERE prnumber=(?)`,
- [prNumber, parsed[0].prnumber]
- );
- await conn.query(
- `UPDATE LIST SET time=(?) WHERE prnumber=(?)`,
- [prCreatedAt, parsed[0].prnumber]
- );
- console.log(
- `Auto-added, replaced with new PR number and sent low priority message to #${prNumber} on https://github.com/${repoFullName} because it was found in the database.`
- );
- } else if (
- parsed[0].username === prUsername &&
- getNumberOfDays(parsed[0].time, date) >= numberOfDays
- ) {
- await appOctokit.request(
- 'DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}',
- {
- owner: repoOwner,
- repo: repoName,
- issue_number: prNumber,
- name: 'status: low priority',
- }
- );
- res = await conn.query('DELETE FROM LIST WHERE username=(?)', [
- parsed[0].username,
- ]);
- console.log(
- `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database as well as the label.`
- );
- }
- } else if (resJson === '[]') {
- return;
+ name: 'status: low priority',
+ }
+ );
+ await db
+ .prepare(`DELETE FROM LIST WHERE username = ?;`)
+ .run(parsed.username);
+ console.log(
+ `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database as well as the label.`
+ );
}
- } finally {
- if (conn) conn.end();
+ } else if (res === undefined) {
+ return;
}
}
diff --git a/src/webhooks/unlabeled.js b/src/webhooks/unlabeled.js
@@ -1,27 +1,17 @@
-import { pool } from '../index.js';
+import { db } from '../index.js';
export async function unlabeled(labelName, username, prNumber, repoFullName) {
- let conn;
- try {
- if (labelName === 'status: low priority') {
- conn = await pool.getConnection();
- let res = await conn.query(
- `SELECT * FROM LIST WHERE username=(?)`,
- [username]
+ if (labelName === 'status: low priority') {
+ let res = await db
+ .prepare(`SELECT * FROM LIST WHERE username = ?;`)
+ .get(username);
+ if (res !== undefined) {
+ await db
+ .prepare(`DELETE FROM LIST WHERE username = ?;`)
+ .run(username);
+ console.log(
+ `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database.`
);
- let resJson = JSON.stringify(res);
- if (resJson !== '[]') {
- res = await conn.query('DELETE FROM LIST WHERE username=(?)', [
- username,
- ]);
- console.log(
- `Removed #${prNumber} from https://github.com/${repoFullName} from the low priority database.`
- );
- } else {
- return;
- }
}
- } finally {
- if (conn) conn.end();
}
}