@canonical/webarchitect 0.10.0 → 0.11.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/README.md +1 -0
- package/package.json +17 -15
- package/rulesets/library.ruleset.json +19 -0
- package/rulesets/package.ruleset.json +1 -5
- package/rulesets/tool-ts.ruleset.json +107 -0
- package/rulesets/tool.ruleset.json +19 -0
- package/src/cli.ts +322 -0
- package/src/constants.ts +8 -0
- package/{dist/esm/index.js → src/index.ts} +0 -1
- package/{dist/esm/lib/ajv.js → src/lib/ajv.ts} +47 -24
- package/src/lib/describeSchema.ts +59 -0
- package/src/lib/discoverAllRulesets.ts +18 -0
- package/src/lib/discoverRulesetsInDir.ts +41 -0
- package/src/lib/executeValidationRules.ts +54 -0
- package/{dist/esm/lib/index.js → src/lib/index.ts} +1 -1
- package/{dist/esm/lib/listDirectory.js → src/lib/listDirectory.ts} +12 -10
- package/{dist/esm/lib/loadFullSchema.js → src/lib/loadFullSchema.ts} +16 -12
- package/src/lib/resolveSchema.ts +128 -0
- package/src/lib/validateDirectoryRule.ts +158 -0
- package/src/lib/validateFileRule.ts +105 -0
- package/{dist/esm/lib/validateRule.js → src/lib/validateRule.ts} +18 -11
- package/src/schema.json +61 -0
- package/src/schemas/draft-2020-12.json +58 -0
- package/src/schemas/meta/applicator.json +45 -0
- package/src/schemas/meta/content.json +14 -0
- package/src/schemas/meta/core.json +48 -0
- package/src/schemas/meta/format-annotation.json +11 -0
- package/src/schemas/meta/meta-data.json +34 -0
- package/src/schemas/meta/unevaluated.json +12 -0
- package/src/schemas/meta/validation.json +95 -0
- package/src/types.ts +49 -0
- package/{dist/esm/validate.js → src/validate.ts} +8 -4
- package/dist/esm/cli.js +0 -277
- package/dist/esm/cli.js.map +0 -1
- package/dist/esm/constants.js +0 -3
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/ajv.js.map +0 -1
- package/dist/esm/lib/describeSchema.js +0 -53
- package/dist/esm/lib/describeSchema.js.map +0 -1
- package/dist/esm/lib/discoverAllRulesets.js +0 -13
- package/dist/esm/lib/discoverAllRulesets.js.map +0 -1
- package/dist/esm/lib/discoverRulesetsInDir.js +0 -35
- package/dist/esm/lib/discoverRulesetsInDir.js.map +0 -1
- package/dist/esm/lib/executeValidationRules.js +0 -41
- package/dist/esm/lib/executeValidationRules.js.map +0 -1
- package/dist/esm/lib/index.js.map +0 -1
- package/dist/esm/lib/listDirectory.js.map +0 -1
- package/dist/esm/lib/loadFullSchema.js.map +0 -1
- package/dist/esm/lib/resolveSchema.js +0 -113
- package/dist/esm/lib/resolveSchema.js.map +0 -1
- package/dist/esm/lib/validateDirectoryRule.js +0 -138
- package/dist/esm/lib/validateDirectoryRule.js.map +0 -1
- package/dist/esm/lib/validateFileRule.js +0 -92
- package/dist/esm/lib/validateFileRule.js.map +0 -1
- package/dist/esm/lib/validateRule.js.map +0 -1
- package/dist/esm/schema.json +0 -61
- package/dist/esm/schemas/draft-2020-12.json +0 -57
- package/dist/esm/schemas/meta/applicator.json +0 -44
- package/dist/esm/schemas/meta/content.json +0 -12
- package/dist/esm/schemas/meta/core.json +0 -47
- package/dist/esm/schemas/meta/format-annotation.json +0 -10
- package/dist/esm/schemas/meta/meta-data.json +0 -32
- package/dist/esm/schemas/meta/unevaluated.json +0 -11
- package/dist/esm/schemas/meta/validation.json +0 -94
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/validate.js.map +0 -1
- package/dist/types/cli.d.ts +0 -3
- package/dist/types/cli.d.ts.map +0 -1
- package/dist/types/constants.d.ts +0 -2
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/lib/ajv.d.ts +0 -4
- package/dist/types/lib/ajv.d.ts.map +0 -1
- package/dist/types/lib/describeSchema.d.ts +0 -22
- package/dist/types/lib/describeSchema.d.ts.map +0 -1
- package/dist/types/lib/discoverAllRulesets.d.ts +0 -9
- package/dist/types/lib/discoverAllRulesets.d.ts.map +0 -1
- package/dist/types/lib/discoverRulesetsInDir.d.ts +0 -6
- package/dist/types/lib/discoverRulesetsInDir.d.ts.map +0 -1
- package/dist/types/lib/executeValidationRules.d.ts +0 -22
- package/dist/types/lib/executeValidationRules.d.ts.map +0 -1
- package/dist/types/lib/index.d.ts +0 -15
- package/dist/types/lib/index.d.ts.map +0 -1
- package/dist/types/lib/listDirectory.d.ts +0 -20
- package/dist/types/lib/listDirectory.d.ts.map +0 -1
- package/dist/types/lib/loadFullSchema.d.ts +0 -20
- package/dist/types/lib/loadFullSchema.d.ts.map +0 -1
- package/dist/types/lib/resolveSchema.d.ts +0 -29
- package/dist/types/lib/resolveSchema.d.ts.map +0 -1
- package/dist/types/lib/validateDirectoryRule.d.ts +0 -26
- package/dist/types/lib/validateDirectoryRule.d.ts.map +0 -1
- package/dist/types/lib/validateFileRule.d.ts +0 -29
- package/dist/types/lib/validateFileRule.d.ts.map +0 -1
- package/dist/types/lib/validateRule.d.ts +0 -21
- package/dist/types/lib/validateRule.d.ts.map +0 -1
- package/dist/types/types.d.ts +0 -42
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/validate.d.ts +0 -23
- package/dist/types/validate.d.ts.map +0 -1
package/dist/esm/cli.js
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { discoverAllRulesets } from "./lib/index.js";
|
|
5
|
-
import validate from "./validate.js";
|
|
6
|
-
const program = new Command();
|
|
7
|
-
/**
|
|
8
|
-
* Formats AJV validation errors into human-readable messages.
|
|
9
|
-
* Groups errors by their property path and removes duplicate messages.
|
|
10
|
-
*
|
|
11
|
-
* @param errorsJson - JSON string containing an array of AJV ErrorObject instances
|
|
12
|
-
* @returns Array of formatted error messages, one per property path
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* const errors = '[{"instancePath": "/name", "message": "must be string"}]';
|
|
17
|
-
* const formatted = formatAjvErrors(errors);
|
|
18
|
-
* // Returns: ["name: must be string"]
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
function formatAjvErrors(errorsJson) {
|
|
22
|
-
try {
|
|
23
|
-
const errors = JSON.parse(errorsJson);
|
|
24
|
-
const errorsByPath = new Map();
|
|
25
|
-
for (const error of errors) {
|
|
26
|
-
const path = error.instancePath || "root";
|
|
27
|
-
const message = error.message || "validation failed";
|
|
28
|
-
if (!errorsByPath.has(path)) {
|
|
29
|
-
errorsByPath.set(path, new Set());
|
|
30
|
-
}
|
|
31
|
-
// Use optional chaining for safety
|
|
32
|
-
errorsByPath.get(path)?.add(message);
|
|
33
|
-
}
|
|
34
|
-
return Array.from(errorsByPath.entries()).map(([path, messages]) => {
|
|
35
|
-
const property = path === "root" ? "file" : path.replace("/", "");
|
|
36
|
-
const messageList = Array.from(messages).join(", ");
|
|
37
|
-
return `${property}: ${messageList}`;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
// Fallback if JSON parsing fails
|
|
42
|
-
return [errorsJson];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Formats validation results for terminal output with color coding.
|
|
47
|
-
* Displays failed validations first, followed by passed validations,
|
|
48
|
-
* and ends with a summary. In verbose mode, shows additional context
|
|
49
|
-
* including file contents and validation rules.
|
|
50
|
-
*
|
|
51
|
-
* @param results - Array of validation results to format
|
|
52
|
-
* @param verbose - Whether to show detailed information including file contents and rules
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* ```typescript
|
|
56
|
-
* const results = [
|
|
57
|
-
* { rule: "package.json", passed: true },
|
|
58
|
-
* { rule: "biome.json", passed: false, message: "File not found" }
|
|
59
|
-
* ];
|
|
60
|
-
* formatTerminalOutput(results, true);
|
|
61
|
-
* ```
|
|
62
|
-
*/
|
|
63
|
-
function formatTerminalOutput(results, verbose = false) {
|
|
64
|
-
console.log(); // Empty line for spacing
|
|
65
|
-
const passedResults = results.filter((r) => r.passed);
|
|
66
|
-
const failedResults = results.filter((r) => !r.passed);
|
|
67
|
-
if (failedResults.length > 0) {
|
|
68
|
-
console.log(chalk.red.bold("✗ FAILED VALIDATIONS"));
|
|
69
|
-
console.log(chalk.gray("─".repeat(50)));
|
|
70
|
-
for (const result of failedResults) {
|
|
71
|
-
console.log(chalk.red(`✗ ${result.rule}`));
|
|
72
|
-
if (verbose && result.context) {
|
|
73
|
-
console.log(chalk.gray(` Target: ${result.context.target}`));
|
|
74
|
-
if (result.context.description) {
|
|
75
|
-
console.log(chalk.gray(` Rule: ${result.context.description}`));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (result.message) {
|
|
79
|
-
// Check if message contains JSON (AJV errors)
|
|
80
|
-
if (result.message.includes("Validation failed: [")) {
|
|
81
|
-
const jsonStart = result.message.indexOf("[");
|
|
82
|
-
const prefix = result.message.substring(0, jsonStart).trim();
|
|
83
|
-
const jsonPart = result.message.substring(jsonStart);
|
|
84
|
-
if (prefix) {
|
|
85
|
-
console.log(chalk.gray(` ${prefix}`));
|
|
86
|
-
}
|
|
87
|
-
const formattedErrors = formatAjvErrors(jsonPart);
|
|
88
|
-
for (const error of formattedErrors) {
|
|
89
|
-
console.log(chalk.gray(` • ${error}`));
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
console.log(chalk.gray(` ${result.message}`));
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (verbose &&
|
|
97
|
-
result.context?.value &&
|
|
98
|
-
result.context.value !== "[File not found]") {
|
|
99
|
-
// Use regular string instead of template literal where no interpolation needed
|
|
100
|
-
console.log(chalk.gray(" Found:"));
|
|
101
|
-
if (typeof result.context.value === "object") {
|
|
102
|
-
const preview = JSON.stringify(result.context.value, null, 2)
|
|
103
|
-
.split("\n")
|
|
104
|
-
.slice(0, 10) // Show first 10 lines
|
|
105
|
-
.map((line) => ` ${line}`)
|
|
106
|
-
.join("\n");
|
|
107
|
-
console.log(chalk.gray(preview));
|
|
108
|
-
if (JSON.stringify(result.context.value).split("\n").length > 10) {
|
|
109
|
-
console.log(chalk.gray(" ... (truncated)"));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
console.log(chalk.gray(` ${result.context.value}`));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
console.log(); // Empty line between failures
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (passedResults.length > 0) {
|
|
120
|
-
console.log(chalk.green.bold("✓ PASSED VALIDATIONS"));
|
|
121
|
-
console.log(chalk.gray("─".repeat(50)));
|
|
122
|
-
for (const result of passedResults) {
|
|
123
|
-
console.log(chalk.green(`✓ ${result.rule}`));
|
|
124
|
-
if (verbose && result.context) {
|
|
125
|
-
console.log(chalk.gray(` Target: ${result.context.target}`));
|
|
126
|
-
if (result.context.description) {
|
|
127
|
-
console.log(chalk.gray(` Rule: ${result.context.description}`));
|
|
128
|
-
}
|
|
129
|
-
if (result.context.value && typeof result.context.value === "object") {
|
|
130
|
-
// Use regular string instead of template literal
|
|
131
|
-
console.log(chalk.gray(" Validated content:"));
|
|
132
|
-
const preview = JSON.stringify(result.context.value, null, 2)
|
|
133
|
-
.split("\n")
|
|
134
|
-
.slice(0, 5) // Show fewer lines for passed validations
|
|
135
|
-
.map((line) => ` ${line}`)
|
|
136
|
-
.join("\n");
|
|
137
|
-
console.log(chalk.gray(preview));
|
|
138
|
-
if (JSON.stringify(result.context.value).split("\n").length > 5) {
|
|
139
|
-
console.log(chalk.gray(" ... (content validated successfully)"));
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
console.log();
|
|
145
|
-
}
|
|
146
|
-
// Summary
|
|
147
|
-
const total = results.length;
|
|
148
|
-
const failed = failedResults.length;
|
|
149
|
-
const passed = passedResults.length;
|
|
150
|
-
if (failed > 0) {
|
|
151
|
-
console.log(chalk.red.bold(`Summary: ${failed}/${total} validations failed (${passed} passed)`));
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
console.log(chalk.green.bold(`Summary: All ${total} validations passed`));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Formats validation results as JSON for programmatic consumption.
|
|
159
|
-
* Outputs a structured object with summary statistics and detailed results.
|
|
160
|
-
*
|
|
161
|
-
* @param results - Array of validation results to format
|
|
162
|
-
*
|
|
163
|
-
* @example
|
|
164
|
-
* ```typescript
|
|
165
|
-
* const results = [
|
|
166
|
-
* { rule: "package.json", passed: true },
|
|
167
|
-
* { rule: "biome.json", passed: false, message: "File not found" }
|
|
168
|
-
* ];
|
|
169
|
-
* formatJsonOutput(results);
|
|
170
|
-
* // Outputs: {
|
|
171
|
-
* // "summary": { "total": 2, "passed": 1, "failed": 1 },
|
|
172
|
-
* // "results": [...]
|
|
173
|
-
* // }
|
|
174
|
-
* ```
|
|
175
|
-
*/
|
|
176
|
-
function formatJsonOutput(results) {
|
|
177
|
-
const output = {
|
|
178
|
-
summary: {
|
|
179
|
-
total: results.length,
|
|
180
|
-
passed: results.filter((r) => r.passed).length,
|
|
181
|
-
failed: results.filter((r) => !r.passed).length,
|
|
182
|
-
},
|
|
183
|
-
results: results.map((result) => ({
|
|
184
|
-
rule: result.rule,
|
|
185
|
-
passed: result.passed,
|
|
186
|
-
...(result.message && { message: result.message }),
|
|
187
|
-
})),
|
|
188
|
-
};
|
|
189
|
-
console.log(JSON.stringify(output, null, 2));
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Displays available rulesets in a tree-like format.
|
|
193
|
-
* Groups rulesets by their location (bundled vs current directory).
|
|
194
|
-
*/
|
|
195
|
-
async function displayRulesetTree() {
|
|
196
|
-
const { bundled, local } = await discoverAllRulesets();
|
|
197
|
-
if (bundled.length === 0 && local.length === 0) {
|
|
198
|
-
console.log(chalk.yellow("No rulesets found"));
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
console.log(chalk.bold("\nAvailable Webarchitect Rulesets:"));
|
|
202
|
-
console.log(chalk.gray("─".repeat(50)));
|
|
203
|
-
// Display bundled rulesets
|
|
204
|
-
if (bundled.length > 0) {
|
|
205
|
-
console.log(chalk.cyan("Bundled Rulesets:"));
|
|
206
|
-
console.log(chalk.gray(`└── ${bundled[0].path.replace(/\/[^/]+$/, "")}/`));
|
|
207
|
-
for (let i = 0; i < bundled.length; i++) {
|
|
208
|
-
const isLast = i === bundled.length - 1;
|
|
209
|
-
const prefix = isLast ? "└──" : "├──";
|
|
210
|
-
const filename = `${bundled[i].name}.ruleset.json`;
|
|
211
|
-
console.log(` ${prefix} ${chalk.bold(bundled[i].name)} ${chalk.gray(`(${filename})`)}`);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// Display current directory rulesets
|
|
215
|
-
if (bundled.length > 0)
|
|
216
|
-
console.log(); // Add spacing between sections
|
|
217
|
-
console.log(chalk.green("Current Directory:"));
|
|
218
|
-
console.log(chalk.gray(`└── ${process.cwd()}/`));
|
|
219
|
-
if (local.length > 0) {
|
|
220
|
-
for (let i = 0; i < local.length; i++) {
|
|
221
|
-
const isLast = i === local.length - 1;
|
|
222
|
-
const prefix = isLast ? "└──" : "├──";
|
|
223
|
-
const filename = `${local[i].name}.ruleset.json`;
|
|
224
|
-
console.log(` ${prefix} ${chalk.bold(local[i].name)} ${chalk.gray(`(${filename})`)}`);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
console.log(chalk.gray(` └── (no rulesets found at this path)`));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
program
|
|
232
|
-
.name("webarchitect")
|
|
233
|
-
.argument("[ruleset]", "ruleset identifier, local path, or URL")
|
|
234
|
-
.option("-v, --verbose", "show all validation results")
|
|
235
|
-
.option("--json", "output results in JSON format")
|
|
236
|
-
.option("--list", "list all available rulesets")
|
|
237
|
-
.action(async (schemaArg, options) => {
|
|
238
|
-
// Handle --list option
|
|
239
|
-
if (options.list) {
|
|
240
|
-
await displayRulesetTree();
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
// Require ruleset argument if not listing
|
|
244
|
-
if (!schemaArg) {
|
|
245
|
-
console.error(chalk.red("Error: Missing required argument 'ruleset'"));
|
|
246
|
-
console.error(chalk.gray("Use 'webarchitect --list' to see available rulesets"));
|
|
247
|
-
process.exit(1);
|
|
248
|
-
}
|
|
249
|
-
try {
|
|
250
|
-
const results = await validate(process.cwd(), schemaArg);
|
|
251
|
-
if (options.json) {
|
|
252
|
-
formatJsonOutput(results);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
formatTerminalOutput(results, options.verbose);
|
|
256
|
-
// Exit with error code if any validations failed
|
|
257
|
-
const hasFailures = results.some((r) => !r.passed);
|
|
258
|
-
if (hasFailures) {
|
|
259
|
-
process.exit(1);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
catch (e) {
|
|
264
|
-
if (options.json) {
|
|
265
|
-
console.log(JSON.stringify({
|
|
266
|
-
error: e.message,
|
|
267
|
-
success: false,
|
|
268
|
-
}, null, 2));
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
console.error(chalk.red(`Error: ${e.message}`));
|
|
272
|
-
}
|
|
273
|
-
process.exit(1);
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
program.parse();
|
|
277
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/esm/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B;;;;;;;;;;;;;GAaG;AACH,SAAS,eAAe,CAAC,UAAkB;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAkB,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEpD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC;YAErD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,mCAAmC;YACnC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE;YACjE,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,GAAG,QAAQ,KAAK,WAAW,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;QACjC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,oBAAoB,CAC3B,OAA2B,EAC3B,OAAO,GAAG,KAAK;IAEf,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,yBAAyB;IAExC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE3C,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9D,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,8CAA8C;gBAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAErD,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;oBACzC,CAAC;oBAED,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAClD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,IACE,OAAO;gBACP,MAAM,CAAC,OAAO,EAAE,KAAK;gBACrB,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,kBAAkB,EAC3C,CAAC;gBACD,+EAA+E;gBAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpC,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC1D,KAAK,CAAC,IAAI,CAAC;yBACX,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB;yBACnC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;yBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACjC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;wBACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,8BAA8B;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE7C,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9D,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACnE,CAAC;gBAED,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACrE,iDAAiD;oBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;oBAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC1D,KAAK,CAAC,IAAI,CAAC;yBACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C;yBACtD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;yBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACjC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,UAAU;IACV,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IACpC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAEpC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,YAAY,MAAM,IAAI,KAAK,wBAAwB,MAAM,UAAU,CACpE,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,qBAAqB,CAAC,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,gBAAgB,CAAC,OAA2B;IACnD,MAAM,MAAM,GAAG;QACb,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;YAC9C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;SAChD;QACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;SACnD,CAAC,CAAC;KACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB;IAC/B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAExC,2BAA2B;IAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACtC,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC;YACnD,OAAO,CAAC,GAAG,CACT,OAAO,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,+BAA+B;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACtC,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC;YACjD,OAAO,CAAC,GAAG,CACT,OAAO,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAC5E,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,QAAQ,CAAC,WAAW,EAAE,wCAAwC,CAAC;KAC/D,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;KACtD,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IACnC,uBAAuB;IACvB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,kBAAkB,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAClE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAEzD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAE/C,iDAAiD;YACjD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,KAAK,EAAG,CAAW,CAAC,OAAO;gBAC3B,OAAO,EAAE,KAAK;aACf,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAW,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/esm/constants.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC"}
|
package/dist/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/esm/lib/ajv.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ajv.js","sourceRoot":"","sources":["../../../src/lib/ajv.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,KAAK,CAAC;AAC7B,OAAO,WAAW,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9E,OAAO,cAAc,MAAM,iCAAiC,CAAC;IAC3D,IAAI,EAAE,MAAM;CACb,CAAC;AACF,OAAO,WAAW,MAAM,8BAA8B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7E,OAAO,QAAQ,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACvE,OAAO,oBAAoB,MAAM,wCAAwC,CAAC;IACxE,IAAI,EAAE,MAAM;CACb,CAAC;AACF,OAAO,YAAY,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChF,OAAO,eAAe,MAAM,kCAAkC,CAAC;IAC7D,IAAI,EAAE,MAAM;CACb,CAAC;AACF,OAAO,cAAc,MAAM,iCAAiC,CAAC;IAC3D,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC;AAE/B,oEAAoE;AACpE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,iDAAiD;IAChE,SAAS,EAAE,IAAI,EAAE,wDAAwD;IACzE,cAAc,EAAE,KAAK,EAAE,+DAA+D;CACvF,CAAC,CAAC;AAEH,2DAA2D;AAC3D,8EAA8E;AAC9E,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,iDAAiD,CAAC,CAAC;AAC3E,GAAG,CAAC,SAAS,CACX,cAAc,EACd,uDAAuD,CACxD,CAAC;AACF,GAAG,CAAC,SAAS,CACX,eAAe,EACf,wDAAwD,CACzD,CAAC;AACF,GAAG,CAAC,SAAS,CACX,cAAc,EACd,uDAAuD,CACxD,CAAC;AACF,GAAG,CAAC,SAAS,CACX,YAAY,EACZ,sDAAsD,CACvD,CAAC;AACF,GAAG,CAAC,SAAS,CACX,oBAAoB,EACpB,8DAA8D,CAC/D,CAAC;AACF,GAAG,CAAC,SAAS,CACX,WAAW,EACX,oDAAoD,CACrD,CAAC;AAEF,qDAAqD;AACrD,kFAAkF;AAClF,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;AAC3E,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;AAE1E,uEAAuE;AACvE,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAE/B,sEAAsE;AACtE,0EAA0E;AAC1E,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;AACrD,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC5C,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAC3C,sFAAsF;AACtF,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;IACrB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generates a human-readable description of what a JSON schema validates.
|
|
3
|
-
* Summarizes key constraints like type, required properties, patterns, etc.
|
|
4
|
-
* Used to provide clear feedback about what validation rules are being applied.
|
|
5
|
-
*
|
|
6
|
-
* @param schema - JSON Schema to describe
|
|
7
|
-
* @returns Human-readable description of the schema's validation rules
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const schema = {
|
|
12
|
-
* type: "object",
|
|
13
|
-
* required: ["name", "version"],
|
|
14
|
-
* properties: { name: {}, version: {} }
|
|
15
|
-
* };
|
|
16
|
-
* const desc = describeSchema(schema);
|
|
17
|
-
* // Returns: "must be object, must have properties: name, version, expected properties: name, version"
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export default function describeSchema(schema) {
|
|
21
|
-
const descriptions = [];
|
|
22
|
-
if (schema.type) {
|
|
23
|
-
if (typeof schema.type === "string") {
|
|
24
|
-
descriptions.push(`must be ${schema.type}`);
|
|
25
|
-
}
|
|
26
|
-
else if (Array.isArray(schema.type)) {
|
|
27
|
-
descriptions.push(`must be one of: ${schema.type.join(", ")}`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (schema.const !== undefined) {
|
|
31
|
-
descriptions.push(`must equal "${schema.const}"`);
|
|
32
|
-
}
|
|
33
|
-
if (typeof schema.pattern === "string") {
|
|
34
|
-
descriptions.push(`must match pattern /${schema.pattern}/`);
|
|
35
|
-
}
|
|
36
|
-
if (schema.required && Array.isArray(schema.required)) {
|
|
37
|
-
descriptions.push(`must have properties: ${schema.required.join(", ")}`);
|
|
38
|
-
}
|
|
39
|
-
if (schema.properties && typeof schema.properties === "object") {
|
|
40
|
-
const propNames = Object.keys(schema.properties);
|
|
41
|
-
if (propNames.length <= 3) {
|
|
42
|
-
descriptions.push(`expected properties: ${propNames.join(", ")}`);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
descriptions.push(`validates ${propNames.length} properties`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (descriptions.length === 0) {
|
|
49
|
-
return "validates file content structure";
|
|
50
|
-
}
|
|
51
|
-
return descriptions.join(", ");
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=describeSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"describeSchema.js","sourceRoot":"","sources":["../../../src/lib/describeSchema.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,MAAmB;IACxD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,YAAY,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,YAAY,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,YAAY,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,YAAY,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,MAAM,aAAa,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { BUNDLED_RULESETS_DIR } from "../constants.js";
|
|
2
|
-
import discoverRulesetsInDir from "./discoverRulesetsInDir.js";
|
|
3
|
-
/**
|
|
4
|
-
* Discovers all available rulesets (bundled and local)
|
|
5
|
-
*/
|
|
6
|
-
export default async function discoverAllRulesets() {
|
|
7
|
-
const [bundled, local] = await Promise.all([
|
|
8
|
-
discoverRulesetsInDir(BUNDLED_RULESETS_DIR, "bundled"),
|
|
9
|
-
discoverRulesetsInDir(process.cwd(), "local"),
|
|
10
|
-
]);
|
|
11
|
-
return { bundled, local };
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=discoverAllRulesets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discoverAllRulesets.js","sourceRoot":"","sources":["../../../src/lib/discoverAllRulesets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,mBAAmB;IAI/C,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,qBAAqB,CAAC,oBAAoB,EAAE,SAAS,CAAC;QACtD,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;KAC9C,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
/**
|
|
4
|
-
* Discovers .ruleset.json files in a directory
|
|
5
|
-
*/
|
|
6
|
-
export default async function discoverRulesetsInDir(dir, type) {
|
|
7
|
-
const rulesets = [];
|
|
8
|
-
try {
|
|
9
|
-
const files = await readdir(dir);
|
|
10
|
-
const rulesetFiles = files.filter((f) => f.endsWith(".ruleset.json"));
|
|
11
|
-
for (const file of rulesetFiles) {
|
|
12
|
-
// For local files, try to parse to verify it's valid JSON
|
|
13
|
-
if (type === "local") {
|
|
14
|
-
try {
|
|
15
|
-
const content = await readFile(join(dir, file), "utf-8");
|
|
16
|
-
JSON.parse(content);
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
// Skip files that aren't valid JSON
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
rulesets.push({
|
|
24
|
-
type,
|
|
25
|
-
name: file.replace(".ruleset.json", ""),
|
|
26
|
-
path: join(dir, file),
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// Directory might not exist or be readable
|
|
32
|
-
}
|
|
33
|
-
return rulesets;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=discoverRulesetsInDir.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discoverRulesetsInDir.js","sourceRoot":"","sources":["../../../src/lib/discoverRulesetsInDir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,qBAAqB,CACjD,GAAW,EACX,IAAyB;IAEzB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAEtE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,0DAA0D;YAC1D,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;gBAAC,MAAM,CAAC;oBACP,oCAAoC;oBACpC,SAAS;gBACX,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;gBACvC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import validateRule from "./validateRule.js";
|
|
2
|
-
/**
|
|
3
|
-
* Executes all validation rules defined in a schema against a project.
|
|
4
|
-
* Iterates through each rule in the schema and delegates to validateRule.
|
|
5
|
-
*
|
|
6
|
-
* @param projectPath - Absolute or relative path to the project directory to validate
|
|
7
|
-
* @param schema - Schema object containing validation rules to execute
|
|
8
|
-
* @returns Promise that resolves to an array of validation results
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* const schema = {
|
|
13
|
-
* name: "my-schema",
|
|
14
|
-
* "package-config": {
|
|
15
|
-
* file: { name: "package.json", contains: {...} }
|
|
16
|
-
* }
|
|
17
|
-
* };
|
|
18
|
-
* const results = await executeValidationRules("/path/to/project", schema);
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export default async function executeValidationRules(projectPath, schema) {
|
|
22
|
-
// Filter and map rules to validation promises
|
|
23
|
-
const validationPromises = Object.entries(schema)
|
|
24
|
-
.filter(([ruleName, rule]) => {
|
|
25
|
-
// Skip meta-properties that aren't validation rules
|
|
26
|
-
if (ruleName === "$schema" ||
|
|
27
|
-
ruleName === "name" ||
|
|
28
|
-
ruleName === "extends")
|
|
29
|
-
return false;
|
|
30
|
-
// Type guard to ensure rule is an object with 'file' or 'directory'
|
|
31
|
-
return (typeof rule === "object" &&
|
|
32
|
-
rule !== null &&
|
|
33
|
-
("file" in rule || "directory" in rule));
|
|
34
|
-
})
|
|
35
|
-
.map(([ruleName, rule]) => validateRule(projectPath, rule, ruleName));
|
|
36
|
-
// Execute all validations in parallel
|
|
37
|
-
const nestedResults = await Promise.all(validationPromises);
|
|
38
|
-
// Flatten the results array
|
|
39
|
-
return nestedResults.flat();
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=executeValidationRules.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executeValidationRules.js","sourceRoot":"","sources":["../../../src/lib/executeValidationRules.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,sBAAsB,CAClD,WAAmB,EACnB,MAAc;IAEd,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;QAC3B,oDAAoD;QACpD,IACE,QAAQ,KAAK,SAAS;YACtB,QAAQ,KAAK,MAAM;YACnB,QAAQ,KAAK,SAAS;YAEtB,OAAO,KAAK,CAAC;QAEf,oEAAoE;QACpE,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,CAAC,MAAM,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,CACxC,CAAC;IACJ,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CACxB,YAAY,CAAC,WAAW,EAAE,IAAY,EAAE,QAAQ,CAAC,CAClD,CAAC;IAEJ,sCAAsC;IACtC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAE5D,4BAA4B;IAC5B,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"listDirectory.js","sourceRoot":"","sources":["../../../src/lib/listDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CACzC,IAAY;IAEZ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,OAAO;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loadFullSchema.js","sourceRoot":"","sources":["../../../src/lib/loadFullSchema.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CAC1C,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;YACnC,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QACvD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { BUNDLED_RULESETS_DIR } from "../constants.js";
|
|
4
|
-
import motherSchema from "../schema.json" with { type: "json" };
|
|
5
|
-
import ajv from "./ajv.js";
|
|
6
|
-
import discoverAllRulesets from "./discoverAllRulesets.js";
|
|
7
|
-
const validateSchema = ajv.compile(motherSchema);
|
|
8
|
-
/**
|
|
9
|
-
* Formats AJV validation errors into a human-readable error message.
|
|
10
|
-
* Groups errors by their property path and removes duplicate messages
|
|
11
|
-
* to provide a clear summary of what's wrong with the schema.
|
|
12
|
-
*
|
|
13
|
-
* @param errors - Array of AJV ErrorObject instances
|
|
14
|
-
* @returns Formatted error message with grouped validation failures
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const errors = [
|
|
19
|
-
* { instancePath: "/name", message: "must be string" },
|
|
20
|
-
* { instancePath: "/extends", message: "must be array" }
|
|
21
|
-
* ];
|
|
22
|
-
* const message = formatValidationErrors(errors);
|
|
23
|
-
* // Returns: "Schema validation failed:\n name: must be string\n extends: must be array"
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
function formatValidationErrors(errors) {
|
|
27
|
-
// Group errors by property path
|
|
28
|
-
const errorsByPath = new Map();
|
|
29
|
-
for (const error of errors) {
|
|
30
|
-
const path = error.instancePath || "/";
|
|
31
|
-
const message = error.message || "validation failed";
|
|
32
|
-
if (!errorsByPath.has(path)) {
|
|
33
|
-
errorsByPath.set(path, []);
|
|
34
|
-
}
|
|
35
|
-
// Safe access using optional chaining
|
|
36
|
-
errorsByPath.get(path)?.push(message);
|
|
37
|
-
}
|
|
38
|
-
// Format as readable list
|
|
39
|
-
const formattedErrors = Array.from(errorsByPath.entries())
|
|
40
|
-
.map(([path, messages]) => {
|
|
41
|
-
const uniqueMessages = [...new Set(messages)]; // Remove duplicates
|
|
42
|
-
const property = path === "/" ? "root" : path.replace("/", "");
|
|
43
|
-
return ` ${property}: ${uniqueMessages.join(", ")}`;
|
|
44
|
-
})
|
|
45
|
-
.join("\n");
|
|
46
|
-
return `Schema validation failed:\n${formattedErrors}`;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Resolves a schema identifier to a loaded and validated schema object.
|
|
50
|
-
* Supports three resolution methods:
|
|
51
|
-
* 1. Remote URLs (http:// or https://) - fetches schema from the web
|
|
52
|
-
* 2. Local files - looks for .json files in current directory
|
|
53
|
-
* 3. Built-in rulesets - checks bundled rulesets directory
|
|
54
|
-
*
|
|
55
|
-
* The loaded schema is validated against the mother schema to ensure
|
|
56
|
-
* it conforms to the expected structure.
|
|
57
|
-
*
|
|
58
|
-
* @param schemaArg - Schema identifier: URL, file path, or built-in name
|
|
59
|
-
* @returns Promise that resolves to the validated schema object
|
|
60
|
-
* @throws Will throw an error if schema cannot be found or is invalid
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* // Load built-in ruleset
|
|
65
|
-
* const schema1 = await resolveSchema("base-package");
|
|
66
|
-
*
|
|
67
|
-
* // Load from local file
|
|
68
|
-
* const schema2 = await resolveSchema("./my-rules.json");
|
|
69
|
-
*
|
|
70
|
-
* // Load from URL
|
|
71
|
-
* const schema3 = await resolveSchema("https://example.com/schema.json");
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
export default async function resolveSchema(schemaArg) {
|
|
75
|
-
let schemaData;
|
|
76
|
-
let schemaSource;
|
|
77
|
-
if (schemaArg.startsWith("http://") || schemaArg.startsWith("https://")) {
|
|
78
|
-
schemaSource = schemaArg;
|
|
79
|
-
const response = await fetch(schemaArg);
|
|
80
|
-
schemaData = (await response.json());
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
let schemaPath = schemaArg;
|
|
84
|
-
if (!schemaPath.endsWith(".ruleset.json") &&
|
|
85
|
-
!schemaPath.endsWith(".json")) {
|
|
86
|
-
schemaPath += ".ruleset.json";
|
|
87
|
-
}
|
|
88
|
-
try {
|
|
89
|
-
schemaSource = schemaPath;
|
|
90
|
-
schemaData = JSON.parse(await readFile(schemaPath, "utf-8"));
|
|
91
|
-
}
|
|
92
|
-
catch (_e) {
|
|
93
|
-
const bundledPath = join(BUNDLED_RULESETS_DIR, schemaPath);
|
|
94
|
-
try {
|
|
95
|
-
schemaSource = bundledPath;
|
|
96
|
-
schemaData = JSON.parse(await readFile(bundledPath, "utf-8"));
|
|
97
|
-
}
|
|
98
|
-
catch (_bundledError) {
|
|
99
|
-
const { bundled } = await discoverAllRulesets();
|
|
100
|
-
const availableNames = bundled.map((r) => r.name).join(", ");
|
|
101
|
-
throw new Error(`Could not find ruleset: '${schemaArg}'. Checked local path '${schemaPath}' and bundled path '${bundledPath}'. Available bundled rulesets: ${availableNames}`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Log where the ruleset was successfully loaded from
|
|
106
|
-
console.log(`Loaded ruleset from: ${schemaSource}`);
|
|
107
|
-
if (!validateSchema(schemaData)) {
|
|
108
|
-
const errorMessage = formatValidationErrors(validateSchema.errors || []);
|
|
109
|
-
throw new Error(`Invalid ruleset from ${schemaSource}:\n${errorMessage}`);
|
|
110
|
-
}
|
|
111
|
-
return schemaData;
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=resolveSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSchema.js","sourceRoot":"","sources":["../../../src/lib/resolveSchema.ts"],"names":[],"mappings":"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"}
|