Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab87ee98a1 | ||
|
|
0751b1470b | ||
|
|
76a263859b | ||
|
|
2f32772d0a | ||
|
|
7a447adf45 | ||
|
|
dcdca8e753 | ||
|
|
9dcad628d4 | ||
|
|
c9b5d215f6 | ||
|
|
e8534d7fae | ||
|
|
873de41ead | ||
|
|
36e34e99c5 | ||
|
|
2292b914ad | ||
|
|
bdd0fbfd7e | ||
|
|
df5d81df5c | ||
|
|
0b930f5645 | ||
|
|
67f3f15c2b | ||
|
|
d0a08da728 |
@@ -9,8 +9,8 @@ jobs:
|
||||
name: pre-commit Linting
|
||||
runs-on: pi
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
||||
- 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
|
||||
|
||||
@@ -9,8 +9,8 @@ jobs:
|
||||
name: Run Tests
|
||||
runs-on: pi
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
with:
|
||||
node-version: '24'
|
||||
- uses: pnpm/action-setup@v4
|
||||
|
||||
@@ -21,6 +21,7 @@ repos:
|
||||
hooks:
|
||||
- id: pretty-format-yaml
|
||||
args: [--autofix]
|
||||
exclude: ^pnpm-lock\.yaml$
|
||||
|
||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||
rev: v4.0.0-alpha.8
|
||||
@@ -29,7 +30,7 @@ repos:
|
||||
types_or: [css, javascript]
|
||||
|
||||
- repo: https://github.com/python-jsonschema/check-jsonschema
|
||||
rev: 0.37.2
|
||||
rev: 0.37.4
|
||||
hooks:
|
||||
- id: check-renovate
|
||||
- id: check-github-actions
|
||||
|
||||
@@ -6,6 +6,7 @@ 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.
|
||||
* **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.
|
||||
|
||||
## Repository Comparison
|
||||
|
||||
|
||||
+73
-22
@@ -20,6 +20,23 @@ vi.mock("../monitor.js", () => ({
|
||||
}),
|
||||
}));
|
||||
|
||||
// Mock screeps-api
|
||||
vi.mock("screeps-api", () => {
|
||||
const mockApi = {
|
||||
auth: vi.fn().mockResolvedValue(),
|
||||
code: {
|
||||
get: vi.fn().mockResolvedValue({ ok: 1, modules: { main: "old_code" } }),
|
||||
set: vi.fn().mockResolvedValue({ ok: 1 }),
|
||||
},
|
||||
};
|
||||
// Use a regular function so it can be called with `new`
|
||||
return {
|
||||
ScreepsAPI: vi.fn(function () {
|
||||
return mockApi;
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
import * as core from "@actions/core";
|
||||
import { monitorConsole } from "../monitor.js";
|
||||
|
||||
@@ -29,7 +46,9 @@ import {
|
||||
readReplaceAndWriteFiles,
|
||||
readFilesIntoDict,
|
||||
applyOnAction,
|
||||
postCode,
|
||||
} from "../index.js";
|
||||
import { ScreepsAPI } from "screeps-api";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import os from "os";
|
||||
@@ -231,31 +250,31 @@ describe("glob functionality", () => {
|
||||
describe("applyOnAction", () => {
|
||||
beforeEach(() => vi.clearAllMocks());
|
||||
|
||||
it("'ignore' + true → no core call", () => {
|
||||
applyOnAction("ignore", true, "msg");
|
||||
it("'ignore' + true → no core call, returns false", () => {
|
||||
expect(applyOnAction("ignore", true, "msg")).toBe(false);
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
expect(core.setFailed).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("'warn' + true → core.warning() called with message", () => {
|
||||
applyOnAction("warn", true, "boom");
|
||||
it("'warn' + true → core.warning() called with message, returns false", () => {
|
||||
expect(applyOnAction("warn", true, "boom")).toBe(false);
|
||||
expect(core.warning).toHaveBeenCalledWith("boom");
|
||||
expect(core.setFailed).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("'fail' + true → core.setFailed() called with message", () => {
|
||||
applyOnAction("fail", true, "boom");
|
||||
it("'fail' + true → core.setFailed() called with message, returns true", () => {
|
||||
expect(applyOnAction("fail", true, "boom")).toBe(true);
|
||||
expect(core.setFailed).toHaveBeenCalledWith("boom");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("'fail' + false → no core call", () => {
|
||||
applyOnAction("fail", false, "boom");
|
||||
it("'fail' + false → no core call, returns false", () => {
|
||||
expect(applyOnAction("fail", false, "boom")).toBe(false);
|
||||
expect(core.setFailed).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("'warn' + false → no core call", () => {
|
||||
applyOnAction("warn", false, "msg");
|
||||
it("'warn' + false → no core call, returns false", () => {
|
||||
expect(applyOnAction("warn", false, "msg")).toBe(false);
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@@ -270,28 +289,60 @@ describe("postCode — monitor wiring", () => {
|
||||
// Default core mocks
|
||||
core.getInput.mockImplementation((name) => {
|
||||
if (name === "monitor") return "0";
|
||||
if (name === "token") return "test-token";
|
||||
if (name === "branch") return "default";
|
||||
if (name === "on_traceback") return "fail";
|
||||
return "";
|
||||
});
|
||||
core.getBooleanInput.mockReturnValue(false);
|
||||
core.getBooleanInput.mockImplementation((name) => {
|
||||
if (name === "rollback_on_failure") return false;
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
it("does not call monitorConsole when monitor=0 (default)", async () => {
|
||||
// We need to mock the rest of postCode to not fail before it hits the monitor block
|
||||
// This is a bit complex as postCode is large, but we can mock the inputs to exit early or mock the API
|
||||
// Actually, I'll just check if monitorConsole is called.
|
||||
// We just run postCode with monitor=0 and verify monitorConsole is not called.
|
||||
await postCode();
|
||||
expect(monitorConsole).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
// For this test, I'll make validateAuthentication fail so it returns early but after input check
|
||||
it("rolls back to previous code when monitor detects a failure and rollback_on_failure is true", async () => {
|
||||
// Setup inputs for monitor and rollback
|
||||
core.getInput.mockImplementation((name) => {
|
||||
if (name === "monitor") return "0";
|
||||
if (name === "monitor") return "10";
|
||||
if (name === "token") return "test-token";
|
||||
if (name === "branch") return "default";
|
||||
if (name === "on_traceback") return "fail";
|
||||
return "";
|
||||
});
|
||||
core.getBooleanInput.mockImplementation((name) => {
|
||||
if (name === "rollback_on_failure") return true;
|
||||
return false;
|
||||
});
|
||||
|
||||
// We'll just run a partial check or rely on the monitor unit tests for depth
|
||||
// The wiring in index.js is:
|
||||
// const monitorTicks = parseInt(core.getInput("monitor") || "0", 10);
|
||||
// if (monitorTicks > 0) { ... }
|
||||
// Simulate a failure in monitorConsole
|
||||
monitorConsole.mockResolvedValueOnce({
|
||||
sawTraceback: true, // Should trigger "fail" due to on_traceback=fail
|
||||
sawErrorLog: false,
|
||||
sawWarningLog: false,
|
||||
});
|
||||
|
||||
// Testing the logic inside index.js directly by calling postCode would require full environment mock.
|
||||
// I'll stick to the applyOnAction unit tests and rely on monitor.test.js for the heavy lifting.
|
||||
await postCode();
|
||||
|
||||
// Verify rollback was performed
|
||||
const mockApiInstance = new ScreepsAPI();
|
||||
|
||||
// `code.set` should be called twice:
|
||||
// 1st time: uploading the new files
|
||||
// 2nd time: rolling back to oldCode
|
||||
expect(mockApiInstance.code.set).toHaveBeenCalledTimes(2);
|
||||
expect(mockApiInstance.code.set).toHaveBeenNthCalledWith(2, "default", {
|
||||
main: "old_code",
|
||||
});
|
||||
|
||||
// Verify it called core.setFailed due to traceback
|
||||
expect(core.setFailed).toHaveBeenCalledWith(
|
||||
"Screeps console: traceback detected",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -67,6 +67,10 @@ inputs:
|
||||
description: 'Print a progress update every N ticks when log_to_file=true (default: 10).'
|
||||
required: false
|
||||
default: '10'
|
||||
rollback_on_failure:
|
||||
description: 'Automatically rollback to previous code if the monitor detects failures. Requires monitor > 0. (default: false)'
|
||||
required: false
|
||||
default: 'false'
|
||||
outputs:
|
||||
saw_traceback:
|
||||
description: true if a JS traceback was detected during monitoring.
|
||||
|
||||
Vendored
+8
-8
File diff suppressed because one or more lines are too long
@@ -118,17 +118,19 @@ export function validateAuthentication(token, username, password) {
|
||||
* @param {'ignore'|'warn'|'fail'} action
|
||||
* @param {boolean} flag - Only acts when true
|
||||
* @param {string} message - Passed to core.warning / core.setFailed
|
||||
* @returns {boolean} - Returns true if the action was 'fail' and the flag was true.
|
||||
*/
|
||||
export function applyOnAction(action, flag, message) {
|
||||
if (!flag) return;
|
||||
if (!flag) return false;
|
||||
if (action === "warn") {
|
||||
core.warning(message);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (action === "fail") {
|
||||
core.setFailed(message);
|
||||
return true;
|
||||
}
|
||||
// 'ignore' → no-op
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -179,33 +181,72 @@ export async function postCode() {
|
||||
return;
|
||||
}
|
||||
let api = new ScreepsAPI(login_arguments);
|
||||
if (token) {
|
||||
|
||||
if (!token) {
|
||||
core.info(`Logging in as user ${username}`);
|
||||
try {
|
||||
await api.auth(username, password, login_arguments);
|
||||
} catch (err) {
|
||||
core.error(`Authentication error: ${err}`);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
let oldCode = null;
|
||||
let rollbackOnFailure = false;
|
||||
try {
|
||||
rollbackOnFailure = core.getBooleanInput("rollback_on_failure");
|
||||
} catch (e) {
|
||||
// getBooleanInput throws if not 'true' or 'false', ignore
|
||||
}
|
||||
|
||||
if (rollbackOnFailure) {
|
||||
core.info(
|
||||
`Downloading existing code from branch ${branch} for potential rollback...`,
|
||||
);
|
||||
try {
|
||||
const getResponse = await api.code.get(branch);
|
||||
if (getResponse && getResponse.ok && getResponse.modules) {
|
||||
oldCode = getResponse.modules;
|
||||
core.info(
|
||||
`Successfully downloaded existing code (modules: ${Object.keys(oldCode).join(", ")})`,
|
||||
);
|
||||
} else {
|
||||
core.setFailed(
|
||||
`Failed to download existing code, but rollback_on_failure is enabled. Aborting deployment.`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
} catch (err) {
|
||||
core.setFailed(
|
||||
`Error downloading existing code: ${err.message}. Aborting deployment.`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await api.code.set(branch, files_to_push);
|
||||
core.info(JSON.stringify(response, null, 2));
|
||||
core.info(`Code set successfully to ${branch}`);
|
||||
} else {
|
||||
core.info(`Logging in as user ${username}`);
|
||||
await Promise.resolve()
|
||||
.then(() => api.auth(username, password, login_arguments))
|
||||
.then(() => api.code.set(branch, files_to_push))
|
||||
.then(() => {
|
||||
core.info(`Code set successfully to ${branch}`);
|
||||
})
|
||||
.catch((err) => {
|
||||
core.error(`Upload error: ${err}`);
|
||||
throw err;
|
||||
});
|
||||
} catch (err) {
|
||||
core.error(`Upload error: ${err}`);
|
||||
throw err;
|
||||
}
|
||||
|
||||
// Console monitoring (optional)
|
||||
const monitorTicks = parseInt(core.getInput("monitor") || "0", 10);
|
||||
if (monitorTicks > 0) {
|
||||
const onTraceback = core.getInput("on_traceback") || "fail";
|
||||
const onErrorLog = core.getInput("on_error_log") || "warn";
|
||||
const onWarningLog = core.getInput("on_warning_log") || "ignore";
|
||||
|
||||
const result = await monitorConsole(api, {
|
||||
monitor: monitorTicks,
|
||||
logToFile: core.getBooleanInput("log_to_file"),
|
||||
onTraceback: core.getInput("on_traceback") || "fail",
|
||||
onErrorLog: core.getInput("on_error_log") || "warn",
|
||||
onWarningLog: core.getInput("on_warning_log") || "ignore",
|
||||
onTraceback,
|
||||
onErrorLog,
|
||||
onWarningLog,
|
||||
monitorInterval: parseInt(core.getInput("monitor_interval") || "10", 10),
|
||||
hostname,
|
||||
shard: core.getInput("shard") || undefined,
|
||||
@@ -215,21 +256,37 @@ export async function postCode() {
|
||||
core.setOutput("saw_error_log", String(result.sawErrorLog));
|
||||
core.setOutput("saw_warning_log", String(result.sawWarningLog));
|
||||
|
||||
applyOnAction(
|
||||
core.getInput("on_traceback"),
|
||||
const fail1 = applyOnAction(
|
||||
onTraceback,
|
||||
result.sawTraceback,
|
||||
"Screeps console: traceback detected",
|
||||
);
|
||||
applyOnAction(
|
||||
core.getInput("on_error_log"),
|
||||
const fail2 = applyOnAction(
|
||||
onErrorLog,
|
||||
result.sawErrorLog,
|
||||
"Screeps console: error log output detected",
|
||||
);
|
||||
applyOnAction(
|
||||
core.getInput("on_warning_log"),
|
||||
const fail3 = applyOnAction(
|
||||
onWarningLog,
|
||||
result.sawWarningLog,
|
||||
"Screeps console: warning log output detected",
|
||||
);
|
||||
|
||||
const shouldFail = fail1 || fail2 || fail3;
|
||||
|
||||
if (shouldFail && rollbackOnFailure && oldCode) {
|
||||
core.info(
|
||||
"Action failed based on monitor configuration. Rolling back to previous code...",
|
||||
);
|
||||
try {
|
||||
await api.code.set(branch, oldCode);
|
||||
core.info(
|
||||
`Successfully rolled back to previous code on branch ${branch}.`,
|
||||
);
|
||||
} catch (err) {
|
||||
core.error(`Rollback failed: ${err}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -3,6 +3,7 @@
|
||||
"version": "0.2.1",
|
||||
"description": "Deploys screeps code to the official game or a private server.",
|
||||
"type": "module",
|
||||
"packageManager": "pnpm@11.21.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node index.js",
|
||||
@@ -13,11 +14,11 @@
|
||||
"@actions/artifact": "^1.1.2",
|
||||
"@actions/core": "^3.0.0",
|
||||
"glob": "^13.0.0",
|
||||
"screeps-api": "^1.7.2"
|
||||
"screeps-api": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vercel/ncc": "^0.38.4",
|
||||
"@vitest/coverage-v8": "^4.0.16",
|
||||
"vitest": "^4.0.16"
|
||||
"@vercel/ncc": "^0.44.1",
|
||||
"@vitest/coverage-v8": "^4.1.10",
|
||||
"vitest": "^4.1.10"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+72
-135
@@ -18,18 +18,18 @@ importers:
|
||||
specifier: ^13.0.0
|
||||
version: 13.0.6
|
||||
screeps-api:
|
||||
specifier: ^1.7.2
|
||||
version: 1.16.1(supports-color@7.2.0)
|
||||
specifier: ^2.0.0
|
||||
version: 2.1.0(supports-color@7.2.0)
|
||||
devDependencies:
|
||||
'@vercel/ncc':
|
||||
specifier: ^0.38.4
|
||||
version: 0.38.4
|
||||
specifier: ^0.44.1
|
||||
version: 0.44.1
|
||||
'@vitest/coverage-v8':
|
||||
specifier: ^4.0.16
|
||||
specifier: ^4.1.10
|
||||
version: 4.1.10(vitest@4.1.10)
|
||||
vitest:
|
||||
specifier: ^4.0.16
|
||||
version: 4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1)
|
||||
specifier: ^4.1.10
|
||||
version: 4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1(yaml@2.9.0))
|
||||
|
||||
packages:
|
||||
|
||||
@@ -203,8 +203,8 @@ packages:
|
||||
'@types/estree@1.0.9':
|
||||
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
|
||||
|
||||
'@vercel/ncc@0.38.4':
|
||||
resolution: {integrity: sha512-8LwjnlP39s08C08J5NstzriPvW1SP8Zfpp1BvC2sI35kPeZnHfxVkCwu4/+Wodgnd60UtT1n8K8zw+Mp7J9JmQ==}
|
||||
'@vercel/ncc@0.44.1':
|
||||
resolution: {integrity: sha512-cUjIE5P2YY1n+Kt9rFIazMMpGoPn1Fic04rOmTkElMkiDP5oszGfERMpo2shVkFKDL7rVppdM2pqJKC59shQWQ==}
|
||||
hasBin: true
|
||||
|
||||
'@vitest/coverage-v8@4.1.10':
|
||||
@@ -245,8 +245,9 @@ packages:
|
||||
'@vitest/utils@4.1.10':
|
||||
resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==}
|
||||
|
||||
argparse@1.0.10:
|
||||
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
|
||||
agent-base@6.0.2:
|
||||
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
|
||||
assertion-error@2.0.1:
|
||||
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
|
||||
@@ -258,19 +259,13 @@ packages:
|
||||
asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
|
||||
axios@0.28.1:
|
||||
resolution: {integrity: sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==}
|
||||
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
axios@1.19.0:
|
||||
resolution: {integrity: sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==}
|
||||
|
||||
balanced-match@4.0.4:
|
||||
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
|
||||
engines: {node: 18 || 20 || >=22}
|
||||
|
||||
brace-expansion@1.1.18:
|
||||
resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==}
|
||||
|
||||
brace-expansion@5.0.9:
|
||||
resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
|
||||
engines: {node: 20 || >=22}
|
||||
@@ -291,12 +286,9 @@ packages:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
commander@7.2.0:
|
||||
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
|
||||
engines: {node: '>= 10'}
|
||||
|
||||
concat-map@0.0.1:
|
||||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
commander@14.0.3:
|
||||
resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
convert-source-map@2.0.0:
|
||||
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
|
||||
@@ -370,9 +362,6 @@ packages:
|
||||
resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
fs.realpath@1.0.0:
|
||||
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
||||
|
||||
fsevents@2.3.3:
|
||||
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
@@ -393,10 +382,6 @@ packages:
|
||||
resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
|
||||
engines: {node: 18 || 20 || >=22}
|
||||
|
||||
glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
|
||||
|
||||
gopd@1.2.0:
|
||||
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -420,12 +405,9 @@ packages:
|
||||
html-escaper@2.0.2:
|
||||
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
|
||||
|
||||
inflight@1.0.6:
|
||||
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
||||
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
|
||||
|
||||
inherits@2.0.4:
|
||||
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||
https-proxy-agent@5.0.1:
|
||||
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
istanbul-lib-coverage@3.2.2:
|
||||
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
|
||||
@@ -546,9 +528,6 @@ packages:
|
||||
resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
|
||||
engines: {node: 18 || 20 || >=22}
|
||||
|
||||
minimatch@3.1.5:
|
||||
resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
|
||||
|
||||
minipass@7.1.3:
|
||||
resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
@@ -569,13 +548,6 @@ packages:
|
||||
resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==}
|
||||
engines: {node: '>=12.20.0'}
|
||||
|
||||
once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
|
||||
path-is-absolute@1.0.1:
|
||||
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
path-scurry@2.0.2:
|
||||
resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
|
||||
engines: {node: 18 || 20 || >=22}
|
||||
@@ -594,16 +566,18 @@ packages:
|
||||
resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
proxy-from-env@1.1.0:
|
||||
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
||||
proxy-from-env@2.1.0:
|
||||
resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
rolldown@1.2.3:
|
||||
resolution: {integrity: sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
|
||||
screeps-api@1.16.1:
|
||||
resolution: {integrity: sha512-VwgibYPCFXaRlNdFrC188s6juKdAbMIeLy6oRa030IRSUuIZFpe7m4NHzMxLC30qq3cZejdlOedXXthOnNkggA==}
|
||||
screeps-api@2.1.0:
|
||||
resolution: {integrity: sha512-6mweXGgmIhmXpqSGtRYI/sk+Sh3Ug1lElHQndA6bXV/ZmjUgBM5QSZoD0u83lazh2bNxbtLaigQ62yguxZ1Xdg==}
|
||||
engines: {node: 22.x || 24.x}
|
||||
hasBin: true
|
||||
|
||||
semver@7.8.5:
|
||||
@@ -618,9 +592,6 @@ packages:
|
||||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
sprintf-js@1.0.3:
|
||||
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
||||
|
||||
stackback@0.0.2:
|
||||
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
||||
|
||||
@@ -665,8 +636,8 @@ packages:
|
||||
resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==}
|
||||
engines: {node: '>=18.17'}
|
||||
|
||||
utf-8-validate@5.0.10:
|
||||
resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
|
||||
utf-8-validate@6.0.6:
|
||||
resolution: {integrity: sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA==}
|
||||
engines: {node: '>=6.14.2'}
|
||||
|
||||
vite@8.2.1:
|
||||
@@ -758,23 +729,21 @@ packages:
|
||||
engines: {node: '>=8'}
|
||||
hasBin: true
|
||||
|
||||
wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
|
||||
ws@7.5.13:
|
||||
resolution: {integrity: sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==}
|
||||
engines: {node: '>=8.3.0'}
|
||||
ws@8.21.3:
|
||||
resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
utf-8-validate: ^5.0.2
|
||||
utf-8-validate: '>=5.0.2'
|
||||
peerDependenciesMeta:
|
||||
bufferutil:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
|
||||
yamljs@0.3.0:
|
||||
resolution: {integrity: sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==}
|
||||
yaml@2.9.0:
|
||||
resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
|
||||
engines: {node: '>= 14.6'}
|
||||
hasBin: true
|
||||
|
||||
snapshots:
|
||||
@@ -901,7 +870,7 @@ snapshots:
|
||||
|
||||
'@types/estree@1.0.9': {}
|
||||
|
||||
'@vercel/ncc@0.38.4': {}
|
||||
'@vercel/ncc@0.44.1': {}
|
||||
|
||||
'@vitest/coverage-v8@4.1.10(vitest@4.1.10)':
|
||||
dependencies:
|
||||
@@ -915,7 +884,7 @@ snapshots:
|
||||
obug: 2.1.4
|
||||
std-env: 4.2.0
|
||||
tinyrainbow: 3.1.1
|
||||
vitest: 4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1)
|
||||
vitest: 4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1(yaml@2.9.0))
|
||||
|
||||
'@vitest/expect@4.1.10':
|
||||
dependencies:
|
||||
@@ -926,13 +895,13 @@ snapshots:
|
||||
chai: 6.2.2
|
||||
tinyrainbow: 3.1.1
|
||||
|
||||
'@vitest/mocker@4.1.10(vite@8.2.1)':
|
||||
'@vitest/mocker@4.1.10(vite@8.2.1(yaml@2.9.0))':
|
||||
dependencies:
|
||||
'@vitest/spy': 4.1.10
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.21
|
||||
optionalDependencies:
|
||||
vite: 8.2.1
|
||||
vite: 8.2.1(yaml@2.9.0)
|
||||
|
||||
'@vitest/pretty-format@4.1.10':
|
||||
dependencies:
|
||||
@@ -958,9 +927,11 @@ snapshots:
|
||||
convert-source-map: 2.0.0
|
||||
tinyrainbow: 3.1.1
|
||||
|
||||
argparse@1.0.10:
|
||||
agent-base@6.0.2(supports-color@7.2.0):
|
||||
dependencies:
|
||||
sprintf-js: 1.0.3
|
||||
debug: 4.4.3(supports-color@7.2.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
assertion-error@2.0.1: {}
|
||||
|
||||
@@ -972,23 +943,18 @@ snapshots:
|
||||
|
||||
asynckit@0.4.0: {}
|
||||
|
||||
axios@0.28.1(debug@4.4.3(supports-color@7.2.0)):
|
||||
axios@1.19.0(debug@4.4.3(supports-color@7.2.0))(supports-color@7.2.0):
|
||||
dependencies:
|
||||
follow-redirects: 1.16.0(debug@4.4.3(supports-color@7.2.0))
|
||||
form-data: 4.0.6
|
||||
proxy-from-env: 1.1.0
|
||||
https-proxy-agent: 5.0.1(supports-color@7.2.0)
|
||||
proxy-from-env: 2.1.0
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
- debug
|
||||
- supports-color
|
||||
|
||||
balanced-match@4.0.4: {}
|
||||
|
||||
brace-expansion@1.1.18:
|
||||
dependencies:
|
||||
balanced-match: 1.0.2
|
||||
concat-map: 0.0.1
|
||||
|
||||
brace-expansion@5.0.9:
|
||||
dependencies:
|
||||
balanced-match: 4.0.4
|
||||
@@ -1009,9 +975,7 @@ snapshots:
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
|
||||
commander@7.2.0: {}
|
||||
|
||||
concat-map@0.0.1: {}
|
||||
commander@14.0.3: {}
|
||||
|
||||
convert-source-map@2.0.0: {}
|
||||
|
||||
@@ -1070,8 +1034,6 @@ snapshots:
|
||||
hasown: 2.0.4
|
||||
mime-types: 2.1.35
|
||||
|
||||
fs.realpath@1.0.0: {}
|
||||
|
||||
fsevents@2.3.3:
|
||||
optional: true
|
||||
|
||||
@@ -1101,15 +1063,6 @@ snapshots:
|
||||
minipass: 7.1.3
|
||||
path-scurry: 2.0.2
|
||||
|
||||
glob@7.2.3:
|
||||
dependencies:
|
||||
fs.realpath: 1.0.0
|
||||
inflight: 1.0.6
|
||||
inherits: 2.0.4
|
||||
minimatch: 3.1.5
|
||||
once: 1.4.0
|
||||
path-is-absolute: 1.0.1
|
||||
|
||||
gopd@1.2.0: {}
|
||||
|
||||
has-flag@4.0.0: {}
|
||||
@@ -1126,12 +1079,12 @@ snapshots:
|
||||
|
||||
html-escaper@2.0.2: {}
|
||||
|
||||
inflight@1.0.6:
|
||||
https-proxy-agent@5.0.1(supports-color@7.2.0):
|
||||
dependencies:
|
||||
once: 1.4.0
|
||||
wrappy: 1.0.2
|
||||
|
||||
inherits@2.0.4: {}
|
||||
agent-base: 6.0.2(supports-color@7.2.0)
|
||||
debug: 4.4.3(supports-color@7.2.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
istanbul-lib-coverage@3.2.2: {}
|
||||
|
||||
@@ -1225,10 +1178,6 @@ snapshots:
|
||||
dependencies:
|
||||
brace-expansion: 5.0.9
|
||||
|
||||
minimatch@3.1.5:
|
||||
dependencies:
|
||||
brace-expansion: 1.1.18
|
||||
|
||||
minipass@7.1.3: {}
|
||||
|
||||
ms@2.1.3: {}
|
||||
@@ -1240,12 +1189,6 @@ snapshots:
|
||||
|
||||
obug@2.1.4: {}
|
||||
|
||||
once@1.4.0:
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
|
||||
path-is-absolute@1.0.1: {}
|
||||
|
||||
path-scurry@2.0.2:
|
||||
dependencies:
|
||||
lru-cache: 11.5.2
|
||||
@@ -1263,7 +1206,7 @@ snapshots:
|
||||
picocolors: 1.1.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
proxy-from-env@1.1.0: {}
|
||||
proxy-from-env@2.1.0: {}
|
||||
|
||||
rolldown@1.2.3:
|
||||
dependencies:
|
||||
@@ -1285,18 +1228,18 @@ snapshots:
|
||||
'@rolldown/binding-win32-arm64-msvc': 1.2.3
|
||||
'@rolldown/binding-win32-x64-msvc': 1.2.3
|
||||
|
||||
screeps-api@1.16.1(supports-color@7.2.0):
|
||||
screeps-api@2.1.0(supports-color@7.2.0):
|
||||
dependencies:
|
||||
axios: 0.28.1(debug@4.4.3(supports-color@7.2.0))
|
||||
commander: 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
|
||||
debug: 4.4.3(supports-color@7.2.0)
|
||||
ws: 7.5.13(bufferutil@4.1.0)(utf-8-validate@5.0.10)
|
||||
yamljs: 0.3.0
|
||||
ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
|
||||
yaml: 2.9.0
|
||||
optionalDependencies:
|
||||
bufferutil: 4.1.0
|
||||
utf-8-validate: 5.0.10
|
||||
utf-8-validate: 6.0.6
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- supports-color
|
||||
|
||||
semver@7.8.5: {}
|
||||
|
||||
@@ -1304,8 +1247,6 @@ snapshots:
|
||||
|
||||
source-map-js@1.2.1: {}
|
||||
|
||||
sprintf-js@1.0.3: {}
|
||||
|
||||
stackback@0.0.2: {}
|
||||
|
||||
std-env@4.2.0: {}
|
||||
@@ -1339,12 +1280,12 @@ snapshots:
|
||||
|
||||
undici@6.28.0: {}
|
||||
|
||||
utf-8-validate@5.0.10:
|
||||
utf-8-validate@6.0.6:
|
||||
dependencies:
|
||||
node-gyp-build: 4.8.4
|
||||
optional: true
|
||||
|
||||
vite@8.2.1:
|
||||
vite@8.2.1(yaml@2.9.0):
|
||||
dependencies:
|
||||
lightningcss: 1.33.0
|
||||
picomatch: 4.0.5
|
||||
@@ -1353,11 +1294,12 @@ snapshots:
|
||||
tinyglobby: 0.2.17
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
yaml: 2.9.0
|
||||
|
||||
vitest@4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1):
|
||||
vitest@4.1.10(@vitest/coverage-v8@4.1.10)(vite@8.2.1(yaml@2.9.0)):
|
||||
dependencies:
|
||||
'@vitest/expect': 4.1.10
|
||||
'@vitest/mocker': 4.1.10(vite@8.2.1)
|
||||
'@vitest/mocker': 4.1.10(vite@8.2.1(yaml@2.9.0))
|
||||
'@vitest/pretty-format': 4.1.10
|
||||
'@vitest/runner': 4.1.10
|
||||
'@vitest/snapshot': 4.1.10
|
||||
@@ -1374,26 +1316,21 @@ snapshots:
|
||||
tinyexec: 1.3.0
|
||||
tinyglobby: 0.2.17
|
||||
tinyrainbow: 3.1.1
|
||||
vite: 8.2.1
|
||||
vite: 8.2.1(yaml@2.9.0)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@vitest/coverage-v8': 4.1.10(vitest@4.1.10)
|
||||
transitivePeerDependencies:
|
||||
- msw
|
||||
- msw
|
||||
|
||||
why-is-node-running@2.3.0:
|
||||
dependencies:
|
||||
siginfo: 2.0.0
|
||||
stackback: 0.0.2
|
||||
|
||||
wrappy@1.0.2: {}
|
||||
|
||||
ws@7.5.13(bufferutil@4.1.0)(utf-8-validate@5.0.10):
|
||||
ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6):
|
||||
optionalDependencies:
|
||||
bufferutil: 4.1.0
|
||||
utf-8-validate: 5.0.10
|
||||
utf-8-validate: 6.0.6
|
||||
|
||||
yamljs@0.3.0:
|
||||
dependencies:
|
||||
argparse: 1.0.10
|
||||
glob: 7.2.3
|
||||
yaml@2.9.0: {}
|
||||
|
||||
Reference in New Issue
Block a user