@eventcatalog/linter 0.1.0 → 1.0.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 +49 -17
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +58 -6
- package/dist/config/index.js.map +1 -1
- package/dist/validators/best-practices-validator.d.ts.map +1 -1
- package/dist/validators/best-practices-validator.js +30 -3
- package/dist/validators/best-practices-validator.js.map +1 -1
- package/dist/validators/index.d.ts +2 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +13 -3
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/reference-validator.d.ts +6 -2
- package/dist/validators/reference-validator.d.ts.map +1 -1
- package/dist/validators/reference-validator.js +249 -4
- package/dist/validators/reference-validator.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -207,23 +207,32 @@ module.exports = {
|
|
|
207
207
|
|
|
208
208
|
### Available Rules
|
|
209
209
|
|
|
210
|
-
| Rule Name
|
|
211
|
-
|
|
|
212
|
-
| **Schema Validation Rules**
|
|
213
|
-
| `schema/required-fields`
|
|
214
|
-
| `schema/valid-type`
|
|
215
|
-
| `schema/valid-semver`
|
|
216
|
-
| `schema/valid-email`
|
|
217
|
-
| `schema/validation-error`
|
|
218
|
-
| **Reference Validation Rules**
|
|
219
|
-
| `refs/owner-exists`
|
|
220
|
-
| `refs/valid-version-range`
|
|
221
|
-
| `refs/resource-exists`
|
|
222
|
-
|
|
|
223
|
-
| `
|
|
224
|
-
| `
|
|
225
|
-
|
|
226
|
-
|
|
210
|
+
| Rule Name | Description | Accepted Values | Default |
|
|
211
|
+
| ------------------------------------- | ----------------------------------------------------------------- | ---------------------- | ------- |
|
|
212
|
+
| **Schema Validation Rules** |
|
|
213
|
+
| `schema/required-fields` | Validates that required fields are present in frontmatter | `error`, `warn`, `off` | `error` |
|
|
214
|
+
| `schema/valid-type` | Validates that field types are correct (strings, arrays, objects) | `error`, `warn`, `off` | `error` |
|
|
215
|
+
| `schema/valid-semver` | Validates semantic version format (1.0.0, 2.1.3-beta) | `error`, `warn`, `off` | `error` |
|
|
216
|
+
| `schema/valid-email` | Validates email address format in user frontmatter | `error`, `warn`, `off` | `error` |
|
|
217
|
+
| `schema/validation-error` | General schema validation errors | `error`, `warn`, `off` | `error` |
|
|
218
|
+
| **Reference Validation Rules** |
|
|
219
|
+
| `refs/owner-exists` | Ensures referenced owners (users/teams) exist | `error`, `warn`, `off` | `error` |
|
|
220
|
+
| `refs/valid-version-range` | Validates version references and patterns | `error`, `warn`, `off` | `error` |
|
|
221
|
+
| `refs/resource-exists` | Ensures referenced resources exist | `error`, `warn`, `off` | `error` |
|
|
222
|
+
| `refs/channel-exists` | Ensures channels referenced in sends/receives `to`/`from` exist | `error`, `warn`, `off` | `error` |
|
|
223
|
+
| `refs/container-exists` | Ensures containers referenced in `writesTo`/`readsFrom` exist | `error`, `warn`, `off` | `error` |
|
|
224
|
+
| `refs/orphan-messages` | Detects events/commands/queries with no producer and no consumer | `error`, `warn`, `off` | `warn` |
|
|
225
|
+
| **Best Practice Rules** |
|
|
226
|
+
| `best-practices/summary-required` | Requires summary field for better documentation | `error`, `warn`, `off` | `error` |
|
|
227
|
+
| `best-practices/owner-required` | Requires at least one owner for accountability | `error`, `warn`, `off` | `error` |
|
|
228
|
+
| `best-practices/description-required` | Requires markdown body content beyond just frontmatter | `error`, `warn`, `off` | `warn` |
|
|
229
|
+
| `best-practices/schema-required` | Requires `schemaPath` on events, commands, and queries | `error`, `warn`, `off` | `warn` |
|
|
230
|
+
| **Versioning Rules** |
|
|
231
|
+
| `versions/no-deprecated-references` | Warns when referencing a deprecated resource | `error`, `warn`, `off` | `warn` |
|
|
232
|
+
| **Structural Rules** |
|
|
233
|
+
| `structure/duplicate-resource-ids` | Detects duplicate resources with same type, id, and version | `error`, `warn`, `off` | `error` |
|
|
234
|
+
|
|
235
|
+
**Note**: Rules defaulting to `warn` will show warnings but won't fail the linter unless `--fail-on-warning` is used. You can promote them to `error` for stricter validation.
|
|
227
236
|
|
|
228
237
|
### Configuration Examples
|
|
229
238
|
|
|
@@ -326,10 +335,20 @@ If no `.eventcatalogrc.js` file is found, the linter uses default rules where al
|
|
|
326
335
|
- ✅ Services referenced in domains exist
|
|
327
336
|
- ✅ Events/Commands/Queries referenced in services exist
|
|
328
337
|
- ✅ Entities referenced in domains/services exist
|
|
338
|
+
- ✅ Channels referenced in sends/receives `to`/`from` exist
|
|
339
|
+
- ✅ Containers referenced in `writesTo`/`readsFrom` exist
|
|
329
340
|
- ✅ Users/Teams referenced as owners exist
|
|
330
341
|
- ✅ Flow steps reference existing services/messages
|
|
331
342
|
- ✅ Entity properties reference existing entities
|
|
332
343
|
- ✅ Version-specific references are valid
|
|
344
|
+
- ✅ Orphan messages (no producer and no consumer) are detected
|
|
345
|
+
- ✅ References to deprecated resources are flagged
|
|
346
|
+
- ✅ Duplicate resource IDs (same type, id, and version) are detected
|
|
347
|
+
|
|
348
|
+
### Documentation Quality
|
|
349
|
+
|
|
350
|
+
- ✅ Resources have markdown body content (not just frontmatter)
|
|
351
|
+
- ✅ Events/Commands/Queries have a `schemaPath` defined
|
|
333
352
|
|
|
334
353
|
### Example EventCatalog Structure
|
|
335
354
|
|
|
@@ -641,11 +660,24 @@ The linter provides descriptive rule names in parentheses to help identify and f
|
|
|
641
660
|
- `(refs/owner-exists)` - Referenced owner (user/team) doesn't exist
|
|
642
661
|
- `(refs/valid-version-range)` - Referenced version doesn't exist or invalid pattern
|
|
643
662
|
- `(refs/resource-exists)` - Referenced resource doesn't exist
|
|
663
|
+
- `(refs/channel-exists)` - Referenced channel in sends/receives to/from doesn't exist
|
|
664
|
+
- `(refs/container-exists)` - Referenced container in writesTo/readsFrom doesn't exist
|
|
665
|
+
- `(refs/orphan-messages)` - Event/command/query has no producer and no consumer
|
|
644
666
|
|
|
645
667
|
### Best Practice Rules
|
|
646
668
|
|
|
647
669
|
- `(best-practices/summary-required)` - Summary field is missing
|
|
648
670
|
- `(best-practices/owner-required)` - At least one owner is required
|
|
671
|
+
- `(best-practices/description-required)` - Markdown body content is missing
|
|
672
|
+
- `(best-practices/schema-required)` - schemaPath is missing on event/command/query
|
|
673
|
+
|
|
674
|
+
### Versioning Rules
|
|
675
|
+
|
|
676
|
+
- `(versions/no-deprecated-references)` - Referencing a deprecated resource
|
|
677
|
+
|
|
678
|
+
### Structural Rules
|
|
679
|
+
|
|
680
|
+
- `(structure/duplicate-resource-ids)` - Duplicate resource with same type, id, and version
|
|
649
681
|
|
|
650
682
|
### Parse Errors
|
|
651
683
|
|
package/dist/cli/index.js
CHANGED
|
@@ -27,6 +27,7 @@ program
|
|
|
27
27
|
try {
|
|
28
28
|
// Load configuration
|
|
29
29
|
const config = (0, config_1.loadConfig)(rootDir);
|
|
30
|
+
const dependencies = (0, config_1.loadEventCatalogConfig)(rootDir);
|
|
30
31
|
spinner.text = 'Scanning EventCatalog files...';
|
|
31
32
|
const allFiles = await (0, scanner_1.scanCatalogFiles)(rootDir);
|
|
32
33
|
// Filter out ignored files
|
|
@@ -45,7 +46,7 @@ program
|
|
|
45
46
|
spinner.text = 'Parsing frontmatter...';
|
|
46
47
|
const { parsed, errors: parseErrors } = await (0, parser_1.parseAllFiles)(files);
|
|
47
48
|
spinner.text = 'Validating catalog...';
|
|
48
|
-
const rawValidationErrors = (0, validators_1.validateCatalog)(parsed);
|
|
49
|
+
const rawValidationErrors = (0, validators_1.validateCatalog)(parsed, dependencies);
|
|
49
50
|
// Apply rule configuration to each file's errors
|
|
50
51
|
const validationErrors = parsed.flatMap((parsedFile) => {
|
|
51
52
|
const fileErrors = rawValidationErrors.filter((error) => error.file === parsedFile.file.relativePath);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,gDAAwB;AACxB,wCAA8C;AAC9C,sCAA0C;AAC1C,8CAAgD;AAChD,4CAA4C;AAE5C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -13,7 +13,14 @@ export interface LinterConfig {
|
|
|
13
13
|
ignorePatterns?: string[];
|
|
14
14
|
overrides?: ConfigOverride[];
|
|
15
15
|
}
|
|
16
|
+
export declare const DEFAULT_IGNORE_PATTERNS: string[];
|
|
16
17
|
export declare const DEFAULT_RULES: Record<string, RuleSeverity>;
|
|
18
|
+
export interface DependencyEntry {
|
|
19
|
+
id: string;
|
|
20
|
+
version?: string;
|
|
21
|
+
}
|
|
22
|
+
export type CatalogDependencies = Record<string, DependencyEntry[]>;
|
|
23
|
+
export declare const loadEventCatalogConfig: (rootDir: string) => CatalogDependencies;
|
|
17
24
|
export declare const loadConfig: (rootDir: string) => LinterConfig;
|
|
18
25
|
export declare const parseRuleConfig: (rule: RuleSeverity | [RuleSeverity, Record<string, any>]) => RuleConfig;
|
|
19
26
|
export declare const shouldIgnoreFile: (filePath: string, ignorePatterns: string[]) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAAwB,CAAC;AAErE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAoBtD,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAepE,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,mBA+BxD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,YAiC5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAG,UAW1F,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,gBAAgB,MAAM,EAAE,KAAG,OAgB7E,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,QAAQ,YAAY,KAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAwBnG,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,eAAe,EAAE,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,KAAG,eAAe,EAmB/G,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -3,29 +3,78 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.applyRuleSeverity = exports.getEffectiveRules = exports.shouldIgnoreFile = exports.parseRuleConfig = exports.loadConfig = exports.DEFAULT_RULES = void 0;
|
|
6
|
+
exports.applyRuleSeverity = exports.getEffectiveRules = exports.shouldIgnoreFile = exports.parseRuleConfig = exports.loadConfig = exports.loadEventCatalogConfig = exports.DEFAULT_RULES = exports.DEFAULT_IGNORE_PATTERNS = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
+
exports.DEFAULT_IGNORE_PATTERNS = ['dependencies/**'];
|
|
9
10
|
exports.DEFAULT_RULES = {
|
|
10
11
|
'schema/required-fields': 'error',
|
|
11
12
|
'schema/valid-semver': 'error',
|
|
12
13
|
'schema/valid-email': 'error',
|
|
13
14
|
'refs/owner-exists': 'error',
|
|
14
15
|
'refs/valid-version-range': 'error',
|
|
16
|
+
'refs/resource-exists': 'error',
|
|
17
|
+
'refs/channel-exists': 'error',
|
|
18
|
+
'refs/container-exists': 'error',
|
|
19
|
+
'refs/orphan-messages': 'warn',
|
|
15
20
|
'best-practices/summary-required': 'error',
|
|
16
21
|
'best-practices/owner-required': 'error',
|
|
22
|
+
'best-practices/description-required': 'warn',
|
|
23
|
+
'best-practices/schema-required': 'warn',
|
|
17
24
|
'naming/service-id-format': 'error',
|
|
18
25
|
'naming/event-id-format': 'error',
|
|
19
26
|
'versions/consistent-format': 'error',
|
|
20
27
|
'versions/no-deprecated': 'error',
|
|
28
|
+
'versions/no-deprecated-references': 'warn',
|
|
29
|
+
'structure/duplicate-resource-ids': 'error',
|
|
21
30
|
};
|
|
31
|
+
const PLURAL_TO_SINGULAR = {
|
|
32
|
+
events: 'event',
|
|
33
|
+
commands: 'command',
|
|
34
|
+
queries: 'query',
|
|
35
|
+
services: 'service',
|
|
36
|
+
domains: 'domain',
|
|
37
|
+
entities: 'entity',
|
|
38
|
+
channels: 'channel',
|
|
39
|
+
flows: 'flow',
|
|
40
|
+
users: 'user',
|
|
41
|
+
teams: 'team',
|
|
42
|
+
};
|
|
43
|
+
const loadEventCatalogConfig = (rootDir) => {
|
|
44
|
+
const configPath = path_1.default.join(rootDir, 'eventcatalog.config.js');
|
|
45
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
delete require.cache[require.resolve(configPath)];
|
|
50
|
+
const config = require(configPath);
|
|
51
|
+
if (!config.dependencies || typeof config.dependencies !== 'object') {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
const dependencies = {};
|
|
55
|
+
for (const [pluralKey, entries] of Object.entries(config.dependencies)) {
|
|
56
|
+
const singularType = PLURAL_TO_SINGULAR[pluralKey];
|
|
57
|
+
if (!singularType || !Array.isArray(entries))
|
|
58
|
+
continue;
|
|
59
|
+
dependencies[singularType] = entries
|
|
60
|
+
.filter((entry) => entry && typeof entry.id === 'string')
|
|
61
|
+
.map((entry) => ({ id: entry.id, version: entry.version }));
|
|
62
|
+
}
|
|
63
|
+
return dependencies;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.warn(`Warning: Could not load eventcatalog.config.js: ${error instanceof Error ? error.message : String(error)}`);
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
exports.loadEventCatalogConfig = loadEventCatalogConfig;
|
|
22
71
|
const loadConfig = (rootDir) => {
|
|
23
72
|
const configPath = path_1.default.join(rootDir, '.eventcatalogrc.js');
|
|
24
73
|
if (!fs_1.default.existsSync(configPath)) {
|
|
25
74
|
// Return default config if no config file exists
|
|
26
75
|
return {
|
|
27
76
|
rules: exports.DEFAULT_RULES,
|
|
28
|
-
ignorePatterns:
|
|
77
|
+
ignorePatterns: exports.DEFAULT_IGNORE_PATTERNS,
|
|
29
78
|
overrides: [],
|
|
30
79
|
};
|
|
31
80
|
}
|
|
@@ -36,7 +85,7 @@ const loadConfig = (rootDir) => {
|
|
|
36
85
|
// Merge with defaults
|
|
37
86
|
const mergedConfig = {
|
|
38
87
|
rules: { ...exports.DEFAULT_RULES, ...config.rules },
|
|
39
|
-
ignorePatterns: config.ignorePatterns || [],
|
|
88
|
+
ignorePatterns: [...exports.DEFAULT_IGNORE_PATTERNS, ...(config.ignorePatterns || [])],
|
|
40
89
|
overrides: config.overrides || [],
|
|
41
90
|
};
|
|
42
91
|
return mergedConfig;
|
|
@@ -45,7 +94,7 @@ const loadConfig = (rootDir) => {
|
|
|
45
94
|
console.warn(`Warning: Could not load .eventcatalogrc.js: ${error instanceof Error ? error.message : String(error)}`);
|
|
46
95
|
return {
|
|
47
96
|
rules: exports.DEFAULT_RULES,
|
|
48
|
-
ignorePatterns:
|
|
97
|
+
ignorePatterns: exports.DEFAULT_IGNORE_PATTERNS,
|
|
49
98
|
overrides: [],
|
|
50
99
|
};
|
|
51
100
|
}
|
|
@@ -119,6 +168,10 @@ const applyRuleSeverity = (errors, rules) => {
|
|
|
119
168
|
};
|
|
120
169
|
exports.applyRuleSeverity = applyRuleSeverity;
|
|
121
170
|
const mapErrorToRuleName = (error) => {
|
|
171
|
+
// Use explicit rule if set by the validator
|
|
172
|
+
if (error.rule) {
|
|
173
|
+
return error.rule;
|
|
174
|
+
}
|
|
122
175
|
// Map validation errors to rule names based on the error type and content
|
|
123
176
|
if (error.type === 'schema') {
|
|
124
177
|
// Check field-specific rules first
|
|
@@ -147,8 +200,7 @@ const mapErrorToRuleName = (error) => {
|
|
|
147
200
|
if (error.message.includes('version')) {
|
|
148
201
|
return 'refs/valid-version-range';
|
|
149
202
|
}
|
|
150
|
-
|
|
151
|
-
return 'schema/required-fields'; // Map to a default rule so they remain as errors
|
|
203
|
+
return 'refs/resource-exists';
|
|
152
204
|
}
|
|
153
205
|
return 'schema/required-fields';
|
|
154
206
|
};
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAqBX,QAAA,aAAa,GAAiC;IACzD,wBAAwB,EAAE,OAAO;IACjC,qBAAqB,EAAE,OAAO;IAC9B,oBAAoB,EAAE,OAAO;IAC7B,mBAAmB,EAAE,OAAO;IAC5B,0BAA0B,EAAE,OAAO;IACnC,iCAAiC,EAAE,OAAO;IAC1C,+BAA+B,EAAE,OAAO;IACxC,0BAA0B,EAAE,OAAO;IACnC,wBAAwB,EAAE,OAAO;IACjC,4BAA4B,EAAE,OAAO;IACrC,wBAAwB,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-practices-validator.d.ts","sourceRoot":"","sources":["../../src/validators/best-practices-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,qBAAqB,GAAI,aAAa,UAAU,EAAE,KAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"best-practices-validator.d.ts","sourceRoot":"","sources":["../../src/validators/best-practices-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,qBAAqB,GAAI,aAAa,UAAU,EAAE,KAAG,eAAe,EAmEhF,CAAC"}
|
|
@@ -4,7 +4,7 @@ exports.validateBestPractices = void 0;
|
|
|
4
4
|
const validateBestPractices = (parsedFiles) => {
|
|
5
5
|
const errors = [];
|
|
6
6
|
for (const parsedFile of parsedFiles) {
|
|
7
|
-
const { file, frontmatter } = parsedFile;
|
|
7
|
+
const { file, frontmatter, content } = parsedFile;
|
|
8
8
|
// Check for required summary
|
|
9
9
|
if (!frontmatter.summary || (typeof frontmatter.summary === 'string' && frontmatter.summary.trim() === '')) {
|
|
10
10
|
errors.push({
|
|
@@ -17,8 +17,10 @@ const validateBestPractices = (parsedFiles) => {
|
|
|
17
17
|
rule: 'best-practices/summary-required',
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
// Check for required owners
|
|
21
|
-
if (
|
|
20
|
+
// Check for required owners (skip users and teams - they are owners, not owned)
|
|
21
|
+
if (file.resourceType !== 'user' &&
|
|
22
|
+
file.resourceType !== 'team' &&
|
|
23
|
+
(!frontmatter.owners || !Array.isArray(frontmatter.owners) || frontmatter.owners.length === 0)) {
|
|
22
24
|
errors.push({
|
|
23
25
|
type: 'schema',
|
|
24
26
|
resource: `${file.resourceType}/${file.resourceId}`,
|
|
@@ -29,6 +31,31 @@ const validateBestPractices = (parsedFiles) => {
|
|
|
29
31
|
rule: 'best-practices/owner-required',
|
|
30
32
|
});
|
|
31
33
|
}
|
|
34
|
+
// Check for required description (markdown body content)
|
|
35
|
+
if (!content || content.trim() === '') {
|
|
36
|
+
errors.push({
|
|
37
|
+
type: 'schema',
|
|
38
|
+
resource: `${file.resourceType}/${file.resourceId}`,
|
|
39
|
+
field: 'description',
|
|
40
|
+
message: 'Resource should have a markdown description (body content) beyond just frontmatter',
|
|
41
|
+
file: file.relativePath,
|
|
42
|
+
severity: 'warning',
|
|
43
|
+
rule: 'best-practices/description-required',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// Check for required schemaPath on messages (events, commands, queries)
|
|
47
|
+
if ((file.resourceType === 'event' || file.resourceType === 'command' || file.resourceType === 'query') &&
|
|
48
|
+
!frontmatter.schemaPath) {
|
|
49
|
+
errors.push({
|
|
50
|
+
type: 'schema',
|
|
51
|
+
resource: `${file.resourceType}/${file.resourceId}`,
|
|
52
|
+
field: 'schemaPath',
|
|
53
|
+
message: `${file.resourceType} should have a schemaPath defined for consumers to understand the contract`,
|
|
54
|
+
file: file.relativePath,
|
|
55
|
+
severity: 'warning',
|
|
56
|
+
rule: 'best-practices/schema-required',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
32
59
|
}
|
|
33
60
|
return errors;
|
|
34
61
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-practices-validator.js","sourceRoot":"","sources":["../../src/validators/best-practices-validator.ts"],"names":[],"mappings":";;;AAGO,MAAM,qBAAqB,GAAG,CAAC,WAAyB,EAAqB,EAAE;IACpF,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"best-practices-validator.js","sourceRoot":"","sources":["../../src/validators/best-practices-validator.ts"],"names":[],"mappings":";;;AAGO,MAAM,qBAAqB,GAAG,CAAC,WAAyB,EAAqB,EAAE;IACpF,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAElD,6BAA6B;QAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC3G,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnD,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,8CAA8C;gBACvD,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,iCAAiC;aACxC,CAAC,CAAC;QACL,CAAC;QAED,gFAAgF;QAChF,IACE,IAAI,CAAC,YAAY,KAAK,MAAM;YAC5B,IAAI,CAAC,YAAY,KAAK,MAAM;YAC5B,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,EAC9F,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnD,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,gCAAgC;gBACzC,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,+BAA+B;aACtC,CAAC,CAAC;QACL,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnD,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,oFAAoF;gBAC7F,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,qCAAqC;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,wEAAwE;QACxE,IACE,CAAC,IAAI,CAAC,YAAY,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC;YACnG,CAAC,WAAW,CAAC,UAAU,EACvB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnD,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,4EAA4E;gBACzG,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,gCAAgC;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAnEW,QAAA,qBAAqB,yBAmEhC"}
|
|
@@ -3,5 +3,6 @@ export * from './reference-validator';
|
|
|
3
3
|
export * from './best-practices-validator';
|
|
4
4
|
import { ParsedFile } from '../parser';
|
|
5
5
|
import { ValidationError } from '../types';
|
|
6
|
-
|
|
6
|
+
import { CatalogDependencies } from '../config';
|
|
7
|
+
export declare const validateCatalog: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ValidationError[];
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAUhD,eAAO,MAAM,eAAe,GAAI,aAAa,UAAU,EAAE,EAAE,eAAe,mBAAmB,KAAG,eAAe,EAgB9G,CAAC"}
|
package/dist/validators/index.js
CHANGED
|
@@ -21,11 +21,21 @@ __exportStar(require("./best-practices-validator"), exports);
|
|
|
21
21
|
const schema_validator_1 = require("./schema-validator");
|
|
22
22
|
const reference_validator_1 = require("./reference-validator");
|
|
23
23
|
const best_practices_validator_1 = require("./best-practices-validator");
|
|
24
|
-
const validateCatalog = (parsedFiles) => {
|
|
24
|
+
const validateCatalog = (parsedFiles, dependencies) => {
|
|
25
25
|
const schemaErrors = (0, schema_validator_1.validateAllSchemas)(parsedFiles);
|
|
26
|
-
const referenceErrors = (0, reference_validator_1.validateReferences)(parsedFiles);
|
|
26
|
+
const referenceErrors = (0, reference_validator_1.validateReferences)(parsedFiles, dependencies);
|
|
27
|
+
const orphanErrors = (0, reference_validator_1.validateOrphanMessages)(parsedFiles, dependencies);
|
|
28
|
+
const deprecatedRefErrors = (0, reference_validator_1.validateDeprecatedReferences)(parsedFiles);
|
|
29
|
+
const duplicateErrors = (0, reference_validator_1.validateDuplicateResourceIds)(parsedFiles);
|
|
27
30
|
const bestPracticeErrors = (0, best_practices_validator_1.validateBestPractices)(parsedFiles);
|
|
28
|
-
return [
|
|
31
|
+
return [
|
|
32
|
+
...schemaErrors,
|
|
33
|
+
...referenceErrors,
|
|
34
|
+
...orphanErrors,
|
|
35
|
+
...deprecatedRefErrors,
|
|
36
|
+
...duplicateErrors,
|
|
37
|
+
...bestPracticeErrors,
|
|
38
|
+
];
|
|
29
39
|
};
|
|
30
40
|
exports.validateCatalog = validateCatalog;
|
|
31
41
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,wDAAsC;AACtC,6DAA2C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,wDAAsC;AACtC,6DAA2C;AAK3C,yDAAwD;AACxD,+DAK+B;AAC/B,yEAAmE;AAE5D,MAAM,eAAe,GAAG,CAAC,WAAyB,EAAE,YAAkC,EAAqB,EAAE;IAClH,MAAM,YAAY,GAAG,IAAA,qCAAkB,EAAC,WAAW,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,IAAA,wCAAkB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAA,4CAAsB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,mBAAmB,GAAG,IAAA,kDAA4B,EAAC,WAAW,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,IAAA,kDAA4B,EAAC,WAAW,CAAC,CAAC;IAClE,MAAM,kBAAkB,GAAG,IAAA,gDAAqB,EAAC,WAAW,CAAC,CAAC;IAE9D,OAAO;QACL,GAAG,YAAY;QACf,GAAG,eAAe;QAClB,GAAG,YAAY;QACf,GAAG,mBAAmB;QACtB,GAAG,eAAe;QAClB,GAAG,kBAAkB;KACtB,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,eAAe,mBAgB1B"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { ParsedFile } from '../parser';
|
|
2
2
|
import { ValidationError } from '../types';
|
|
3
|
+
import { CatalogDependencies } from '../config';
|
|
3
4
|
interface ResourceIndex {
|
|
4
5
|
[resourceType: string]: {
|
|
5
6
|
[resourceId: string]: Set<string>;
|
|
6
7
|
};
|
|
7
8
|
}
|
|
8
|
-
export declare const buildResourceIndex: (parsedFiles: ParsedFile[]) => ResourceIndex;
|
|
9
|
-
export declare const validateReferences: (parsedFiles: ParsedFile[]) => ValidationError[];
|
|
9
|
+
export declare const buildResourceIndex: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ResourceIndex;
|
|
10
|
+
export declare const validateReferences: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ValidationError[];
|
|
11
|
+
export declare const validateOrphanMessages: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ValidationError[];
|
|
12
|
+
export declare const validateDeprecatedReferences: (parsedFiles: ParsedFile[]) => ValidationError[];
|
|
13
|
+
export declare const validateDuplicateResourceIds: (parsedFiles: ParsedFile[]) => ValidationError[];
|
|
10
14
|
export {};
|
|
11
15
|
//# sourceMappingURL=reference-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-validator.d.ts","sourceRoot":"","sources":["../../src/validators/reference-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAqB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-validator.d.ts","sourceRoot":"","sources":["../../src/validators/reference-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAqB,MAAM,UAAU,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,UAAU,aAAa;IACrB,CAAC,YAAY,EAAE,MAAM,GAAG;QACtB,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;KACnC,CAAC;CACH;AAED,eAAO,MAAM,kBAAkB,GAAI,aAAa,UAAU,EAAE,EAAE,eAAe,mBAAmB,KAAG,aAgDlG,CAAC;AAwMF,eAAO,MAAM,kBAAkB,GAAI,aAAa,UAAU,EAAE,EAAE,eAAe,mBAAmB,KAAG,eAAe,EAsDjH,CAAC;AAGF,eAAO,MAAM,sBAAsB,GAAI,aAAa,UAAU,EAAE,EAAE,eAAe,mBAAmB,KAAG,eAAe,EA0ErH,CAAC;AAGF,eAAO,MAAM,4BAA4B,GAAI,aAAa,UAAU,EAAE,KAAG,eAAe,EA2DvF,CAAC;AAGF,eAAO,MAAM,4BAA4B,GAAI,aAAa,UAAU,EAAE,KAAG,eAAe,EA2BvF,CAAC"}
|
|
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.validateReferences = exports.buildResourceIndex = void 0;
|
|
6
|
+
exports.validateDuplicateResourceIds = exports.validateDeprecatedReferences = exports.validateOrphanMessages = exports.validateReferences = exports.buildResourceIndex = void 0;
|
|
7
7
|
const semver_1 = __importDefault(require("semver"));
|
|
8
|
-
const buildResourceIndex = (parsedFiles) => {
|
|
8
|
+
const buildResourceIndex = (parsedFiles, dependencies) => {
|
|
9
9
|
const index = {};
|
|
10
10
|
for (const parsedFile of parsedFiles) {
|
|
11
11
|
const { file, frontmatter } = parsedFile;
|
|
@@ -32,6 +32,20 @@ const buildResourceIndex = (parsedFiles) => {
|
|
|
32
32
|
index[resourceType][resourceId].add('latest');
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
// Add dependency entries to the index
|
|
36
|
+
if (dependencies) {
|
|
37
|
+
for (const [resourceType, entries] of Object.entries(dependencies)) {
|
|
38
|
+
if (!index[resourceType]) {
|
|
39
|
+
index[resourceType] = {};
|
|
40
|
+
}
|
|
41
|
+
for (const entry of entries) {
|
|
42
|
+
if (!index[resourceType][entry.id]) {
|
|
43
|
+
index[resourceType][entry.id] = new Set();
|
|
44
|
+
}
|
|
45
|
+
index[resourceType][entry.id].add(entry.version || 'latest');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
35
49
|
return index;
|
|
36
50
|
};
|
|
37
51
|
exports.buildResourceIndex = buildResourceIndex;
|
|
@@ -115,6 +129,16 @@ const extractReferences = (parsedFile) => {
|
|
|
115
129
|
references.push({ ref, possibleTypes: ['entity'], field: 'entities' });
|
|
116
130
|
});
|
|
117
131
|
}
|
|
132
|
+
if (frontmatter.writesTo && Array.isArray(frontmatter.writesTo)) {
|
|
133
|
+
frontmatter.writesTo.forEach((ref) => {
|
|
134
|
+
references.push({ ref, possibleTypes: ['dataStore'], field: 'writesTo' });
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
if (frontmatter.readsFrom && Array.isArray(frontmatter.readsFrom)) {
|
|
138
|
+
frontmatter.readsFrom.forEach((ref) => {
|
|
139
|
+
references.push({ ref, possibleTypes: ['dataStore'], field: 'readsFrom' });
|
|
140
|
+
});
|
|
141
|
+
}
|
|
118
142
|
}
|
|
119
143
|
if (file.resourceType === 'flow' && frontmatter.steps && Array.isArray(frontmatter.steps)) {
|
|
120
144
|
frontmatter.steps.forEach((step, index) => {
|
|
@@ -153,8 +177,51 @@ const extractReferences = (parsedFile) => {
|
|
|
153
177
|
}
|
|
154
178
|
return references;
|
|
155
179
|
};
|
|
156
|
-
|
|
157
|
-
|
|
180
|
+
// Extract channel references from sends/receives to/from arrays
|
|
181
|
+
const extractChannelReferences = (parsedFile) => {
|
|
182
|
+
const { file, frontmatter } = parsedFile;
|
|
183
|
+
const references = [];
|
|
184
|
+
if (file.resourceType !== 'service' && file.resourceType !== 'domain') {
|
|
185
|
+
return references;
|
|
186
|
+
}
|
|
187
|
+
const extractFromPointers = (pointers, parentField) => {
|
|
188
|
+
if (!Array.isArray(pointers))
|
|
189
|
+
return;
|
|
190
|
+
pointers.forEach((pointer, idx) => {
|
|
191
|
+
if (pointer.to && Array.isArray(pointer.to)) {
|
|
192
|
+
pointer.to.forEach((channelRef, cIdx) => {
|
|
193
|
+
if (channelRef && channelRef.id) {
|
|
194
|
+
references.push({
|
|
195
|
+
ref: { id: channelRef.id, version: channelRef.version },
|
|
196
|
+
possibleTypes: ['channel'],
|
|
197
|
+
field: `${parentField}[${idx}].to[${cIdx}]`,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
if (pointer.from && Array.isArray(pointer.from)) {
|
|
203
|
+
pointer.from.forEach((channelRef, cIdx) => {
|
|
204
|
+
if (channelRef && channelRef.id) {
|
|
205
|
+
references.push({
|
|
206
|
+
ref: { id: channelRef.id, version: channelRef.version },
|
|
207
|
+
possibleTypes: ['channel'],
|
|
208
|
+
field: `${parentField}[${idx}].from[${cIdx}]`,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
if (frontmatter.sends && Array.isArray(frontmatter.sends)) {
|
|
216
|
+
extractFromPointers(frontmatter.sends, 'sends');
|
|
217
|
+
}
|
|
218
|
+
if (frontmatter.receives && Array.isArray(frontmatter.receives)) {
|
|
219
|
+
extractFromPointers(frontmatter.receives, 'receives');
|
|
220
|
+
}
|
|
221
|
+
return references;
|
|
222
|
+
};
|
|
223
|
+
const validateReferences = (parsedFiles, dependencies) => {
|
|
224
|
+
const index = (0, exports.buildResourceIndex)(parsedFiles, dependencies);
|
|
158
225
|
const errors = [];
|
|
159
226
|
for (const parsedFile of parsedFiles) {
|
|
160
227
|
const references = extractReferences(parsedFile);
|
|
@@ -167,6 +234,9 @@ const validateReferences = (parsedFiles) => {
|
|
|
167
234
|
if (field === 'owners') {
|
|
168
235
|
rule = 'refs/owner-exists';
|
|
169
236
|
}
|
|
237
|
+
else if (field === 'writesTo' || field === 'readsFrom') {
|
|
238
|
+
rule = 'refs/container-exists';
|
|
239
|
+
}
|
|
170
240
|
else if (ref.version) {
|
|
171
241
|
rule = 'refs/valid-version-range';
|
|
172
242
|
}
|
|
@@ -180,8 +250,183 @@ const validateReferences = (parsedFiles) => {
|
|
|
180
250
|
});
|
|
181
251
|
}
|
|
182
252
|
}
|
|
253
|
+
// Validate channel references from sends/receives to/from
|
|
254
|
+
const channelRefs = extractChannelReferences(parsedFile);
|
|
255
|
+
for (const { ref, possibleTypes, field } of channelRefs) {
|
|
256
|
+
const found = possibleTypes.some((type) => checkResourceExists(ref, type, index));
|
|
257
|
+
if (!found) {
|
|
258
|
+
const versionStr = ref.version ? ` (version: ${ref.version})` : '';
|
|
259
|
+
errors.push({
|
|
260
|
+
type: 'reference',
|
|
261
|
+
resource: `${parsedFile.file.resourceType}/${parsedFile.file.resourceId}`,
|
|
262
|
+
field,
|
|
263
|
+
message: `Referenced channel "${ref.id}"${versionStr} does not exist`,
|
|
264
|
+
file: parsedFile.file.relativePath,
|
|
265
|
+
rule: 'refs/channel-exists',
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
183
269
|
}
|
|
184
270
|
return errors;
|
|
185
271
|
};
|
|
186
272
|
exports.validateReferences = validateReferences;
|
|
273
|
+
// Detect messages (events/commands/queries) with no producer and no consumer
|
|
274
|
+
const validateOrphanMessages = (parsedFiles, dependencies) => {
|
|
275
|
+
const errors = [];
|
|
276
|
+
const messageTypes = ['event', 'command', 'query'];
|
|
277
|
+
// Collect all message IDs
|
|
278
|
+
const messageFiles = parsedFiles.filter((pf) => messageTypes.includes(pf.file.resourceType));
|
|
279
|
+
if (messageFiles.length === 0)
|
|
280
|
+
return errors;
|
|
281
|
+
// Build sets of produced and consumed message IDs
|
|
282
|
+
const producedMessages = new Set();
|
|
283
|
+
const consumedMessages = new Set();
|
|
284
|
+
for (const parsedFile of parsedFiles) {
|
|
285
|
+
const { file, frontmatter } = parsedFile;
|
|
286
|
+
if (file.resourceType === 'service' || file.resourceType === 'domain') {
|
|
287
|
+
if (frontmatter.sends && Array.isArray(frontmatter.sends)) {
|
|
288
|
+
frontmatter.sends.forEach((ref) => {
|
|
289
|
+
if (ref && ref.id)
|
|
290
|
+
producedMessages.add(ref.id);
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
if (frontmatter.receives && Array.isArray(frontmatter.receives)) {
|
|
294
|
+
frontmatter.receives.forEach((ref) => {
|
|
295
|
+
if (ref && ref.id)
|
|
296
|
+
consumedMessages.add(ref.id);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Also check producers/consumers fields on messages themselves
|
|
301
|
+
if (messageTypes.includes(file.resourceType)) {
|
|
302
|
+
if (frontmatter.producers && Array.isArray(frontmatter.producers) && frontmatter.producers.length > 0) {
|
|
303
|
+
const msgId = frontmatter.id || file.resourceId;
|
|
304
|
+
producedMessages.add(msgId);
|
|
305
|
+
}
|
|
306
|
+
if (frontmatter.consumers && Array.isArray(frontmatter.consumers) && frontmatter.consumers.length > 0) {
|
|
307
|
+
const msgId = frontmatter.id || file.resourceId;
|
|
308
|
+
consumedMessages.add(msgId);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Also consider dependency messages as having producers/consumers
|
|
313
|
+
if (dependencies) {
|
|
314
|
+
for (const [type, entries] of Object.entries(dependencies)) {
|
|
315
|
+
if (messageTypes.includes(type)) {
|
|
316
|
+
entries.forEach((entry) => {
|
|
317
|
+
// Dependencies are external, treat them as having both producers and consumers
|
|
318
|
+
producedMessages.add(entry.id);
|
|
319
|
+
consumedMessages.add(entry.id);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// Check each message for orphan status
|
|
325
|
+
for (const parsedFile of messageFiles) {
|
|
326
|
+
const msgId = parsedFile.frontmatter.id || parsedFile.file.resourceId;
|
|
327
|
+
const isProduced = producedMessages.has(msgId);
|
|
328
|
+
const isConsumed = consumedMessages.has(msgId);
|
|
329
|
+
if (!isProduced && !isConsumed) {
|
|
330
|
+
errors.push({
|
|
331
|
+
type: 'reference',
|
|
332
|
+
resource: `${parsedFile.file.resourceType}/${parsedFile.file.resourceId}`,
|
|
333
|
+
field: 'id',
|
|
334
|
+
message: `${parsedFile.file.resourceType} "${msgId}" has no producer and no consumer`,
|
|
335
|
+
file: parsedFile.file.relativePath,
|
|
336
|
+
rule: 'refs/orphan-messages',
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return errors;
|
|
341
|
+
};
|
|
342
|
+
exports.validateOrphanMessages = validateOrphanMessages;
|
|
343
|
+
// Detect references to deprecated resources
|
|
344
|
+
const validateDeprecatedReferences = (parsedFiles) => {
|
|
345
|
+
const errors = [];
|
|
346
|
+
// Build an index of deprecated resources
|
|
347
|
+
const deprecatedIndex = {};
|
|
348
|
+
for (const parsedFile of parsedFiles) {
|
|
349
|
+
const { file, frontmatter } = parsedFile;
|
|
350
|
+
if (frontmatter.deprecated && frontmatter.deprecated !== false) {
|
|
351
|
+
const resourceId = frontmatter.id || file.resourceId;
|
|
352
|
+
const key = `${file.resourceType}:${resourceId}`;
|
|
353
|
+
if (!deprecatedIndex[key]) {
|
|
354
|
+
deprecatedIndex[key] = new Set();
|
|
355
|
+
}
|
|
356
|
+
if (frontmatter.version && typeof frontmatter.version === 'string') {
|
|
357
|
+
deprecatedIndex[key].add(frontmatter.version);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
deprecatedIndex[key].add('*'); // All versions deprecated
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
if (Object.keys(deprecatedIndex).length === 0)
|
|
365
|
+
return errors;
|
|
366
|
+
const isDeprecated = (type, id, version) => {
|
|
367
|
+
const key = `${type}:${id}`;
|
|
368
|
+
const versions = deprecatedIndex[key];
|
|
369
|
+
if (!versions)
|
|
370
|
+
return false;
|
|
371
|
+
if (versions.has('*'))
|
|
372
|
+
return true;
|
|
373
|
+
if (version && versions.has(version))
|
|
374
|
+
return true;
|
|
375
|
+
// For 'latest' or no version, check if any version is deprecated
|
|
376
|
+
if (!version || version === 'latest')
|
|
377
|
+
return versions.size > 0;
|
|
378
|
+
return false;
|
|
379
|
+
};
|
|
380
|
+
for (const parsedFile of parsedFiles) {
|
|
381
|
+
const references = extractReferences(parsedFile);
|
|
382
|
+
for (const { ref, possibleTypes, field } of references) {
|
|
383
|
+
// Skip owner references for this check
|
|
384
|
+
if (field === 'owners' || field === 'members')
|
|
385
|
+
continue;
|
|
386
|
+
for (const type of possibleTypes) {
|
|
387
|
+
if (isDeprecated(type, ref.id, ref.version)) {
|
|
388
|
+
const versionStr = ref.version ? ` (version: ${ref.version})` : '';
|
|
389
|
+
errors.push({
|
|
390
|
+
type: 'reference',
|
|
391
|
+
resource: `${parsedFile.file.resourceType}/${parsedFile.file.resourceId}`,
|
|
392
|
+
field,
|
|
393
|
+
message: `Referenced ${type} "${ref.id}"${versionStr} is deprecated`,
|
|
394
|
+
file: parsedFile.file.relativePath,
|
|
395
|
+
rule: 'versions/no-deprecated-references',
|
|
396
|
+
});
|
|
397
|
+
break; // Only report once per reference
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return errors;
|
|
403
|
+
};
|
|
404
|
+
exports.validateDeprecatedReferences = validateDeprecatedReferences;
|
|
405
|
+
// Detect duplicate resource IDs (same type, same id, same version)
|
|
406
|
+
const validateDuplicateResourceIds = (parsedFiles) => {
|
|
407
|
+
const errors = [];
|
|
408
|
+
// Track seen resources: key = "type:id:version", value = file path
|
|
409
|
+
const seen = {};
|
|
410
|
+
for (const parsedFile of parsedFiles) {
|
|
411
|
+
const { file, frontmatter } = parsedFile;
|
|
412
|
+
const resourceId = frontmatter.id || file.resourceId;
|
|
413
|
+
const version = frontmatter.version || 'latest';
|
|
414
|
+
const key = `${file.resourceType}:${resourceId}:${version}`;
|
|
415
|
+
if (seen[key]) {
|
|
416
|
+
errors.push({
|
|
417
|
+
type: 'reference',
|
|
418
|
+
resource: `${file.resourceType}/${file.resourceId}`,
|
|
419
|
+
field: 'id',
|
|
420
|
+
message: `Duplicate ${file.resourceType} "${resourceId}" (version: ${version}) — also defined in ${seen[key]}`,
|
|
421
|
+
file: file.relativePath,
|
|
422
|
+
rule: 'structure/duplicate-resource-ids',
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
seen[key] = file.relativePath;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return errors;
|
|
430
|
+
};
|
|
431
|
+
exports.validateDuplicateResourceIds = validateDuplicateResourceIds;
|
|
187
432
|
//# sourceMappingURL=reference-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validators/reference-validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validators/reference-validator.ts"],"names":[],"mappings":"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"}
|