@potential-guide/check-environment 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +213 -2
- package/dist/bundles/directories/resources/check.json +19 -0
- package/dist/bundles/directories/resources/references/en/check.md +18 -0
- package/dist/bundles/directories/resources/references/en/problems/directory-unusable.md +10 -0
- package/dist/bundles/directories/resources/references/en/problems/not-directory.md +7 -0
- package/dist/bundles/directories/schemas/0.json +51 -0
- package/dist/bundles/directories/schemas/1.json +74 -0
- package/dist/bundles/directories/schemas/2.json +4 -0
- package/dist/bundles/directories/task.yaml +22 -0
- package/dist/bundles/directories/worker.cjs +4 -0
- package/dist/bundles/directories.car +0 -0
- package/dist/bundles/network/resources/check.json +21 -0
- package/dist/bundles/network/resources/references/en/check.md +21 -0
- package/dist/bundles/network/resources/references/en/problems/dns-unavailable.md +8 -0
- package/dist/bundles/network/resources/references/en/problems/http-status.md +9 -0
- package/dist/bundles/network/resources/references/en/problems/http-unavailable.md +9 -0
- package/dist/bundles/network/schemas/0.json +76 -0
- package/dist/bundles/network/schemas/1.json +78 -0
- package/dist/bundles/network/schemas/2.json +4 -0
- package/dist/bundles/network/task.yaml +23 -0
- package/dist/bundles/network/worker.cjs +2 -0
- package/dist/bundles/network.car +0 -0
- package/dist/bundles/references.json +17 -0
- package/dist/bundles/tools/resources/check.json +23 -0
- package/dist/bundles/tools/resources/references/en/check.md +21 -0
- package/dist/bundles/tools/resources/references/en/problems/tool-missing.md +8 -0
- package/dist/bundles/tools/resources/references/en/problems/tool-unusable.md +9 -0
- package/dist/bundles/tools/resources/references/en/problems/tool-version.md +8 -0
- package/dist/bundles/tools/resources/references/en/problems/version-unparseable.md +8 -0
- package/dist/bundles/tools/schemas/0.json +50 -0
- package/dist/bundles/tools/schemas/1.json +82 -0
- package/dist/bundles/tools/schemas/2.json +4 -0
- package/dist/bundles/tools/task.yaml +24 -0
- package/dist/bundles/tools/worker.cjs +2 -0
- package/dist/bundles/tools.car +0 -0
- package/dist/command.d.ts +8 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +105 -0
- package/dist/command.js.map +1 -0
- package/dist/contracts.d.ts +36 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +14 -0
- package/dist/contracts.js.map +1 -0
- package/dist/definitions/directories.d.ts +1 -0
- package/dist/definitions/directories.js +1 -0
- package/dist/definitions/network.d.ts +1 -0
- package/dist/definitions/network.js +1 -0
- package/dist/definitions/tools.d.ts +1 -0
- package/dist/definitions/tools.js +1 -0
- package/dist/directories.d.ts +16 -0
- package/dist/directories.d.ts.map +1 -0
- package/dist/directories.js +65 -0
- package/dist/directories.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/network.d.ts +18 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +79 -0
- package/dist/network.js.map +1 -0
- package/dist/result.d.ts +20 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +23 -0
- package/dist/result.js.map +1 -0
- package/dist/tasks/directories/contract.d.ts +21 -0
- package/dist/tasks/directories/contract.d.ts.map +1 -0
- package/dist/tasks/directories/contract.js +11 -0
- package/dist/tasks/directories/contract.js.map +1 -0
- package/dist/tasks/directories/main.d.ts +2 -0
- package/dist/tasks/directories/main.d.ts.map +1 -0
- package/dist/tasks/directories/main.js +7 -0
- package/dist/tasks/directories/main.js.map +1 -0
- package/dist/tasks/inputs.d.ts +6 -0
- package/dist/tasks/inputs.d.ts.map +1 -0
- package/dist/tasks/inputs.js +5 -0
- package/dist/tasks/inputs.js.map +1 -0
- package/dist/tasks/network/contract.d.ts +24 -0
- package/dist/tasks/network/contract.d.ts.map +1 -0
- package/dist/tasks/network/contract.js +25 -0
- package/dist/tasks/network/contract.js.map +1 -0
- package/dist/tasks/network/main.d.ts +2 -0
- package/dist/tasks/network/main.d.ts.map +1 -0
- package/dist/tasks/network/main.js +7 -0
- package/dist/tasks/network/main.js.map +1 -0
- package/dist/tasks/tools/contract.d.ts +23 -0
- package/dist/tasks/tools/contract.d.ts.map +1 -0
- package/dist/tasks/tools/contract.js +13 -0
- package/dist/tasks/tools/contract.js.map +1 -0
- package/dist/tasks/tools/main.d.ts +2 -0
- package/dist/tasks/tools/main.d.ts.map +1 -0
- package/dist/tasks/tools/main.js +7 -0
- package/dist/tasks/tools/main.js.map +1 -0
- package/dist/tools.d.ts +19 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +49 -0
- package/dist/tools.js.map +1 -0
- package/package.json +44 -5
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createCheckResultSchema } from "@potential-guide/check-sdk/contracts";
|
|
2
|
+
import { problemCodes as directories } from "../dist/definitions/directories.js";
|
|
3
|
+
import { problemCodes as network } from "../dist/definitions/network.js";
|
|
4
|
+
import { problemCodes as tools } from "../dist/definitions/tools.js";
|
|
5
|
+
import directoriesContract from "./tasks/directories/contract.js";
|
|
6
|
+
import networkContract from "./tasks/network/contract.js";
|
|
7
|
+
import toolsContract from "./tasks/tools/contract.js";
|
|
8
|
+
export const inputSchemas = {
|
|
9
|
+
tools: toolsContract.input,
|
|
10
|
+
directories: directoriesContract.input,
|
|
11
|
+
network: networkContract.input,
|
|
12
|
+
};
|
|
13
|
+
export const resultSchema = createCheckResultSchema([...tools, ...directories, ...network]);
|
|
14
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,YAAY,IAAI,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,mBAAmB,MAAM,iCAAiC,CAAC;AAClE,OAAO,eAAe,MAAM,6BAA6B,CAAC;AAC1D,OAAO,aAAa,MAAM,2BAA2B,CAAC;AAEtD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,aAAa,CAAC,KAAK;IAC1B,WAAW,EAAE,mBAAmB,CAAC,KAAK;IACtC,OAAO,EAAE,eAAe,CAAC,KAAK;CAC/B,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const problemCodes: readonly ["not-directory", "directory-unusable"];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const problemCodes = Object.freeze(["not-directory","directory-unusable"]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const problemCodes: readonly ["dns-unavailable", "http-status", "http-unavailable"];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const problemCodes = Object.freeze(["dns-unavailable","http-status","http-unavailable"]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const problemCodes: readonly ["tool-missing", "tool-unusable", "version-unparseable", "tool-version"];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const problemCodes = Object.freeze(["tool-missing","tool-unusable","version-unparseable","tool-version"]);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type CheckContext } from "./result.js";
|
|
2
|
+
export interface DirectoryInput {
|
|
3
|
+
directories: {
|
|
4
|
+
path: string;
|
|
5
|
+
requirements: ("exists" | "read" | "write")[];
|
|
6
|
+
}[];
|
|
7
|
+
}
|
|
8
|
+
export declare function probeDirectoryWrite(path: string, signal?: AbortSignal): Promise<void>;
|
|
9
|
+
export declare function inspectDirectories(input: DirectoryInput, context?: CheckContext): Promise<{
|
|
10
|
+
target: string;
|
|
11
|
+
code: "not-directory" | "directory-unusable";
|
|
12
|
+
actual: string | null;
|
|
13
|
+
}[]>;
|
|
14
|
+
export declare function checkDirectories(input: DirectoryInput, context?: CheckContext): Promise<import("@potential-guide/check-sdk/contracts").CheckResult<"not-directory" | "directory-unusable">>;
|
|
15
|
+
export default checkDirectories;
|
|
16
|
+
//# sourceMappingURL=directories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directories.d.ts","sourceRoot":"","sources":["../src/directories.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAA+C,MAAM,aAAa,CAAC;AAE7F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAA;KAAE,EAAE,CAAC;CAChF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3F;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,GAAE,YAAiB;;;;KAuCzF;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,GAAE,YAAiB,+GAEvF;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { access, lstat, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { isAbsolute, join } from "node:path";
|
|
5
|
+
import { problemCodes } from "../dist/definitions/directories.js";
|
|
6
|
+
import { errorCode, problems, result } from "./result.js";
|
|
7
|
+
export async function probeDirectoryWrite(path, signal) {
|
|
8
|
+
signal?.throwIfAborted();
|
|
9
|
+
const probe = join(path, `.pguide-check-${randomUUID()}`);
|
|
10
|
+
let created = false;
|
|
11
|
+
try {
|
|
12
|
+
await writeFile(probe, "directory-check\n", { flag: "wx", mode: 0o600 });
|
|
13
|
+
created = true;
|
|
14
|
+
signal?.throwIfAborted();
|
|
15
|
+
if ((await readFile(probe, "utf8")) !== "directory-check\n")
|
|
16
|
+
throw new Error("Directory write probe readback mismatch.");
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
if (created)
|
|
20
|
+
await rm(probe);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function inspectDirectories(input, context = {}) {
|
|
24
|
+
if (!input.directories.length || input.directories.length > 100)
|
|
25
|
+
throw new Error("Specify between 1 and 100 directories.");
|
|
26
|
+
for (const directory of input.directories) {
|
|
27
|
+
if (!isAbsolute(directory.path) ||
|
|
28
|
+
directory.path.includes("\0") ||
|
|
29
|
+
!directory.requirements.length ||
|
|
30
|
+
directory.requirements.some((value) => !["exists", "read", "write"].includes(value)))
|
|
31
|
+
throw new Error("Directories require absolute paths and explicit access requirements.");
|
|
32
|
+
}
|
|
33
|
+
const checks = [];
|
|
34
|
+
for (const directory of input.directories) {
|
|
35
|
+
context.signal?.throwIfAborted();
|
|
36
|
+
let code = "pass";
|
|
37
|
+
let actual = null;
|
|
38
|
+
try {
|
|
39
|
+
const info = await lstat(directory.path);
|
|
40
|
+
if (!info.isDirectory() || info.isSymbolicLink())
|
|
41
|
+
code = "not-directory";
|
|
42
|
+
else {
|
|
43
|
+
if (directory.requirements.includes("read"))
|
|
44
|
+
await access(directory.path, constants.R_OK | constants.X_OK);
|
|
45
|
+
if (directory.requirements.includes("write"))
|
|
46
|
+
await probeDirectoryWrite(directory.path, context.signal);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
context.signal?.throwIfAborted();
|
|
51
|
+
actual = errorCode(error) ?? null;
|
|
52
|
+
if (actual === null ||
|
|
53
|
+
!["ENOENT", "ENOTDIR", "EACCES", "EPERM", "EROFS", "ENOSPC", "EDQUOT"].includes(actual))
|
|
54
|
+
throw error;
|
|
55
|
+
code = "directory-unusable";
|
|
56
|
+
}
|
|
57
|
+
checks.push({ target: directory.path, ok: code === "pass", code, actual });
|
|
58
|
+
}
|
|
59
|
+
return problems(checks);
|
|
60
|
+
}
|
|
61
|
+
export async function checkDirectories(input, context = {}) {
|
|
62
|
+
return result(problemCodes, await inspectDirectories(input, context));
|
|
63
|
+
}
|
|
64
|
+
export default checkDirectories;
|
|
65
|
+
//# sourceMappingURL=directories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directories.js","sourceRoot":"","sources":["../src/directories.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { checkDirectories, type DirectoryInput, probeDirectoryWrite } from "./directories.js";
|
|
2
|
+
export { checkNetwork, type NetworkInput } from "./network.js";
|
|
3
|
+
export type { CheckContext, CheckProblem, CheckResult } from "./result.js";
|
|
4
|
+
export { checkTools, compareVersions, parseToolVersion, type ToolInput } from "./tools.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CheckContext } from "./result.js";
|
|
2
|
+
export interface NetworkInput {
|
|
3
|
+
dns: string[];
|
|
4
|
+
http: {
|
|
5
|
+
url: string;
|
|
6
|
+
expectedStatus: number[];
|
|
7
|
+
followRedirects: boolean;
|
|
8
|
+
}[];
|
|
9
|
+
checkTimeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function inspectNetwork(input: NetworkInput, context?: CheckContext): Promise<{
|
|
12
|
+
target: string;
|
|
13
|
+
code: "dns-unavailable" | "http-status" | "http-unavailable";
|
|
14
|
+
actual: string | null;
|
|
15
|
+
}[]>;
|
|
16
|
+
export declare function checkNetwork(input: NetworkInput, context?: CheckContext): Promise<import("@potential-guide/check-sdk/contracts").CheckResult<"dns-unavailable" | "http-status" | "http-unavailable">>;
|
|
17
|
+
export default checkNetwork;
|
|
18
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkD,MAAM,aAAa,CAAC;AAEhG,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,YAAiB;;;;KAgFnF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,YAAiB,+HAEjF;AAED,eAAe,YAAY,CAAC"}
|
package/dist/network.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { problemCodes } from "../dist/definitions/network.js";
|
|
2
|
+
import { executeCommand } from "./command.js";
|
|
3
|
+
import { problems, result, timeoutValue } from "./result.js";
|
|
4
|
+
export async function inspectNetwork(input, context = {}) {
|
|
5
|
+
if ((!input.dns.length && !input.http.length) ||
|
|
6
|
+
input.dns.length > 100 ||
|
|
7
|
+
input.http.length > 100)
|
|
8
|
+
throw new Error("Specify DNS or HTTP checks, with at most 100 of each.");
|
|
9
|
+
const timeout = timeoutValue(input.checkTimeoutMs);
|
|
10
|
+
for (const host of input.dns)
|
|
11
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9.-]{0,252}$/.test(host))
|
|
12
|
+
throw new Error("Invalid DNS name.");
|
|
13
|
+
for (const endpoint of input.http) {
|
|
14
|
+
const url = new URL(endpoint.url);
|
|
15
|
+
if (!["http:", "https:"].includes(url.protocol) ||
|
|
16
|
+
url.username ||
|
|
17
|
+
url.password ||
|
|
18
|
+
!endpoint.expectedStatus.length ||
|
|
19
|
+
endpoint.expectedStatus.some((status) => !Number.isInteger(status) || status < 100 || status > 599))
|
|
20
|
+
throw new Error("HTTP checks require HTTP(S) URLs without credentials and valid status codes.");
|
|
21
|
+
}
|
|
22
|
+
const checks = [];
|
|
23
|
+
for (const host of input.dns) {
|
|
24
|
+
// A subprocess bounds native DNS lookup lifetime, including cancellation.
|
|
25
|
+
const source = "import{lookup}from'node:dns/promises';try{const r=await lookup(process.argv[1]);console.log(JSON.stringify({ok:true,actual:r.address}));}catch(e){if(!['ENOTFOUND','EAI_AGAIN','EAI_FAIL','ETIMEOUT'].includes(e.code))throw e;console.log(JSON.stringify({ok:false,actual:e.code}));}";
|
|
26
|
+
const output = await executeCommand(process.execPath, ["--input-type=module", "-e", source, host], timeout, context.signal);
|
|
27
|
+
if (output.code !== 0)
|
|
28
|
+
throw new Error(`DNS check process failed: ${output.stderr}`);
|
|
29
|
+
const value = JSON.parse(output.stdout);
|
|
30
|
+
checks.push({
|
|
31
|
+
target: host,
|
|
32
|
+
ok: value.ok,
|
|
33
|
+
code: value.ok ? "pass" : "dns-unavailable",
|
|
34
|
+
actual: value.actual,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
for (const endpoint of input.http) {
|
|
38
|
+
context.signal?.throwIfAborted();
|
|
39
|
+
const signal = AbortSignal.any([
|
|
40
|
+
AbortSignal.timeout(timeout),
|
|
41
|
+
...(context.signal ? [context.signal] : []),
|
|
42
|
+
]);
|
|
43
|
+
let check;
|
|
44
|
+
try {
|
|
45
|
+
const response = await fetch(endpoint.url, {
|
|
46
|
+
redirect: endpoint.followRedirects ? "follow" : "manual",
|
|
47
|
+
signal,
|
|
48
|
+
});
|
|
49
|
+
try {
|
|
50
|
+
const ok = endpoint.expectedStatus.includes(response.status) &&
|
|
51
|
+
(endpoint.followRedirects || response.status < 300 || response.status >= 400);
|
|
52
|
+
check = {
|
|
53
|
+
target: endpoint.url,
|
|
54
|
+
ok,
|
|
55
|
+
code: ok ? "pass" : "http-status",
|
|
56
|
+
actual: String(response.status),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
await response.body?.cancel();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
context.signal?.throwIfAborted();
|
|
65
|
+
if (error instanceof Error && error.name === "TimeoutError")
|
|
66
|
+
throw new Error("HTTP check timed out.", { cause: error });
|
|
67
|
+
if (!(error instanceof TypeError))
|
|
68
|
+
throw error;
|
|
69
|
+
check = { target: endpoint.url, ok: false, code: "http-unavailable", actual: error.message };
|
|
70
|
+
}
|
|
71
|
+
checks.push(check);
|
|
72
|
+
}
|
|
73
|
+
return problems(checks);
|
|
74
|
+
}
|
|
75
|
+
export async function checkNetwork(input, context = {}) {
|
|
76
|
+
return result(problemCodes, await inspectNetwork(input, context));
|
|
77
|
+
}
|
|
78
|
+
export default checkNetwork;
|
|
79
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
package/dist/result.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createCheckResult } from "@potential-guide/check-sdk";
|
|
2
|
+
export type { CheckProblem, CheckResult } from "@potential-guide/check-sdk";
|
|
3
|
+
export interface CheckContext {
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
}
|
|
6
|
+
export interface CheckItem<Code extends string = string> {
|
|
7
|
+
target: string;
|
|
8
|
+
ok: boolean;
|
|
9
|
+
code: Code | "pass";
|
|
10
|
+
actual: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function problems<Code extends string>(checks: CheckItem<Code>[]): {
|
|
13
|
+
target: string;
|
|
14
|
+
code: Code;
|
|
15
|
+
actual: string | null;
|
|
16
|
+
}[];
|
|
17
|
+
export declare const result: typeof createCheckResult;
|
|
18
|
+
export declare function errorCode(error: unknown): string | undefined;
|
|
19
|
+
export declare function timeoutValue(value: number | undefined): number;
|
|
20
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,SAAS,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;;UAKlC,IAAI;;IAExC;AAED,eAAO,MAAM,MAAM,0BAAoB,CAAC;AAExC,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK9D"}
|
package/dist/result.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createCheckResult } from "@potential-guide/check-sdk";
|
|
2
|
+
export function problems(checks) {
|
|
3
|
+
return checks
|
|
4
|
+
.filter((check) => !check.ok)
|
|
5
|
+
.map(({ target, code, actual }) => {
|
|
6
|
+
if (code === "pass")
|
|
7
|
+
throw new Error("A failing check requires a problem code.");
|
|
8
|
+
return { target, code: code, actual };
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export const result = createCheckResult;
|
|
12
|
+
export function errorCode(error) {
|
|
13
|
+
return error instanceof Error && "code" in error && typeof error.code === "string"
|
|
14
|
+
? error.code
|
|
15
|
+
: undefined;
|
|
16
|
+
}
|
|
17
|
+
export function timeoutValue(value) {
|
|
18
|
+
const timeout = value ?? 5000;
|
|
19
|
+
if (!Number.isSafeInteger(timeout) || timeout < 100 || timeout > 300000)
|
|
20
|
+
throw new Error("checkTimeoutMs must be an integer between 100 and 300000.");
|
|
21
|
+
return timeout;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAe/D,MAAM,UAAU,QAAQ,CAAsB,MAAyB;IACrE,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;SAC5B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QAChC,IAAI,IAAI,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACjF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAY,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAExC,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAChF,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,GAAG,IAAI,OAAO,GAAG,MAAM;QACrE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
input: import("@sinclair/typebox").TObject<{
|
|
3
|
+
directories: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
4
|
+
path: import("@sinclair/typebox").TString;
|
|
5
|
+
requirements: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"exists">, import("@sinclair/typebox").TLiteral<"read">, import("@sinclair/typebox").TLiteral<"write">]>>;
|
|
6
|
+
}>>;
|
|
7
|
+
}>;
|
|
8
|
+
result: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
9
|
+
pass: import("@sinclair/typebox").TLiteral<true>;
|
|
10
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
11
|
+
pass: import("@sinclair/typebox").TLiteral<false>;
|
|
12
|
+
problems: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
13
|
+
target: import("@sinclair/typebox").TString;
|
|
14
|
+
code: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"not-directory" | "directory-unusable">[]>;
|
|
15
|
+
actual: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
16
|
+
}>>;
|
|
17
|
+
}>]>;
|
|
18
|
+
message: import("@sinclair/typebox").TNever;
|
|
19
|
+
};
|
|
20
|
+
export default _default;
|
|
21
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/tasks/directories/contract.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAKA,wBAoBE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createCheckContract } from "@potential-guide/check-sdk/contracts";
|
|
2
|
+
import { Type } from "@sinclair/typebox";
|
|
3
|
+
import { problemCodes } from "../../../dist/definitions/directories.js";
|
|
4
|
+
import { objectOptions, text } from "../inputs.js";
|
|
5
|
+
export default createCheckContract(Type.Object({
|
|
6
|
+
directories: Type.Array(Type.Object({
|
|
7
|
+
path: text,
|
|
8
|
+
requirements: Type.Array(Type.Union([Type.Literal("exists"), Type.Literal("read"), Type.Literal("write")]), { minItems: 1, uniqueItems: true }),
|
|
9
|
+
}, objectOptions), { minItems: 1, maxItems: 100 }),
|
|
10
|
+
}, objectOptions), problemCodes);
|
|
11
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/tasks/directories/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEnD,eAAe,mBAAmB,CAChC,IAAI,CAAC,MAAM,CACT;IACE,WAAW,EAAE,IAAI,CAAC,KAAK,CACrB,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,IAAI,CAAC,KAAK,CACtB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EACjF,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CACnC;KACF,EACD,aAAa,CACd,EACD,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAC/B;CACF,EACD,aAAa,CACd,EACD,YAAY,CACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/tasks/directories/main.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createCheckTask } from "@potential-guide/check-sdk";
|
|
2
|
+
import { runTask } from "@potential-guide/task-sdk";
|
|
3
|
+
import { problemCodes } from "../../../dist/definitions/directories.js";
|
|
4
|
+
import { inspectDirectories } from "../../directories.js";
|
|
5
|
+
const callback = createCheckTask(problemCodes, inspectDirectories);
|
|
6
|
+
runTask(callback);
|
|
7
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/tasks/directories/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAqB,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,QAAQ,GAGV,eAAe,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACtD,OAAO,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const text: import("@sinclair/typebox").TString;
|
|
2
|
+
export declare const timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
3
|
+
export declare const objectOptions: {
|
|
4
|
+
readonly additionalProperties: false;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/tasks/inputs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,qCAAiD,CAAC;AACnE,eAAO,MAAM,OAAO,6EAAiE,CAAC;AACtF,eAAO,MAAM,aAAa;;CAA2C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
export const text = Type.String({ minLength: 1, maxLength: 4096 });
|
|
3
|
+
export const timeout = Type.Optional(Type.Integer({ minimum: 100, maximum: 300000 }));
|
|
4
|
+
export const objectOptions = { additionalProperties: false };
|
|
5
|
+
//# sourceMappingURL=inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/tasks/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAW,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
input: import("@sinclair/typebox").TObject<{
|
|
3
|
+
checkTimeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
4
|
+
dns: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
5
|
+
http: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
6
|
+
url: import("@sinclair/typebox").TString;
|
|
7
|
+
expectedStatus: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TInteger>;
|
|
8
|
+
followRedirects: import("@sinclair/typebox").TBoolean;
|
|
9
|
+
}>>;
|
|
10
|
+
}>;
|
|
11
|
+
result: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
12
|
+
pass: import("@sinclair/typebox").TLiteral<true>;
|
|
13
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
14
|
+
pass: import("@sinclair/typebox").TLiteral<false>;
|
|
15
|
+
problems: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
16
|
+
target: import("@sinclair/typebox").TString;
|
|
17
|
+
code: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"dns-unavailable" | "http-status" | "http-unavailable">[]>;
|
|
18
|
+
actual: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
19
|
+
}>>;
|
|
20
|
+
}>]>;
|
|
21
|
+
message: import("@sinclair/typebox").TNever;
|
|
22
|
+
};
|
|
23
|
+
export default _default;
|
|
24
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/tasks/network/contract.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAKA,wBA+BE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createCheckContract } from "@potential-guide/check-sdk/contracts";
|
|
2
|
+
import { Type } from "@sinclair/typebox";
|
|
3
|
+
import { problemCodes } from "../../../dist/definitions/network.js";
|
|
4
|
+
import { objectOptions, text, timeout } from "../inputs.js";
|
|
5
|
+
export default createCheckContract(Type.Object({
|
|
6
|
+
checkTimeoutMs: timeout,
|
|
7
|
+
dns: Type.Array(Type.String({ maxLength: 253, pattern: "^[A-Za-z0-9][A-Za-z0-9.-]*$" }), {
|
|
8
|
+
maxItems: 100,
|
|
9
|
+
}),
|
|
10
|
+
http: Type.Array(Type.Object({
|
|
11
|
+
url: text,
|
|
12
|
+
expectedStatus: Type.Array(Type.Integer({ minimum: 100, maximum: 599 }), {
|
|
13
|
+
minItems: 1,
|
|
14
|
+
uniqueItems: true,
|
|
15
|
+
}),
|
|
16
|
+
followRedirects: Type.Boolean(),
|
|
17
|
+
}, objectOptions), { maxItems: 100 }),
|
|
18
|
+
}, {
|
|
19
|
+
...objectOptions,
|
|
20
|
+
anyOf: [
|
|
21
|
+
{ properties: { dns: { type: "array", minItems: 1 } } },
|
|
22
|
+
{ properties: { http: { type: "array", minItems: 1 } } },
|
|
23
|
+
],
|
|
24
|
+
}), problemCodes);
|
|
25
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/tasks/network/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5D,eAAe,mBAAmB,CAChC,IAAI,CAAC,MAAM,CACT;IACE,cAAc,EAAE,OAAO;IACvB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,EAAE;QACvF,QAAQ,EAAE,GAAG;KACd,CAAC;IACF,IAAI,EAAE,IAAI,CAAC,KAAK,CACd,IAAI,CAAC,MAAM,CACT;QACE,GAAG,EAAE,IAAI;QACT,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;YACvE,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE;KAChC,EACD,aAAa,CACd,EACD,EAAE,QAAQ,EAAE,GAAG,EAAE,CAClB;CACF,EACD;IACE,GAAG,aAAa;IAChB,KAAK,EAAE;QACL,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;QACvD,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;KACzD;CACF,CACF,EACD,YAAY,CACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/tasks/network/main.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createCheckTask } from "@potential-guide/check-sdk";
|
|
2
|
+
import { runTask } from "@potential-guide/task-sdk";
|
|
3
|
+
import { problemCodes } from "../../../dist/definitions/network.js";
|
|
4
|
+
import { inspectNetwork } from "../../network.js";
|
|
5
|
+
const callback = createCheckTask(problemCodes, inspectNetwork);
|
|
6
|
+
runTask(callback);
|
|
7
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/tasks/network/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAqB,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,QAAQ,GAGV,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAClD,OAAO,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
input: import("@sinclair/typebox").TObject<{
|
|
3
|
+
checkTimeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
4
|
+
tools: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
5
|
+
command: import("@sinclair/typebox").TString;
|
|
6
|
+
args: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
7
|
+
minimumVersion: import("@sinclair/typebox").TString;
|
|
8
|
+
}>>;
|
|
9
|
+
}>;
|
|
10
|
+
result: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
11
|
+
pass: import("@sinclair/typebox").TLiteral<true>;
|
|
12
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
13
|
+
pass: import("@sinclair/typebox").TLiteral<false>;
|
|
14
|
+
problems: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
15
|
+
target: import("@sinclair/typebox").TString;
|
|
16
|
+
code: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"tool-missing" | "tool-unusable" | "version-unparseable" | "tool-version">[]>;
|
|
17
|
+
actual: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
18
|
+
}>>;
|
|
19
|
+
}>]>;
|
|
20
|
+
message: import("@sinclair/typebox").TNever;
|
|
21
|
+
};
|
|
22
|
+
export default _default;
|
|
23
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/tasks/tools/contract.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKA,wBAmBE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createCheckContract } from "@potential-guide/check-sdk/contracts";
|
|
2
|
+
import { Type } from "@sinclair/typebox";
|
|
3
|
+
import { problemCodes } from "../../../dist/definitions/tools.js";
|
|
4
|
+
import { objectOptions, text, timeout } from "../inputs.js";
|
|
5
|
+
export default createCheckContract(Type.Object({
|
|
6
|
+
checkTimeoutMs: timeout,
|
|
7
|
+
tools: Type.Array(Type.Object({
|
|
8
|
+
command: text,
|
|
9
|
+
args: Type.Array(text, { maxItems: 100 }),
|
|
10
|
+
minimumVersion: Type.String({ maxLength: 128, pattern: "^\\d+(?:\\.\\d+)*$" }),
|
|
11
|
+
}, objectOptions), { minItems: 1, maxItems: 100 }),
|
|
12
|
+
}, objectOptions), problemCodes);
|
|
13
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/tasks/tools/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5D,eAAe,mBAAmB,CAChC,IAAI,CAAC,MAAM,CACT;IACE,cAAc,EAAE,OAAO;IACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,MAAM,CACT;QACE,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACzC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;KAC/E,EACD,aAAa,CACd,EACD,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAC/B;CACF,EACD,aAAa,CACd,EACD,YAAY,CACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/tasks/tools/main.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createCheckTask } from "@potential-guide/check-sdk";
|
|
2
|
+
import { runTask } from "@potential-guide/task-sdk";
|
|
3
|
+
import { problemCodes } from "../../../dist/definitions/tools.js";
|
|
4
|
+
import { inspectTools } from "../../tools.js";
|
|
5
|
+
const callback = createCheckTask(problemCodes, inspectTools);
|
|
6
|
+
runTask(callback);
|
|
7
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/tasks/tools/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAqB,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,QAAQ,GAGV,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAChD,OAAO,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CheckContext } from "./result.js";
|
|
2
|
+
export interface ToolInput {
|
|
3
|
+
tools: {
|
|
4
|
+
command: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
minimumVersion: string;
|
|
7
|
+
}[];
|
|
8
|
+
checkTimeoutMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function parseToolVersion(output: string): string | undefined;
|
|
11
|
+
export declare function compareVersions(actual: string, expected: string): number;
|
|
12
|
+
export declare function inspectTools(input: ToolInput, context?: CheckContext): Promise<{
|
|
13
|
+
target: string;
|
|
14
|
+
code: "tool-missing" | "tool-unusable" | "version-unparseable" | "tool-version";
|
|
15
|
+
actual: string | null;
|
|
16
|
+
}[]>;
|
|
17
|
+
export declare function checkTools(input: ToolInput, context?: CheckContext): Promise<import("@potential-guide/check-sdk/contracts").CheckResult<"tool-missing" | "tool-unusable" | "version-unparseable" | "tool-version">>;
|
|
18
|
+
export default checkTools;
|
|
19
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkD,MAAM,aAAa,CAAC;AAEhG,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYxE;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB;;;;KAqB9E;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB,kJAE5E;AAED,eAAe,UAAU,CAAC"}
|