@vertaaux/cli 0.2.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 (198) hide show
  1. package/README.md +345 -0
  2. package/dist/auth/ci-token.d.ts +49 -0
  3. package/dist/auth/ci-token.d.ts.map +1 -0
  4. package/dist/auth/ci-token.js +83 -0
  5. package/dist/auth/device-flow.d.ts +66 -0
  6. package/dist/auth/device-flow.d.ts.map +1 -0
  7. package/dist/auth/device-flow.js +156 -0
  8. package/dist/auth/token-store.d.ts +53 -0
  9. package/dist/auth/token-store.d.ts.map +1 -0
  10. package/dist/auth/token-store.js +78 -0
  11. package/dist/baseline/diff.d.ts +57 -0
  12. package/dist/baseline/diff.d.ts.map +1 -0
  13. package/dist/baseline/diff.js +152 -0
  14. package/dist/baseline/hash.d.ts +54 -0
  15. package/dist/baseline/hash.d.ts.map +1 -0
  16. package/dist/baseline/hash.js +66 -0
  17. package/dist/baseline/manager.d.ts +89 -0
  18. package/dist/baseline/manager.d.ts.map +1 -0
  19. package/dist/baseline/manager.js +157 -0
  20. package/dist/cache/index.d.ts +8 -0
  21. package/dist/cache/index.d.ts.map +1 -0
  22. package/dist/cache/index.js +7 -0
  23. package/dist/cache/route-cache.d.ts +119 -0
  24. package/dist/cache/route-cache.d.ts.map +1 -0
  25. package/dist/cache/route-cache.js +213 -0
  26. package/dist/ci/changed-routes.d.ts +95 -0
  27. package/dist/ci/changed-routes.d.ts.map +1 -0
  28. package/dist/ci/changed-routes.js +304 -0
  29. package/dist/ci/github-api.d.ts +68 -0
  30. package/dist/ci/github-api.d.ts.map +1 -0
  31. package/dist/ci/github-api.js +138 -0
  32. package/dist/ci/gitlab-api.d.ts +75 -0
  33. package/dist/ci/gitlab-api.d.ts.map +1 -0
  34. package/dist/ci/gitlab-api.js +180 -0
  35. package/dist/ci/index.d.ts +6 -0
  36. package/dist/ci/index.d.ts.map +1 -0
  37. package/dist/ci/index.js +4 -0
  38. package/dist/commands/audit.d.ts +58 -0
  39. package/dist/commands/audit.d.ts.map +1 -0
  40. package/dist/commands/audit.js +862 -0
  41. package/dist/commands/baseline.d.ts +22 -0
  42. package/dist/commands/baseline.d.ts.map +1 -0
  43. package/dist/commands/baseline.js +210 -0
  44. package/dist/commands/comment.d.ts +14 -0
  45. package/dist/commands/comment.d.ts.map +1 -0
  46. package/dist/commands/comment.js +363 -0
  47. package/dist/commands/diff.d.ts +24 -0
  48. package/dist/commands/diff.d.ts.map +1 -0
  49. package/dist/commands/diff.js +196 -0
  50. package/dist/commands/doctor.d.ts +58 -0
  51. package/dist/commands/doctor.d.ts.map +1 -0
  52. package/dist/commands/doctor.js +338 -0
  53. package/dist/commands/download.d.ts +12 -0
  54. package/dist/commands/download.d.ts.map +1 -0
  55. package/dist/commands/download.js +183 -0
  56. package/dist/commands/explain.d.ts +62 -0
  57. package/dist/commands/explain.d.ts.map +1 -0
  58. package/dist/commands/explain.js +302 -0
  59. package/dist/commands/init.d.ts +12 -0
  60. package/dist/commands/init.d.ts.map +1 -0
  61. package/dist/commands/init.js +212 -0
  62. package/dist/commands/login.d.ts +14 -0
  63. package/dist/commands/login.d.ts.map +1 -0
  64. package/dist/commands/login.js +222 -0
  65. package/dist/commands/policy.d.ts +13 -0
  66. package/dist/commands/policy.d.ts.map +1 -0
  67. package/dist/commands/policy.js +347 -0
  68. package/dist/commands/upload.d.ts +12 -0
  69. package/dist/commands/upload.d.ts.map +1 -0
  70. package/dist/commands/upload.js +158 -0
  71. package/dist/config/defaults.d.ts +21 -0
  72. package/dist/config/defaults.d.ts.map +1 -0
  73. package/dist/config/defaults.js +49 -0
  74. package/dist/config/loader.d.ts +66 -0
  75. package/dist/config/loader.d.ts.map +1 -0
  76. package/dist/config/loader.js +167 -0
  77. package/dist/config/schema.d.ts +55 -0
  78. package/dist/config/schema.d.ts.map +1 -0
  79. package/dist/config/schema.js +6 -0
  80. package/dist/index.d.ts +9 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +1090 -0
  83. package/dist/interactive/fix-wizard.d.ts +44 -0
  84. package/dist/interactive/fix-wizard.d.ts.map +1 -0
  85. package/dist/interactive/fix-wizard.js +286 -0
  86. package/dist/interactive/init-wizard.d.ts +32 -0
  87. package/dist/interactive/init-wizard.d.ts.map +1 -0
  88. package/dist/interactive/init-wizard.js +193 -0
  89. package/dist/interactive/prompts.d.ts +62 -0
  90. package/dist/interactive/prompts.d.ts.map +1 -0
  91. package/dist/interactive/prompts.js +78 -0
  92. package/dist/monorepo/detector.d.ts +70 -0
  93. package/dist/monorepo/detector.d.ts.map +1 -0
  94. package/dist/monorepo/detector.js +278 -0
  95. package/dist/monorepo/index.d.ts +9 -0
  96. package/dist/monorepo/index.d.ts.map +1 -0
  97. package/dist/monorepo/index.js +8 -0
  98. package/dist/monorepo/workspace.d.ts +142 -0
  99. package/dist/monorepo/workspace.d.ts.map +1 -0
  100. package/dist/monorepo/workspace.js +171 -0
  101. package/dist/output/envelope.d.ts +21 -0
  102. package/dist/output/envelope.d.ts.map +1 -0
  103. package/dist/output/envelope.js +27 -0
  104. package/dist/output/factory.d.ts +73 -0
  105. package/dist/output/factory.d.ts.map +1 -0
  106. package/dist/output/factory.js +60 -0
  107. package/dist/output/formats.d.ts +11 -0
  108. package/dist/output/formats.d.ts.map +1 -0
  109. package/dist/output/formats.js +41 -0
  110. package/dist/output/html.d.ts +45 -0
  111. package/dist/output/html.d.ts.map +1 -0
  112. package/dist/output/html.js +607 -0
  113. package/dist/output/human.d.ts +41 -0
  114. package/dist/output/human.d.ts.map +1 -0
  115. package/dist/output/human.js +274 -0
  116. package/dist/output/json.d.ts +42 -0
  117. package/dist/output/json.d.ts.map +1 -0
  118. package/dist/output/json.js +37 -0
  119. package/dist/output/junit.d.ts +56 -0
  120. package/dist/output/junit.d.ts.map +1 -0
  121. package/dist/output/junit.js +135 -0
  122. package/dist/output/markdown.d.ts +77 -0
  123. package/dist/output/markdown.d.ts.map +1 -0
  124. package/dist/output/markdown.js +411 -0
  125. package/dist/output/sarif.d.ts +160 -0
  126. package/dist/output/sarif.d.ts.map +1 -0
  127. package/dist/output/sarif.js +207 -0
  128. package/dist/policy/evaluator.d.ts +111 -0
  129. package/dist/policy/evaluator.d.ts.map +1 -0
  130. package/dist/policy/evaluator.js +362 -0
  131. package/dist/policy/index.d.ts +15 -0
  132. package/dist/policy/index.d.ts.map +1 -0
  133. package/dist/policy/index.js +11 -0
  134. package/dist/policy/loader.d.ts +97 -0
  135. package/dist/policy/loader.d.ts.map +1 -0
  136. package/dist/policy/loader.js +281 -0
  137. package/dist/policy/schema.d.ts +297 -0
  138. package/dist/policy/schema.d.ts.map +1 -0
  139. package/dist/policy/schema.js +230 -0
  140. package/dist/quality-gate/evaluator.d.ts +58 -0
  141. package/dist/quality-gate/evaluator.d.ts.map +1 -0
  142. package/dist/quality-gate/evaluator.js +274 -0
  143. package/dist/quality-gate/index.d.ts +10 -0
  144. package/dist/quality-gate/index.d.ts.map +1 -0
  145. package/dist/quality-gate/index.js +7 -0
  146. package/dist/quality-gate/types.d.ts +103 -0
  147. package/dist/quality-gate/types.d.ts.map +1 -0
  148. package/dist/quality-gate/types.js +23 -0
  149. package/dist/templates/azure-devops.d.ts +25 -0
  150. package/dist/templates/azure-devops.d.ts.map +1 -0
  151. package/dist/templates/azure-devops.js +109 -0
  152. package/dist/templates/circleci.d.ts +28 -0
  153. package/dist/templates/circleci.d.ts.map +1 -0
  154. package/dist/templates/circleci.js +86 -0
  155. package/dist/templates/github-actions.d.ts +81 -0
  156. package/dist/templates/github-actions.d.ts.map +1 -0
  157. package/dist/templates/github-actions.js +393 -0
  158. package/dist/templates/gitlab-ci.d.ts +26 -0
  159. package/dist/templates/gitlab-ci.d.ts.map +1 -0
  160. package/dist/templates/gitlab-ci.js +70 -0
  161. package/dist/templates/index.d.ts +72 -0
  162. package/dist/templates/index.d.ts.map +1 -0
  163. package/dist/templates/index.js +112 -0
  164. package/dist/templates/jenkins.d.ts +26 -0
  165. package/dist/templates/jenkins.d.ts.map +1 -0
  166. package/dist/templates/jenkins.js +110 -0
  167. package/dist/ui/banner.d.ts +31 -0
  168. package/dist/ui/banner.d.ts.map +1 -0
  169. package/dist/ui/banner.js +84 -0
  170. package/dist/ui/diagnostics.d.ts +39 -0
  171. package/dist/ui/diagnostics.d.ts.map +1 -0
  172. package/dist/ui/diagnostics.js +153 -0
  173. package/dist/ui/spinner.d.ts +61 -0
  174. package/dist/ui/spinner.d.ts.map +1 -0
  175. package/dist/ui/spinner.js +101 -0
  176. package/dist/ui/table.d.ts +63 -0
  177. package/dist/ui/table.d.ts.map +1 -0
  178. package/dist/ui/table.js +236 -0
  179. package/dist/utils/client.d.ts +82 -0
  180. package/dist/utils/client.d.ts.map +1 -0
  181. package/dist/utils/client.js +128 -0
  182. package/dist/utils/detect-env.d.ts +59 -0
  183. package/dist/utils/detect-env.d.ts.map +1 -0
  184. package/dist/utils/detect-env.js +115 -0
  185. package/dist/utils/exit-codes.d.ts +47 -0
  186. package/dist/utils/exit-codes.d.ts.map +1 -0
  187. package/dist/utils/exit-codes.js +61 -0
  188. package/dist/utils/logger.d.ts +87 -0
  189. package/dist/utils/logger.d.ts.map +1 -0
  190. package/dist/utils/logger.js +185 -0
  191. package/dist/utils/sanitize.d.ts +36 -0
  192. package/dist/utils/sanitize.d.ts.map +1 -0
  193. package/dist/utils/sanitize.js +64 -0
  194. package/dist/utils/validators.d.ts +41 -0
  195. package/dist/utils/validators.d.ts.map +1 -0
  196. package/dist/utils/validators.js +123 -0
  197. package/package.json +63 -0
  198. package/schemas/vertaaux.config.schema.json +103 -0
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Configuration loader using cosmiconfig with Ajv validation.
3
+ *
4
+ * Searches for configuration in multiple formats:
5
+ * - .vertaaux.yml / .vertaaux.yaml
6
+ * - .vertaaux.json
7
+ * - vertaaux.config.js / vertaaux.config.mjs
8
+ * - package.json (vertaaux key)
9
+ *
10
+ * Validates against JSON Schema and merges with defaults.
11
+ */
12
+ import { cosmiconfig } from "cosmiconfig";
13
+ import Ajv from "ajv";
14
+ import addFormats from "ajv-formats";
15
+ import { createRequire } from "module";
16
+ import { mergeWithDefaults } from "./defaults.js";
17
+ // Import JSON schema (using createRequire for JSON imports in ESM)
18
+ const require = createRequire(import.meta.url);
19
+ let configSchema;
20
+ try {
21
+ configSchema = require("../../schemas/vertaaux.config.schema.json");
22
+ }
23
+ catch {
24
+ throw new Error("Schema files not found. The CLI package may be corrupted or incompletely installed.\n" +
25
+ "Try reinstalling: npm install -g @vertaaux/cli");
26
+ }
27
+ /**
28
+ * Error thrown when config validation fails.
29
+ */
30
+ export class ConfigValidationError extends Error {
31
+ errors;
32
+ constructor(errors, filePath) {
33
+ const errorMessages = errors
34
+ ?.map((e) => ` - ${e.instancePath || "config"}: ${e.message}`)
35
+ .join("\n");
36
+ super(`Invalid VertaaUX configuration${filePath ? ` in ${filePath}` : ""}:\n${errorMessages}`);
37
+ this.errors = errors;
38
+ this.name = "ConfigValidationError";
39
+ }
40
+ }
41
+ /**
42
+ * Error thrown when config file cannot be loaded.
43
+ */
44
+ export class ConfigLoadError extends Error {
45
+ cause;
46
+ constructor(message, cause) {
47
+ super(message);
48
+ this.cause = cause;
49
+ this.name = "ConfigLoadError";
50
+ }
51
+ }
52
+ // Create cosmiconfig explorer
53
+ const explorer = cosmiconfig("vertaaux", {
54
+ searchPlaces: [
55
+ ".vertaaux.yml",
56
+ ".vertaaux.yaml",
57
+ ".vertaaux.json",
58
+ "vertaaux.config.js",
59
+ "vertaaux.config.mjs",
60
+ "vertaaux.config.cjs",
61
+ "package.json",
62
+ ],
63
+ });
64
+ // Create Ajv validator instance (Ajv 8 exports class directly in ESM)
65
+ const ajv = new Ajv({ strict: false, allErrors: true });
66
+ addFormats(ajv);
67
+ const validateConfig = ajv.compile(configSchema);
68
+ /**
69
+ * Load configuration from file and environment.
70
+ *
71
+ * Searches for config file starting from current working directory
72
+ * and walking up the directory tree.
73
+ *
74
+ * @param searchFrom - Directory to start search from (defaults to cwd)
75
+ * @returns Merged configuration with defaults
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const config = await loadConfig();
80
+ * console.log(config.mode); // 'basic' (default or from config)
81
+ * ```
82
+ */
83
+ export async function loadConfig(searchFrom) {
84
+ let fileConfig = {};
85
+ let configFilePath;
86
+ try {
87
+ const result = await explorer.search(searchFrom);
88
+ if (result && !result.isEmpty) {
89
+ fileConfig = result.config;
90
+ configFilePath = result.filepath;
91
+ // Validate against schema
92
+ if (!validateConfig(fileConfig)) {
93
+ throw new ConfigValidationError(validateConfig.errors, configFilePath);
94
+ }
95
+ }
96
+ }
97
+ catch (error) {
98
+ // Re-throw validation errors
99
+ if (error instanceof ConfigValidationError) {
100
+ throw error;
101
+ }
102
+ // Wrap other errors
103
+ throw new ConfigLoadError(`Failed to load config: ${error instanceof Error ? error.message : String(error)}`, error);
104
+ }
105
+ // Merge with defaults
106
+ const mergedConfig = mergeWithDefaults(fileConfig);
107
+ // Environment variable overrides
108
+ if (process.env.VERTAAUX_API_KEY && !mergedConfig.apiKey) {
109
+ mergedConfig.apiKey = process.env.VERTAAUX_API_KEY;
110
+ }
111
+ return mergedConfig;
112
+ }
113
+ /**
114
+ * Load configuration from a specific file path.
115
+ *
116
+ * @param filePath - Path to config file
117
+ * @returns Merged configuration with defaults
118
+ */
119
+ export async function loadConfigFile(filePath) {
120
+ try {
121
+ const result = await explorer.load(filePath);
122
+ if (!result || result.isEmpty) {
123
+ throw new ConfigLoadError(`Config file is empty: ${filePath}`);
124
+ }
125
+ const fileConfig = result.config;
126
+ // Validate against schema
127
+ if (!validateConfig(fileConfig)) {
128
+ throw new ConfigValidationError(validateConfig.errors, filePath);
129
+ }
130
+ return mergeWithDefaults(fileConfig);
131
+ }
132
+ catch (error) {
133
+ if (error instanceof ConfigValidationError ||
134
+ error instanceof ConfigLoadError) {
135
+ throw error;
136
+ }
137
+ throw new ConfigLoadError(`Failed to load config from ${filePath}: ${error instanceof Error ? error.message : String(error)}`, error);
138
+ }
139
+ }
140
+ /**
141
+ * Resolve configuration from explicit path or auto-detection.
142
+ *
143
+ * If an explicit path is provided, loads that file directly.
144
+ * Otherwise, falls back to cosmiconfig auto-detection.
145
+ *
146
+ * @param explicitPath - Optional explicit config file path (from --config flag)
147
+ * @returns Merged configuration with defaults
148
+ */
149
+ export async function resolveConfig(explicitPath) {
150
+ if (explicitPath) {
151
+ const { existsSync } = await import("fs");
152
+ const pathMod = await import("path");
153
+ const resolvedPath = pathMod.resolve(process.cwd(), explicitPath);
154
+ if (!existsSync(resolvedPath)) {
155
+ throw new ConfigLoadError(`Config file not found: ${explicitPath}`);
156
+ }
157
+ return loadConfigFile(resolvedPath);
158
+ }
159
+ return loadConfig();
160
+ }
161
+ /**
162
+ * Clear the config cache.
163
+ * Useful for testing or when config files change.
164
+ */
165
+ export function clearConfigCache() {
166
+ explorer.clearCaches();
167
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * TypeScript interface matching the JSON Schema for VertaaUX config.
3
+ *
4
+ * @see ../../../schemas/vertaaux.config.schema.json
5
+ */
6
+ export type AuditMode = "basic" | "standard" | "deep";
7
+ export type OutputFormat = "auto" | "json" | "sarif" | "junit" | "html" | "human";
8
+ export type GroupBy = "severity" | "category" | "route";
9
+ export type FailOnSeverity = "error" | "warning" | "info";
10
+ export type CITemplate = "github" | "gitlab" | "circleci" | "azure" | "jenkins" | "none";
11
+ export interface OutputConfig {
12
+ /** Output format. 'auto' detects based on environment. */
13
+ format?: OutputFormat;
14
+ /** How to group issues in output */
15
+ groupBy?: GroupBy;
16
+ }
17
+ export interface BaselineConfig {
18
+ /** Path to baseline file */
19
+ path?: string;
20
+ /** Automatically update baseline with fixed issues */
21
+ autoUpdate?: boolean;
22
+ }
23
+ export interface CIConfig {
24
+ /** CI template for output formatting */
25
+ template?: CITemplate;
26
+ }
27
+ /**
28
+ * VertaaUX CLI configuration.
29
+ * Can be loaded from .vertaaux.yml, .vertaaux.json, or package.json.
30
+ */
31
+ export interface VertaauxConfig {
32
+ /** JSON Schema reference for editor autocompletion */
33
+ $schema?: string;
34
+ /** API key for authentication (prefer env var) */
35
+ apiKey?: string;
36
+ /** Default URL to audit when none provided */
37
+ defaultUrl?: string;
38
+ /** Audit depth: basic, standard, or deep */
39
+ mode?: AuditMode;
40
+ /** Output configuration */
41
+ output?: OutputConfig;
42
+ /** Minimum passing score (0-100) */
43
+ threshold?: number;
44
+ /** Fail if issues at or above this severity */
45
+ failOn?: FailOnSeverity;
46
+ /** Baseline configuration */
47
+ baseline?: BaselineConfig;
48
+ /** CI-specific configuration */
49
+ ci?: CIConfig;
50
+ /** Audit timeout in milliseconds */
51
+ timeout?: number;
52
+ /** Poll interval in milliseconds */
53
+ interval?: number;
54
+ }
55
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAClF,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,gCAAgC;IAChC,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * TypeScript interface matching the JSON Schema for VertaaUX config.
3
+ *
4
+ * @see ../../../schemas/vertaaux.config.schema.json
5
+ */
6
+ export {};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VertaaUX CLI - UX audits, accessibility checks, and CI gating.
4
+ *
5
+ * Refactored to use Commander.js for command parsing with config file support.
6
+ * Maintains backward compatibility with existing command syntax.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}