@potential-guide/check-environment 0.0.0-stage → 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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +213 -2
  3. package/dist/bundles/directories/resources/check.json +19 -0
  4. package/dist/bundles/directories/resources/references/en/check.md +18 -0
  5. package/dist/bundles/directories/resources/references/en/problems/directory-unusable.md +10 -0
  6. package/dist/bundles/directories/resources/references/en/problems/not-directory.md +7 -0
  7. package/dist/bundles/directories/schemas/0.json +51 -0
  8. package/dist/bundles/directories/schemas/1.json +74 -0
  9. package/dist/bundles/directories/schemas/2.json +4 -0
  10. package/dist/bundles/directories/task.yaml +22 -0
  11. package/dist/bundles/directories/worker.cjs +4 -0
  12. package/dist/bundles/directories.car +0 -0
  13. package/dist/bundles/network/resources/check.json +21 -0
  14. package/dist/bundles/network/resources/references/en/check.md +21 -0
  15. package/dist/bundles/network/resources/references/en/problems/dns-unavailable.md +8 -0
  16. package/dist/bundles/network/resources/references/en/problems/http-status.md +9 -0
  17. package/dist/bundles/network/resources/references/en/problems/http-unavailable.md +9 -0
  18. package/dist/bundles/network/schemas/0.json +76 -0
  19. package/dist/bundles/network/schemas/1.json +78 -0
  20. package/dist/bundles/network/schemas/2.json +4 -0
  21. package/dist/bundles/network/task.yaml +23 -0
  22. package/dist/bundles/network/worker.cjs +2 -0
  23. package/dist/bundles/network.car +0 -0
  24. package/dist/bundles/references.json +17 -0
  25. package/dist/bundles/tools/resources/check.json +23 -0
  26. package/dist/bundles/tools/resources/references/en/check.md +21 -0
  27. package/dist/bundles/tools/resources/references/en/problems/tool-missing.md +8 -0
  28. package/dist/bundles/tools/resources/references/en/problems/tool-unusable.md +9 -0
  29. package/dist/bundles/tools/resources/references/en/problems/tool-version.md +8 -0
  30. package/dist/bundles/tools/resources/references/en/problems/version-unparseable.md +8 -0
  31. package/dist/bundles/tools/schemas/0.json +50 -0
  32. package/dist/bundles/tools/schemas/1.json +82 -0
  33. package/dist/bundles/tools/schemas/2.json +4 -0
  34. package/dist/bundles/tools/task.yaml +24 -0
  35. package/dist/bundles/tools/worker.cjs +2 -0
  36. package/dist/bundles/tools.car +0 -0
  37. package/dist/command.d.ts +8 -0
  38. package/dist/command.d.ts.map +1 -0
  39. package/dist/command.js +105 -0
  40. package/dist/command.js.map +1 -0
  41. package/dist/contracts.d.ts +36 -0
  42. package/dist/contracts.d.ts.map +1 -0
  43. package/dist/contracts.js +14 -0
  44. package/dist/contracts.js.map +1 -0
  45. package/dist/definitions/directories.d.ts +1 -0
  46. package/dist/definitions/directories.js +1 -0
  47. package/dist/definitions/network.d.ts +1 -0
  48. package/dist/definitions/network.js +1 -0
  49. package/dist/definitions/tools.d.ts +1 -0
  50. package/dist/definitions/tools.js +1 -0
  51. package/dist/directories.d.ts +16 -0
  52. package/dist/directories.d.ts.map +1 -0
  53. package/dist/directories.js +65 -0
  54. package/dist/directories.js.map +1 -0
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +4 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/network.d.ts +18 -0
  60. package/dist/network.d.ts.map +1 -0
  61. package/dist/network.js +79 -0
  62. package/dist/network.js.map +1 -0
  63. package/dist/result.d.ts +20 -0
  64. package/dist/result.d.ts.map +1 -0
  65. package/dist/result.js +23 -0
  66. package/dist/result.js.map +1 -0
  67. package/dist/tasks/directories/contract.d.ts +21 -0
  68. package/dist/tasks/directories/contract.d.ts.map +1 -0
  69. package/dist/tasks/directories/contract.js +11 -0
  70. package/dist/tasks/directories/contract.js.map +1 -0
  71. package/dist/tasks/directories/main.d.ts +2 -0
  72. package/dist/tasks/directories/main.d.ts.map +1 -0
  73. package/dist/tasks/directories/main.js +7 -0
  74. package/dist/tasks/directories/main.js.map +1 -0
  75. package/dist/tasks/inputs.d.ts +6 -0
  76. package/dist/tasks/inputs.d.ts.map +1 -0
  77. package/dist/tasks/inputs.js +5 -0
  78. package/dist/tasks/inputs.js.map +1 -0
  79. package/dist/tasks/network/contract.d.ts +24 -0
  80. package/dist/tasks/network/contract.d.ts.map +1 -0
  81. package/dist/tasks/network/contract.js +25 -0
  82. package/dist/tasks/network/contract.js.map +1 -0
  83. package/dist/tasks/network/main.d.ts +2 -0
  84. package/dist/tasks/network/main.d.ts.map +1 -0
  85. package/dist/tasks/network/main.js +7 -0
  86. package/dist/tasks/network/main.js.map +1 -0
  87. package/dist/tasks/tools/contract.d.ts +23 -0
  88. package/dist/tasks/tools/contract.d.ts.map +1 -0
  89. package/dist/tasks/tools/contract.js +13 -0
  90. package/dist/tasks/tools/contract.js.map +1 -0
  91. package/dist/tasks/tools/main.d.ts +2 -0
  92. package/dist/tasks/tools/main.d.ts.map +1 -0
  93. package/dist/tasks/tools/main.js +7 -0
  94. package/dist/tasks/tools/main.js.map +1 -0
  95. package/dist/tools.d.ts +19 -0
  96. package/dist/tools.d.ts.map +1 -0
  97. package/dist/tools.js +49 -0
  98. package/dist/tools.js.map +1 -0
  99. package/package.json +50 -3
@@ -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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"}
@@ -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,4 @@
1
+ export { checkDirectories, probeDirectoryWrite } from "./directories.js";
2
+ export { checkNetwork } from "./network.js";
3
+ export { checkTools, compareVersions, parseToolVersion } from "./tools.js";
4
+ //# sourceMappingURL=index.js.map
@@ -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"}
@@ -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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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -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"}
@@ -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"}