Author SHA1 Message Date
Renovate ab87ee98a1 fix(deps): update dependency screeps-api to v2
renovate/stability-days Updates have met minimum release age requirement
Lint / pre-commit Linting (push) Successful in 40s
Test / Run Tests (push) Successful in 2m23s
2026-08-10 22:23:51 +00:00
14 changed files with 132 additions and 203 deletions
+18
View File
@@ -0,0 +1,18 @@
name: Lint
on:
push:
workflow_dispatch:
jobs:
pre-commit-lint:
name: pre-commit Linting
runs-on: pi
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
- run: pip install pre-commit
shell: bash
- name: Pre Commit
run: SKIP=no-commit-to-branch pre-commit run -a
shell: bash
-55
View File
@@ -1,55 +0,0 @@
name: Recompile dist/ on Renovate PR
on:
pull_request:
types: [opened, synchronize]
paths:
- package.json
- pnpm-lock.yaml
- index.js
- monitor.js
permissions:
contents: write
jobs:
recompile:
runs-on: pi
if: |
(github.actor == 'renovate[bot]' || contains(github.head_ref, 'renovate/')) &&
!contains(github.event.head_commit.message, '[skip compile]')
steps:
- name: Checkout PR Branch
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ github.head_ref }}
fetch-depth: 0
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: '22'
cache: pnpm
- name: Clean Install
run: pnpm install --frozen-lockfile --ignore-scripts
shell: bash
- name: Build
run: pnpm run build
shell: bash
- name: Commit dist/
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add dist/
if git diff --staged --quiet; then
echo "No changes to dist/"
else
git commit -m "chore: compile action bundle [skip compile]"
git push origin HEAD:${{ github.head_ref }}
fi
shell: bash
+2 -4
View File
@@ -2,7 +2,6 @@ name: Test
on: on:
push: push:
pull_request:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -11,11 +10,10 @@ jobs:
runs-on: pi runs-on: pi
steps: steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version: '22' node-version: '24'
cache: pnpm - uses: pnpm/action-setup@v4
- run: pnpm install --frozen-lockfile - run: pnpm install --frozen-lockfile
shell: bash shell: bash
- run: pnpm test - run: pnpm test
+1 -2
View File
@@ -30,11 +30,10 @@ repos:
types_or: [css, javascript] types_or: [css, javascript]
- repo: https://github.com/python-jsonschema/check-jsonschema - repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.38.0 rev: 0.37.4
hooks: hooks:
- id: check-renovate - id: check-renovate
- id: check-github-actions - id: check-github-actions
exclude: ^action\.yaml$
- id: check-github-workflows - id: check-github-workflows
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
-6
View File
@@ -7,7 +7,6 @@ This repository is maintained by Gemini.
* **Test-Driven Development (TDD):** Wherever possible, Test-Driven Development principles should be followed. Write tests before writing the code they are intended to validate. * **Test-Driven Development (TDD):** Wherever possible, Test-Driven Development principles should be followed. Write tests before writing the code they are intended to validate.
* **Pre-commit Hooks:** Ensure that `pre-commit` hooks are installed and active before making any commits. This can be done by running `pre-commit install` in your local repository. * **Pre-commit Hooks:** Ensure that `pre-commit` hooks are installed and active before making any commits. This can be done by running `pre-commit install` in your local repository.
* **Note for Gemini:** Git commits trigger pre-commit hooks, which can take several seconds (or minutes) to complete. Checking the command status for git commit is only appropriate every 120s. * **Note for Gemini:** Git commits trigger pre-commit hooks, which can take several seconds (or minutes) to complete. Checking the command status for git commit is only appropriate every 120s.
* **Package Manager Preferences:** Always use `pnpm` and `pnpx`. Never use `npm` or `npx` under any circumstances. All package management operations, script runs, and tool invocations must use `pnpm` / `pnpx`.
## Repository Comparison ## Repository Comparison
@@ -33,8 +32,3 @@ The Gitea workflow does the following:
2. Sets up Node.js and pnpm. 2. Sets up Node.js and pnpm.
3. Installs the dependencies using `pnpm install`. 3. Installs the dependencies using `pnpm install`.
4. Runs the tests using `pnpm test`. 4. Runs the tests using `pnpm test`.
### Automated Recompilation & Permissions
* The automated recompilation workflow (`.gitea/workflows/recompile-dist.yaml`) recompiles `dist/index.js` on Renovate PRs and requires `contents: write` permissions to push back to the branch.
* Ensure that the Gitea repository workflow settings have write permissions enabled (**Settings** ➔ **Actions** ➔ **General** ➔ **Workflow permissions** ➔ **Read and write permissions**).
+10 -20
View File
@@ -1,4 +1,4 @@
import { vi, describe, it, expect, beforeEach, afterEach } from "vitest"; import { vi, describe, it, expect, beforeEach } from "vitest";
// Mock @actions/core for all tests in this file // Mock @actions/core for all tests in this file
vi.mock("@actions/core", () => ({ vi.mock("@actions/core", () => ({
@@ -24,23 +24,16 @@ vi.mock("../monitor.js", () => ({
vi.mock("screeps-api", () => { vi.mock("screeps-api", () => {
const mockApi = { const mockApi = {
auth: vi.fn().mockResolvedValue(), auth: vi.fn().mockResolvedValue(),
authSignin: vi.fn().mockResolvedValue({ ok: 1, token: "test_token" }),
userCodeGet: vi
.fn()
.mockResolvedValue({ ok: 1, modules: { main: "old_code" } }),
userCodeSet: vi.fn().mockResolvedValue({ ok: 1 }),
code: { code: {
get: vi.fn().mockResolvedValue({ ok: 1, modules: { main: "old_code" } }), get: vi.fn().mockResolvedValue({ ok: 1, modules: { main: "old_code" } }),
set: vi.fn().mockResolvedValue({ ok: 1 }), set: vi.fn().mockResolvedValue({ ok: 1 }),
}, },
}; };
// Use a regular function so it can be called with `new` // Use a regular function so it can be called with `new`
const MockClient = vi.fn(function () {
return mockApi;
});
return { return {
ScreepsHttpClient: MockClient, ScreepsAPI: vi.fn(function () {
ScreepsAPI: MockClient, return mockApi;
}),
}; };
}); });
@@ -55,7 +48,7 @@ import {
applyOnAction, applyOnAction,
postCode, postCode,
} from "../index.js"; } from "../index.js";
import { ScreepsHttpClient } from "screeps-api"; import { ScreepsAPI } from "screeps-api";
import fs from "fs"; import fs from "fs";
import path from "path"; import path from "path";
import os from "os"; import os from "os";
@@ -337,17 +330,14 @@ describe("postCode — monitor wiring", () => {
await postCode(); await postCode();
// Verify rollback was performed // Verify rollback was performed
const mockApiInstance = new ScreepsHttpClient(); const mockApiInstance = new ScreepsAPI();
// `userCodeSet` should be called twice: // `code.set` should be called twice:
// 1st time: uploading the new files // 1st time: uploading the new files
// 2nd time: rolling back to oldCode // 2nd time: rolling back to oldCode
expect(mockApiInstance.userCodeSet).toHaveBeenCalledTimes(2); expect(mockApiInstance.code.set).toHaveBeenCalledTimes(2);
expect(mockApiInstance.userCodeSet).toHaveBeenNthCalledWith(2, { expect(mockApiInstance.code.set).toHaveBeenNthCalledWith(2, "default", {
branch: "default", main: "old_code",
modules: {
main: "old_code",
},
}); });
// Verify it called core.setFailed due to traceback // Verify it called core.setFailed due to traceback
+5 -13
View File
@@ -382,21 +382,13 @@ function buildMockApi({
disconnect: vi.fn(), disconnect: vi.fn(),
}; };
const getTime = vi.fn().mockImplementation(() => {
const t = ticks[Math.min(tickIndex, ticks.length - 1)];
tickIndex++;
return Promise.resolve({ time: t });
});
const api = { const api = {
opts: { hostname }, opts: { hostname },
time: getTime, time: vi.fn().mockImplementation(() => {
get gameTime() { const t = ticks[Math.min(tickIndex, ticks.length - 1)];
return this.time; tickIndex++;
}, return Promise.resolve({ time: t });
set gameTime(fn) { }),
this.time = fn;
},
socket, socket,
// Expose so tests can fire console events // Expose so tests can fire console events
_fireConsole: (eventData) => { _fireConsole: (eventData) => {
+1 -1
View File
@@ -79,5 +79,5 @@ outputs:
saw_warning_log: saw_warning_log:
description: true if console.warn output was detected during monitoring. description: true if console.warn output was detected during monitoring.
runs: runs:
using: node22 using: node20
main: dist/index.js main: dist/index.js
+7 -7
View File
File diff suppressed because one or more lines are too long
+6 -18
View File
@@ -1,4 +1,4 @@
import { ScreepsHttpClient } from "screeps-api"; import { ScreepsAPI } from "screeps-api";
import * as core from "@actions/core"; import * as core from "@actions/core";
import fs from "fs"; import fs from "fs";
import { glob } from "glob"; import { glob } from "glob";
@@ -180,16 +180,12 @@ export async function postCode() {
core.error(errorMessage); core.error(errorMessage);
return; return;
} }
let api = new ScreepsHttpClient(login_arguments); let api = new ScreepsAPI(login_arguments);
if (!token) { if (!token) {
core.info(`Logging in as user ${username}`); core.info(`Logging in as user ${username}`);
try { try {
if (typeof api.authSignin === "function") { await api.auth(username, password, login_arguments);
await api.authSignin(username, password);
} else {
await api.auth(username, password, login_arguments);
}
} catch (err) { } catch (err) {
core.error(`Authentication error: ${err}`); core.error(`Authentication error: ${err}`);
throw err; throw err;
@@ -209,9 +205,7 @@ export async function postCode() {
`Downloading existing code from branch ${branch} for potential rollback...`, `Downloading existing code from branch ${branch} for potential rollback...`,
); );
try { try {
const getResponse = await (api.userCodeGet const getResponse = await api.code.get(branch);
? api.userCodeGet(branch)
: api.code.get(branch));
if (getResponse && getResponse.ok && getResponse.modules) { if (getResponse && getResponse.ok && getResponse.modules) {
oldCode = getResponse.modules; oldCode = getResponse.modules;
core.info( core.info(
@@ -232,9 +226,7 @@ export async function postCode() {
} }
try { try {
const response = await (api.userCodeSet const response = await api.code.set(branch, files_to_push);
? api.userCodeSet({ branch, modules: files_to_push })
: api.code.set(branch, files_to_push));
core.info(JSON.stringify(response, null, 2)); core.info(JSON.stringify(response, null, 2));
core.info(`Code set successfully to ${branch}`); core.info(`Code set successfully to ${branch}`);
} catch (err) { } catch (err) {
@@ -287,11 +279,7 @@ export async function postCode() {
"Action failed based on monitor configuration. Rolling back to previous code...", "Action failed based on monitor configuration. Rolling back to previous code...",
); );
try { try {
if (typeof api.userCodeSet === "function") { await api.code.set(branch, oldCode);
await api.userCodeSet({ branch, modules: oldCode });
} else {
await api.code.set(branch, oldCode);
}
core.info( core.info(
`Successfully rolled back to previous code on branch ${branch}.`, `Successfully rolled back to previous code on branch ${branch}.`,
); );
+4 -8
View File
@@ -250,7 +250,7 @@ function sleep(ms) {
* Calls `onProgress(elapsed, targetTicks)` on every poll so the caller can * Calls `onProgress(elapsed, targetTicks)` on every poll so the caller can
* log progress at whatever cadence it chooses. * log progress at whatever cadence it chooses.
* *
* @param {import('screeps-api').ScreepsHttpClient} api * @param {import('screeps-api').ScreepsAPI} api
* @param {number} startTick - Tick number recorded before monitoring started * @param {number} startTick - Tick number recorded before monitoring started
* @param {number} targetTicks - Stop when (currentTick - startTick) >= this * @param {number} targetTicks - Stop when (currentTick - startTick) >= this
* @param {string|undefined} shard - "shard0" for official, undefined for private * @param {string|undefined} shard - "shard0" for official, undefined for private
@@ -270,9 +270,7 @@ export async function pollUntilDone(
let elapsed = 0; let elapsed = 0;
while (elapsed < targetTicks && !shouldStop()) { while (elapsed < targetTicks && !shouldStop()) {
await sleep(intervalMs); await sleep(intervalMs);
const { time } = await (typeof api.gameTime === "function" const { time } = await api.time(shard);
? api.gameTime(shard)
: api.time(shard));
elapsed = time - startTick; elapsed = time - startTick;
onProgress(elapsed, targetTicks); onProgress(elapsed, targetTicks);
} }
@@ -311,7 +309,7 @@ export async function pollUntilDone(
* 6. If logToFile=true: write buffered stdout to a temp file and upload artifact. * 6. If logToFile=true: write buffered stdout to a temp file and upload artifact.
* 7. Return MonitorResult. * 7. Return MonitorResult.
* *
* @param {import('screeps-api').ScreepsHttpClient} api * @param {import('screeps-api').ScreepsAPI} api
* @param {MonitorOptions} opts * @param {MonitorOptions} opts
* @returns {Promise<MonitorResult>} * @returns {Promise<MonitorResult>}
*/ */
@@ -339,9 +337,7 @@ export async function monitorConsole(api, opts) {
let lastProgressTick = 0; let lastProgressTick = 0;
// Step 1: record starting tick // Step 1: record starting tick
const { time: startTick } = await (typeof api.gameTime === "function" const { time: startTick } = await api.time(shard);
? api.gameTime(shard)
: api.time(shard));
// Step 2: connect socket + subscribe // Step 2: connect socket + subscribe
await api.socket.connect(); await api.socket.connect();
+3 -3
View File
@@ -3,7 +3,7 @@
"version": "0.2.1", "version": "0.2.1",
"description": "Deploys screeps code to the official game or a private server.", "description": "Deploys screeps code to the official game or a private server.",
"type": "module", "type": "module",
"packageManager": "pnpm@11.25.0", "packageManager": "pnpm@11.21.0",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"start": "node index.js", "start": "node index.js",
@@ -18,7 +18,7 @@
}, },
"devDependencies": { "devDependencies": {
"@vercel/ncc": "^0.44.1", "@vercel/ncc": "^0.44.1",
"@vitest/coverage-v8": "^4.1.11", "@vitest/coverage-v8": "^4.1.10",
"vitest": "^4.1.11" "vitest": "^4.1.10"
} }
} }
+60 -60
View File
@@ -25,11 +25,11 @@ importers:
specifier: ^0.44.1 specifier: ^0.44.1
version: 0.44.1 version: 0.44.1
'@vitest/coverage-v8': '@vitest/coverage-v8':
specifier: ^4.1.11 specifier: ^4.1.10
version: 4.1.11(vitest@4.1.11) version: 4.1.10(vitest@4.1.10)
vitest: vitest:
specifier: ^4.1.11 specifier: ^4.1.10
version: 4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.1(yaml@2.9.0)) version: 4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1(yaml@2.9.0))
packages: packages:
@@ -207,20 +207,20 @@ packages:
resolution: {integrity: sha512-cUjIE5P2YY1n+Kt9rFIazMMpGoPn1Fic04rOmTkElMkiDP5oszGfERMpo2shVkFKDL7rVppdM2pqJKC59shQWQ==} resolution: {integrity: sha512-cUjIE5P2YY1n+Kt9rFIazMMpGoPn1Fic04rOmTkElMkiDP5oszGfERMpo2shVkFKDL7rVppdM2pqJKC59shQWQ==}
hasBin: true hasBin: true
'@vitest/coverage-v8@4.1.11': '@vitest/coverage-v8@4.1.10':
resolution: {integrity: sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw==} resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==}
peerDependencies: peerDependencies:
'@vitest/browser': 4.1.11 '@vitest/browser': 4.1.10
vitest: 4.1.11 vitest: 4.1.10
peerDependenciesMeta: peerDependenciesMeta:
'@vitest/browser': '@vitest/browser':
optional: true optional: true
'@vitest/expect@4.1.11': '@vitest/expect@4.1.10':
resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==}
'@vitest/mocker@4.1.11': '@vitest/mocker@4.1.10':
resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==}
peerDependencies: peerDependencies:
msw: ^2.4.9 msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0 || ^8.0.0 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -230,20 +230,20 @@ packages:
vite: vite:
optional: true optional: true
'@vitest/pretty-format@4.1.11': '@vitest/pretty-format@4.1.10':
resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==}
'@vitest/runner@4.1.11': '@vitest/runner@4.1.10':
resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==}
'@vitest/snapshot@4.1.11': '@vitest/snapshot@4.1.10':
resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==}
'@vitest/spy@4.1.11': '@vitest/spy@4.1.10':
resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==}
'@vitest/utils@4.1.11': '@vitest/utils@4.1.10':
resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==}
agent-base@6.0.2: agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
@@ -259,8 +259,8 @@ packages:
asynckit@0.4.0: asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
axios@1.20.0: axios@1.19.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==} resolution: {integrity: sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==}
balanced-match@4.0.4: balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
@@ -683,20 +683,20 @@ packages:
yaml: yaml:
optional: true optional: true
vitest@4.1.11: vitest@4.1.10:
resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
'@edge-runtime/vm': '*' '@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0 '@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
'@vitest/browser-playwright': 4.1.11 '@vitest/browser-playwright': 4.1.10
'@vitest/browser-preview': 4.1.11 '@vitest/browser-preview': 4.1.10
'@vitest/browser-webdriverio': 4.1.11 '@vitest/browser-webdriverio': 4.1.10
'@vitest/coverage-istanbul': 4.1.11 '@vitest/coverage-istanbul': 4.1.10
'@vitest/coverage-v8': 4.1.11 '@vitest/coverage-v8': 4.1.10
'@vitest/ui': 4.1.11 '@vitest/ui': 4.1.10
happy-dom: '*' happy-dom: '*'
jsdom: '*' jsdom: '*'
vite: ^6.0.0 || ^7.0.0 || ^8.0.0 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -872,10 +872,10 @@ snapshots:
'@vercel/ncc@0.44.1': {} '@vercel/ncc@0.44.1': {}
'@vitest/coverage-v8@4.1.11(vitest@4.1.11)': '@vitest/coverage-v8@4.1.10(vitest@4.1.10)':
dependencies: dependencies:
'@bcoe/v8-coverage': 1.0.2 '@bcoe/v8-coverage': 1.0.2
'@vitest/utils': 4.1.11 '@vitest/utils': 4.1.10
ast-v8-to-istanbul: 1.0.5 ast-v8-to-istanbul: 1.0.5
istanbul-lib-coverage: 3.2.2 istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1 istanbul-lib-report: 3.0.1
@@ -884,46 +884,46 @@ snapshots:
obug: 2.1.4 obug: 2.1.4
std-env: 4.2.0 std-env: 4.2.0
tinyrainbow: 3.1.1 tinyrainbow: 3.1.1
vitest: 4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.1(yaml@2.9.0)) vitest: 4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1(yaml@2.9.0))
'@vitest/expect@4.1.11': '@vitest/expect@4.1.10':
dependencies: dependencies:
'@standard-schema/spec': 1.1.0 '@standard-schema/spec': 1.1.0
'@types/chai': 5.2.3 '@types/chai': 5.2.3
'@vitest/spy': 4.1.11 '@vitest/spy': 4.1.10
'@vitest/utils': 4.1.11 '@vitest/utils': 4.1.10
chai: 6.2.2 chai: 6.2.2
tinyrainbow: 3.1.1 tinyrainbow: 3.1.1
'@vitest/mocker@4.1.11(vite@8.2.1(yaml@2.9.0))': '@vitest/mocker@4.1.10(vite@8.2.1(yaml@2.9.0))':
dependencies: dependencies:
'@vitest/spy': 4.1.11 '@vitest/spy': 4.1.10
estree-walker: 3.0.3 estree-walker: 3.0.3
magic-string: 0.30.21 magic-string: 0.30.21
optionalDependencies: optionalDependencies:
vite: 8.2.1(yaml@2.9.0) vite: 8.2.1(yaml@2.9.0)
'@vitest/pretty-format@4.1.11': '@vitest/pretty-format@4.1.10':
dependencies: dependencies:
tinyrainbow: 3.1.1 tinyrainbow: 3.1.1
'@vitest/runner@4.1.11': '@vitest/runner@4.1.10':
dependencies: dependencies:
'@vitest/utils': 4.1.11 '@vitest/utils': 4.1.10
pathe: 2.0.3 pathe: 2.0.3
'@vitest/snapshot@4.1.11': '@vitest/snapshot@4.1.10':
dependencies: dependencies:
'@vitest/pretty-format': 4.1.11 '@vitest/pretty-format': 4.1.10
'@vitest/utils': 4.1.11 '@vitest/utils': 4.1.10
magic-string: 0.30.21 magic-string: 0.30.21
pathe: 2.0.3 pathe: 2.0.3
'@vitest/spy@4.1.11': {} '@vitest/spy@4.1.10': {}
'@vitest/utils@4.1.11': '@vitest/utils@4.1.10':
dependencies: dependencies:
'@vitest/pretty-format': 4.1.11 '@vitest/pretty-format': 4.1.10
convert-source-map: 2.0.0 convert-source-map: 2.0.0
tinyrainbow: 3.1.1 tinyrainbow: 3.1.1
@@ -943,7 +943,7 @@ snapshots:
asynckit@0.4.0: {} asynckit@0.4.0: {}
axios@1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0): axios@1.19.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0):
dependencies: dependencies:
follow-redirects: 1.16.0(debug@4.4.3(supports-color@7.2.0)) follow-redirects: 1.16.0(debug@4.4.3(supports-color@7.2.0))
form-data: 4.0.6 form-data: 4.0.6
@@ -1230,7 +1230,7 @@ snapshots:
screeps-api@2.1.0(supports-color@7.2.0): screeps-api@2.1.0(supports-color@7.2.0):
dependencies: dependencies:
axios: 1.20.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0) axios: 1.19.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0)
commander: 14.0.3 commander: 14.0.3
debug: 4.4.3(supports-color@7.2.0) debug: 4.4.3(supports-color@7.2.0)
ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
@@ -1296,15 +1296,15 @@ snapshots:
fsevents: 2.3.3 fsevents: 2.3.3
yaml: 2.9.0 yaml: 2.9.0
vitest@4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.1(yaml@2.9.0)): vitest@4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1(yaml@2.9.0)):
dependencies: dependencies:
'@vitest/expect': 4.1.11 '@vitest/expect': 4.1.10
'@vitest/mocker': 4.1.11(vite@8.2.1(yaml@2.9.0)) '@vitest/mocker': 4.1.10(vite@8.2.1(yaml@2.9.0))
'@vitest/pretty-format': 4.1.11 '@vitest/pretty-format': 4.1.10
'@vitest/runner': 4.1.11 '@vitest/runner': 4.1.10
'@vitest/snapshot': 4.1.11 '@vitest/snapshot': 4.1.10
'@vitest/spy': 4.1.11 '@vitest/spy': 4.1.10
'@vitest/utils': 4.1.11 '@vitest/utils': 4.1.10
es-module-lexer: 2.3.1 es-module-lexer: 2.3.1
expect-type: 1.4.0 expect-type: 1.4.0
magic-string: 0.30.21 magic-string: 0.30.21
@@ -1319,7 +1319,7 @@ snapshots:
vite: 8.2.1(yaml@2.9.0) vite: 8.2.1(yaml@2.9.0)
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@vitest/coverage-v8': 4.1.11(vitest@4.1.11) '@vitest/coverage-v8': 4.1.10(vitest@4.1.10)
transitivePeerDependencies: transitivePeerDependencies:
- msw - msw
+15 -6
View File
@@ -5,11 +5,20 @@
"config:recommended", "config:recommended",
":automergeLinters" ":automergeLinters"
], ],
"rebaseWhen": "behind-base-branch", "packageRules": [
"branchConcurrentLimit": 2, {
"prConcurrentLimit": 2, "matchManagers": [
"gitIgnoredAuthors": [ "pnpm"
"github-actions[bot]@users.noreply.github.com", ],
"bot@horstenkamp.eu" "postUpgradeTasks": {
"commands": [
"pnpm install --frozen-lockfile",
"pnpm run build"
],
"fileFilters": [
"dist/index.js"
]
}
}
] ]
} }