@eventcatalog/linter 0.1.1 → 1.0.1

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 (90) hide show
  1. package/README.md +50 -18
  2. package/package.json +14 -17
  3. package/dist/cli/index.d.ts +0 -3
  4. package/dist/cli/index.d.ts.map +0 -1
  5. package/dist/cli/index.js +0 -73
  6. package/dist/cli/index.js.map +0 -1
  7. package/dist/config/index.d.ts +0 -29
  8. package/dist/config/index.d.ts.map +0 -1
  9. package/dist/config/index.js +0 -196
  10. package/dist/config/index.js.map +0 -1
  11. package/dist/index.d.ts +0 -8
  12. package/dist/index.d.ts.map +0 -1
  13. package/dist/index.js +0 -24
  14. package/dist/index.js.map +0 -1
  15. package/dist/parser/index.d.ts +0 -17
  16. package/dist/parser/index.d.ts.map +0 -1
  17. package/dist/parser/index.js +0 -43
  18. package/dist/parser/index.js.map +0 -1
  19. package/dist/reporters/index.d.ts +0 -16
  20. package/dist/reporters/index.d.ts.map +0 -1
  21. package/dist/reporters/index.js +0 -155
  22. package/dist/reporters/index.js.map +0 -1
  23. package/dist/scanner/index.d.ts +0 -14
  24. package/dist/scanner/index.d.ts.map +0 -1
  25. package/dist/scanner/index.js +0 -102
  26. package/dist/scanner/index.js.map +0 -1
  27. package/dist/schemas/channel.d.ts +0 -389
  28. package/dist/schemas/channel.d.ts.map +0 -1
  29. package/dist/schemas/channel.js +0 -20
  30. package/dist/schemas/channel.js.map +0 -1
  31. package/dist/schemas/common.d.ts +0 -550
  32. package/dist/schemas/common.d.ts.map +0 -1
  33. package/dist/schemas/common.js +0 -144
  34. package/dist/schemas/common.js.map +0 -1
  35. package/dist/schemas/data-store.d.ts +0 -348
  36. package/dist/schemas/data-store.d.ts.map +0 -1
  37. package/dist/schemas/data-store.js +0 -17
  38. package/dist/schemas/data-store.js.map +0 -1
  39. package/dist/schemas/domain.d.ts +0 -381
  40. package/dist/schemas/domain.d.ts.map +0 -1
  41. package/dist/schemas/domain.js +0 -13
  42. package/dist/schemas/domain.js.map +0 -1
  43. package/dist/schemas/entity.d.ts +0 -382
  44. package/dist/schemas/entity.d.ts.map +0 -1
  45. package/dist/schemas/entity.js +0 -24
  46. package/dist/schemas/entity.js.map +0 -1
  47. package/dist/schemas/flow.d.ts +0 -733
  48. package/dist/schemas/flow.d.ts.map +0 -1
  49. package/dist/schemas/flow.js +0 -70
  50. package/dist/schemas/flow.js.map +0 -1
  51. package/dist/schemas/index.d.ts +0 -3815
  52. package/dist/schemas/index.d.ts.map +0 -1
  53. package/dist/schemas/index.js +0 -50
  54. package/dist/schemas/index.js.map +0 -1
  55. package/dist/schemas/message.d.ts +0 -1076
  56. package/dist/schemas/message.d.ts.map +0 -1
  57. package/dist/schemas/message.js +0 -17
  58. package/dist/schemas/message.js.map +0 -1
  59. package/dist/schemas/service.d.ts +0 -417
  60. package/dist/schemas/service.d.ts.map +0 -1
  61. package/dist/schemas/service.js +0 -15
  62. package/dist/schemas/service.js.map +0 -1
  63. package/dist/schemas/team.d.ts +0 -45
  64. package/dist/schemas/team.d.ts.map +0 -1
  65. package/dist/schemas/team.js +0 -20
  66. package/dist/schemas/team.js.map +0 -1
  67. package/dist/schemas/user.d.ts +0 -48
  68. package/dist/schemas/user.d.ts.map +0 -1
  69. package/dist/schemas/user.js +0 -21
  70. package/dist/schemas/user.js.map +0 -1
  71. package/dist/types/index.d.ts +0 -82
  72. package/dist/types/index.d.ts.map +0 -1
  73. package/dist/types/index.js +0 -3
  74. package/dist/types/index.js.map +0 -1
  75. package/dist/validators/best-practices-validator.d.ts +0 -4
  76. package/dist/validators/best-practices-validator.d.ts.map +0 -1
  77. package/dist/validators/best-practices-validator.js +0 -38
  78. package/dist/validators/best-practices-validator.js.map +0 -1
  79. package/dist/validators/index.d.ts +0 -8
  80. package/dist/validators/index.d.ts.map +0 -1
  81. package/dist/validators/index.js +0 -31
  82. package/dist/validators/index.js.map +0 -1
  83. package/dist/validators/reference-validator.d.ts +0 -12
  84. package/dist/validators/reference-validator.d.ts.map +0 -1
  85. package/dist/validators/reference-validator.js +0 -201
  86. package/dist/validators/reference-validator.js.map +0 -1
  87. package/dist/validators/schema-validator.d.ts +0 -5
  88. package/dist/validators/schema-validator.d.ts.map +0 -1
  89. package/dist/validators/schema-validator.js +0 -62
  90. package/dist/validators/schema-validator.js.map +0 -1
@@ -1,82 +0,0 @@
1
- export interface Badge {
2
- content: string;
3
- backgroundColor: string;
4
- textColor: string;
5
- icon?: string;
6
- link?: string;
7
- }
8
- export interface Specification {
9
- type: 'asyncapi' | 'openapi';
10
- path: string;
11
- name?: string;
12
- }
13
- export interface Repository {
14
- language: string;
15
- url: string;
16
- }
17
- export interface DraftObject {
18
- title: string;
19
- message: string;
20
- }
21
- export interface DeprecatedObject {
22
- date: string;
23
- message?: string;
24
- }
25
- export interface ResourceReference {
26
- id: string;
27
- version?: string;
28
- }
29
- export interface Parameter {
30
- enum?: string[];
31
- description?: string;
32
- examples?: string[];
33
- default?: string;
34
- }
35
- export interface FlowStep {
36
- id: string;
37
- title: string;
38
- summary?: string;
39
- actor?: {
40
- name: string;
41
- };
42
- message?: {
43
- id: string;
44
- version: string;
45
- };
46
- service?: {
47
- id: string;
48
- version: string;
49
- };
50
- externalSystem?: {
51
- name: string;
52
- summary?: string;
53
- url?: string;
54
- };
55
- next_step?: string;
56
- next_steps?: string[];
57
- }
58
- export interface EntityProperty {
59
- name: string;
60
- type: string;
61
- required?: boolean;
62
- description?: string;
63
- references?: string;
64
- referencesIdentifier?: string;
65
- relationType?: 'one-to-one' | 'one-to-many';
66
- }
67
- export interface ValidationError {
68
- type: 'schema' | 'reference';
69
- resource: string;
70
- field?: string;
71
- message: string;
72
- file: string;
73
- line?: number;
74
- severity?: 'error' | 'warning';
75
- rule?: string;
76
- }
77
- export interface LinterOptions {
78
- rootDir: string;
79
- failOnWarning?: boolean;
80
- verbose?: boolean;
81
- }
82
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- import { ParsedFile } from '../parser';
2
- import { ValidationError } from '../types';
3
- export declare const validateBestPractices: (parsedFiles: ParsedFile[]) => ValidationError[];
4
- //# sourceMappingURL=best-practices-validator.d.ts.map
@@ -1 +0,0 @@
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,EAsChF,CAAC"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateBestPractices = void 0;
4
- const validateBestPractices = (parsedFiles) => {
5
- const errors = [];
6
- for (const parsedFile of parsedFiles) {
7
- const { file, frontmatter } = parsedFile;
8
- // Check for required summary
9
- if (!frontmatter.summary || (typeof frontmatter.summary === 'string' && frontmatter.summary.trim() === '')) {
10
- errors.push({
11
- type: 'schema',
12
- resource: `${file.resourceType}/${file.resourceId}`,
13
- field: 'summary',
14
- message: 'Summary is required for better documentation',
15
- file: file.relativePath,
16
- severity: 'error',
17
- rule: 'best-practices/summary-required',
18
- });
19
- }
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)) {
24
- errors.push({
25
- type: 'schema',
26
- resource: `${file.resourceType}/${file.resourceId}`,
27
- field: 'owners',
28
- message: 'At least one owner is required',
29
- file: file.relativePath,
30
- severity: 'error',
31
- rule: 'best-practices/owner-required',
32
- });
33
- }
34
- }
35
- return errors;
36
- };
37
- exports.validateBestPractices = validateBestPractices;
38
- //# sourceMappingURL=best-practices-validator.js.map
@@ -1 +0,0 @@
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;QAEzC,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;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAtCW,QAAA,qBAAqB,yBAsChC"}
@@ -1,8 +0,0 @@
1
- export * from './schema-validator';
2
- export * from './reference-validator';
3
- export * from './best-practices-validator';
4
- import { ParsedFile } from '../parser';
5
- import { ValidationError } from '../types';
6
- import { CatalogDependencies } from '../config';
7
- export declare const validateCatalog: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ValidationError[];
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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;AAKhD,eAAO,MAAM,eAAe,GAAI,aAAa,UAAU,EAAE,EAAE,eAAe,mBAAmB,KAAG,eAAe,EAM9G,CAAC"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.validateCatalog = void 0;
18
- __exportStar(require("./schema-validator"), exports);
19
- __exportStar(require("./reference-validator"), exports);
20
- __exportStar(require("./best-practices-validator"), exports);
21
- const schema_validator_1 = require("./schema-validator");
22
- const reference_validator_1 = require("./reference-validator");
23
- const best_practices_validator_1 = require("./best-practices-validator");
24
- const validateCatalog = (parsedFiles, dependencies) => {
25
- const schemaErrors = (0, schema_validator_1.validateAllSchemas)(parsedFiles);
26
- const referenceErrors = (0, reference_validator_1.validateReferences)(parsedFiles, dependencies);
27
- const bestPracticeErrors = (0, best_practices_validator_1.validateBestPractices)(parsedFiles);
28
- return [...schemaErrors, ...referenceErrors, ...bestPracticeErrors];
29
- };
30
- exports.validateCatalog = validateCatalog;
31
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,wDAAsC;AACtC,6DAA2C;AAK3C,yDAAwD;AACxD,+DAA2D;AAC3D,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,kBAAkB,GAAG,IAAA,gDAAqB,EAAC,WAAW,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,eAAe,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACtE,CAAC,CAAC;AANW,QAAA,eAAe,mBAM1B"}
@@ -1,12 +0,0 @@
1
- import { ParsedFile } from '../parser';
2
- import { ValidationError } from '../types';
3
- import { CatalogDependencies } from '../config';
4
- interface ResourceIndex {
5
- [resourceType: string]: {
6
- [resourceId: string]: Set<string>;
7
- };
8
- }
9
- export declare const buildResourceIndex: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ResourceIndex;
10
- export declare const validateReferences: (parsedFiles: ParsedFile[], dependencies?: CatalogDependencies) => ValidationError[];
11
- export {};
12
- //# sourceMappingURL=reference-validator.d.ts.map
@@ -1 +0,0 @@
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;AA+IF,eAAO,MAAM,kBAAkB,GAAI,aAAa,UAAU,EAAE,EAAE,eAAe,mBAAmB,KAAG,eAAe,EAkCjH,CAAC"}
@@ -1,201 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateReferences = exports.buildResourceIndex = void 0;
7
- const semver_1 = __importDefault(require("semver"));
8
- const buildResourceIndex = (parsedFiles, dependencies) => {
9
- const index = {};
10
- for (const parsedFile of parsedFiles) {
11
- const { file, frontmatter } = parsedFile;
12
- const { resourceType } = file;
13
- // Use the frontmatter id field if present, otherwise fall back to filename/directory
14
- // This handles cases where:
15
- // - Filename is "aSmith.mdx" but frontmatter has id: "asmith"
16
- // - Directory is "e-commerce" but frontmatter has id: "E-Commerce"
17
- // - Directory is "UserService" but frontmatter has id: "user-service" (SentenceCase vs kebab-case)
18
- let resourceId = file.resourceId;
19
- if (frontmatter.id && typeof frontmatter.id === 'string') {
20
- resourceId = frontmatter.id;
21
- }
22
- if (!index[resourceType]) {
23
- index[resourceType] = {};
24
- }
25
- if (!index[resourceType][resourceId]) {
26
- index[resourceType][resourceId] = new Set();
27
- }
28
- if (frontmatter.version && typeof frontmatter.version === 'string') {
29
- index[resourceType][resourceId].add(frontmatter.version);
30
- }
31
- else {
32
- index[resourceType][resourceId].add('latest');
33
- }
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
- }
49
- return index;
50
- };
51
- exports.buildResourceIndex = buildResourceIndex;
52
- const checkResourceExists = (ref, resourceType, index) => {
53
- const resourceVersions = index[resourceType]?.[ref.id];
54
- if (!resourceVersions || resourceVersions.size === 0) {
55
- return false;
56
- }
57
- if (!ref.version) {
58
- return true;
59
- }
60
- const refVersion = ref.version === 'latest' ? ref.version : ref.version;
61
- const availableVersions = Array.from(resourceVersions);
62
- // Handle 'latest' specifically
63
- if (refVersion === 'latest') {
64
- return availableVersions.includes('latest') || availableVersions.length > 0;
65
- }
66
- // Check for exact match first
67
- if (availableVersions.includes(refVersion)) {
68
- return true;
69
- }
70
- // Handle semver patterns like '0.0.x', '^1.0.0', '~1.2.0', etc.
71
- try {
72
- // Filter out 'latest' from available versions for semver matching
73
- const semverVersions = availableVersions.filter((v) => v !== 'latest' && semver_1.default.valid(v));
74
- // Check if any available version satisfies the requested version pattern
75
- for (const availableVersion of semverVersions) {
76
- if (semver_1.default.satisfies(availableVersion, refVersion)) {
77
- return true;
78
- }
79
- }
80
- // Special handling for patterns like '0.0.x' which aren't standard semver ranges
81
- if (refVersion.includes('.x')) {
82
- const pattern = refVersion.replace(/\.x/g, '');
83
- for (const availableVersion of semverVersions) {
84
- if (availableVersion.startsWith(pattern)) {
85
- return true;
86
- }
87
- }
88
- }
89
- return false;
90
- }
91
- catch (error) {
92
- // If semver parsing fails, fall back to exact string match
93
- return availableVersions.includes(refVersion);
94
- }
95
- };
96
- const extractReferences = (parsedFile) => {
97
- const { file, frontmatter } = parsedFile;
98
- const references = [];
99
- if (file.resourceType === 'domain') {
100
- if (frontmatter.services && Array.isArray(frontmatter.services)) {
101
- frontmatter.services.forEach((ref) => {
102
- references.push({ ref, possibleTypes: ['service'], field: 'services' });
103
- });
104
- }
105
- if (frontmatter.domains && Array.isArray(frontmatter.domains)) {
106
- frontmatter.domains.forEach((ref) => {
107
- references.push({ ref, possibleTypes: ['domain'], field: 'domains' });
108
- });
109
- }
110
- if (frontmatter.entities && Array.isArray(frontmatter.entities)) {
111
- frontmatter.entities.forEach((ref) => {
112
- references.push({ ref, possibleTypes: ['entity'], field: 'entities' });
113
- });
114
- }
115
- }
116
- if (file.resourceType === 'service') {
117
- if (frontmatter.sends && Array.isArray(frontmatter.sends)) {
118
- frontmatter.sends.forEach((ref) => {
119
- references.push({ ref, possibleTypes: ['event', 'command', 'query'], field: 'sends' });
120
- });
121
- }
122
- if (frontmatter.receives && Array.isArray(frontmatter.receives)) {
123
- frontmatter.receives.forEach((ref) => {
124
- references.push({ ref, possibleTypes: ['event', 'command', 'query'], field: 'receives' });
125
- });
126
- }
127
- if (frontmatter.entities && Array.isArray(frontmatter.entities)) {
128
- frontmatter.entities.forEach((ref) => {
129
- references.push({ ref, possibleTypes: ['entity'], field: 'entities' });
130
- });
131
- }
132
- }
133
- if (file.resourceType === 'flow' && frontmatter.steps && Array.isArray(frontmatter.steps)) {
134
- frontmatter.steps.forEach((step, index) => {
135
- if (step.message) {
136
- references.push({
137
- ref: step.message,
138
- possibleTypes: ['event', 'command', 'query'],
139
- field: `steps[${index}].message`,
140
- });
141
- }
142
- if (step.service) {
143
- references.push({ ref: step.service, possibleTypes: ['service'], field: `steps[${index}].service` });
144
- }
145
- });
146
- }
147
- if (file.resourceType === 'entity' && frontmatter.properties && Array.isArray(frontmatter.properties)) {
148
- frontmatter.properties.forEach((prop, index) => {
149
- if (prop.references) {
150
- references.push({
151
- ref: { id: prop.references },
152
- possibleTypes: ['entity'],
153
- field: `properties[${index}].references`,
154
- });
155
- }
156
- });
157
- }
158
- if (frontmatter.owners && Array.isArray(frontmatter.owners)) {
159
- frontmatter.owners.forEach((owner) => {
160
- references.push({ ref: { id: owner }, possibleTypes: ['user', 'team'], field: 'owners' });
161
- });
162
- }
163
- if (file.resourceType === 'team' && frontmatter.members && Array.isArray(frontmatter.members)) {
164
- frontmatter.members.forEach((member) => {
165
- references.push({ ref: { id: member }, possibleTypes: ['user'], field: 'members' });
166
- });
167
- }
168
- return references;
169
- };
170
- const validateReferences = (parsedFiles, dependencies) => {
171
- const index = (0, exports.buildResourceIndex)(parsedFiles, dependencies);
172
- const errors = [];
173
- for (const parsedFile of parsedFiles) {
174
- const references = extractReferences(parsedFile);
175
- for (const { ref, possibleTypes, field } of references) {
176
- const found = possibleTypes.some((type) => checkResourceExists(ref, type, index));
177
- if (!found) {
178
- const versionStr = ref.version ? ` (version: ${ref.version})` : '';
179
- const typeStr = possibleTypes.length === 1 ? possibleTypes[0] : possibleTypes.join('/');
180
- let rule = 'refs/resource-exists';
181
- if (field === 'owners') {
182
- rule = 'refs/owner-exists';
183
- }
184
- else if (ref.version) {
185
- rule = 'refs/valid-version-range';
186
- }
187
- errors.push({
188
- type: 'reference',
189
- resource: `${parsedFile.file.resourceType}/${parsedFile.file.resourceId}`,
190
- field,
191
- message: `Referenced ${typeStr} "${ref.id}"${versionStr} does not exist`,
192
- file: parsedFile.file.relativePath,
193
- rule,
194
- });
195
- }
196
- }
197
- }
198
- return errors;
199
- };
200
- exports.validateReferences = validateReferences;
201
- //# sourceMappingURL=reference-validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validators/reference-validator.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { ParsedFile } from '../parser';
2
- import { ValidationError } from '../types';
3
- export declare const validateSchema: (parsedFile: ParsedFile) => ValidationError[];
4
- export declare const validateAllSchemas: (parsedFiles: ParsedFile[]) => ValidationError[];
5
- //# sourceMappingURL=schema-validator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../src/validators/schema-validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,cAAc,GAAI,YAAY,UAAU,KAAG,eAAe,EA+CtE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,aAAa,UAAU,EAAE,KAAG,eAAe,EAQ7E,CAAC"}
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateAllSchemas = exports.validateSchema = void 0;
4
- const zod_1 = require("zod");
5
- const schemas_1 = require("../schemas");
6
- const validateSchema = (parsedFile) => {
7
- const { file, frontmatter } = parsedFile;
8
- const schema = schemas_1.schemas[file.resourceType];
9
- const errors = [];
10
- try {
11
- schema.parse(frontmatter);
12
- }
13
- catch (error) {
14
- if (error instanceof zod_1.z.ZodError) {
15
- for (const issue of error.issues) {
16
- const field = issue.path.join('.');
17
- let message = issue.message;
18
- if (issue.code === 'invalid_type') {
19
- message = `Expected ${issue.expected}, but received ${issue.received}`;
20
- }
21
- let rule = 'schema/required-fields';
22
- if (issue.code === 'invalid_type') {
23
- rule = 'schema/valid-type';
24
- }
25
- else if (issue.code === 'invalid_string' && issue.validation === 'email') {
26
- rule = 'schema/valid-email';
27
- }
28
- else if (field && field.includes('version')) {
29
- rule = 'schema/valid-semver';
30
- }
31
- errors.push({
32
- type: 'schema',
33
- resource: `${file.resourceType}/${file.resourceId}`,
34
- field: field || undefined,
35
- message: field ? `${field}: ${message}` : message,
36
- file: file.relativePath,
37
- rule,
38
- });
39
- }
40
- }
41
- else {
42
- errors.push({
43
- type: 'schema',
44
- resource: `${file.resourceType}/${file.resourceId}`,
45
- message: error instanceof Error ? error.message : String(error),
46
- file: file.relativePath,
47
- rule: 'schema/validation-error',
48
- });
49
- }
50
- }
51
- return errors;
52
- };
53
- exports.validateSchema = validateSchema;
54
- const validateAllSchemas = (parsedFiles) => {
55
- const errors = [];
56
- for (const parsedFile of parsedFiles) {
57
- errors.push(...(0, exports.validateSchema)(parsedFile));
58
- }
59
- return errors;
60
- };
61
- exports.validateAllSchemas = validateAllSchemas;
62
- //# sourceMappingURL=schema-validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/validators/schema-validator.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,wCAAqC;AAI9B,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAqB,EAAE;IAC1E,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IACzC,MAAM,MAAM,GAAG,iBAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAE5B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAClC,OAAO,GAAG,YAAY,KAAK,CAAC,QAAQ,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzE,CAAC;gBAED,IAAI,IAAI,GAAG,wBAAwB,CAAC;gBACpC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAClC,IAAI,GAAG,mBAAmB,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;oBAC3E,IAAI,GAAG,oBAAoB,CAAC;gBAC9B,CAAC;qBAAM,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9C,IAAI,GAAG,qBAAqB,CAAC;gBAC/B,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnD,KAAK,EAAE,KAAK,IAAI,SAAS;oBACzB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO;oBACjD,IAAI,EAAE,IAAI,CAAC,YAAY;oBACvB,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnD,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/D,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,IAAI,EAAE,yBAAyB;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA/CW,QAAA,cAAc,kBA+CzB;AAEK,MAAM,kBAAkB,GAAG,CAAC,WAAyB,EAAqB,EAAE;IACjF,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAA,sBAAc,EAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AARW,QAAA,kBAAkB,sBAQ7B"}