@principal-ai/principal-view-core 0.5.6

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 (204) hide show
  1. package/README.md +126 -0
  2. package/dist/ConfigurationLoader.d.ts +76 -0
  3. package/dist/ConfigurationLoader.d.ts.map +1 -0
  4. package/dist/ConfigurationLoader.js +144 -0
  5. package/dist/ConfigurationLoader.js.map +1 -0
  6. package/dist/ConfigurationValidator.d.ts +31 -0
  7. package/dist/ConfigurationValidator.d.ts.map +1 -0
  8. package/dist/ConfigurationValidator.js +242 -0
  9. package/dist/ConfigurationValidator.js.map +1 -0
  10. package/dist/EventProcessor.d.ts +49 -0
  11. package/dist/EventProcessor.d.ts.map +1 -0
  12. package/dist/EventProcessor.js +215 -0
  13. package/dist/EventProcessor.js.map +1 -0
  14. package/dist/EventRecorderService.d.ts +305 -0
  15. package/dist/EventRecorderService.d.ts.map +1 -0
  16. package/dist/EventRecorderService.js +463 -0
  17. package/dist/EventRecorderService.js.map +1 -0
  18. package/dist/LibraryLoader.d.ts +63 -0
  19. package/dist/LibraryLoader.d.ts.map +1 -0
  20. package/dist/LibraryLoader.js +188 -0
  21. package/dist/LibraryLoader.js.map +1 -0
  22. package/dist/PathBasedEventProcessor.d.ts +90 -0
  23. package/dist/PathBasedEventProcessor.d.ts.map +1 -0
  24. package/dist/PathBasedEventProcessor.js +239 -0
  25. package/dist/PathBasedEventProcessor.js.map +1 -0
  26. package/dist/SessionManager.d.ts +194 -0
  27. package/dist/SessionManager.d.ts.map +1 -0
  28. package/dist/SessionManager.js +299 -0
  29. package/dist/SessionManager.js.map +1 -0
  30. package/dist/ValidationEngine.d.ts +31 -0
  31. package/dist/ValidationEngine.d.ts.map +1 -0
  32. package/dist/ValidationEngine.js +158 -0
  33. package/dist/ValidationEngine.js.map +1 -0
  34. package/dist/helpers/GraphInstrumentationHelper.d.ts +93 -0
  35. package/dist/helpers/GraphInstrumentationHelper.d.ts.map +1 -0
  36. package/dist/helpers/GraphInstrumentationHelper.js +248 -0
  37. package/dist/helpers/GraphInstrumentationHelper.js.map +1 -0
  38. package/dist/index.d.ts +33 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +34 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/rules/config.d.ts +57 -0
  43. package/dist/rules/config.d.ts.map +1 -0
  44. package/dist/rules/config.js +382 -0
  45. package/dist/rules/config.js.map +1 -0
  46. package/dist/rules/engine.d.ts +70 -0
  47. package/dist/rules/engine.d.ts.map +1 -0
  48. package/dist/rules/engine.js +252 -0
  49. package/dist/rules/engine.js.map +1 -0
  50. package/dist/rules/implementations/connection-type-references.d.ts +7 -0
  51. package/dist/rules/implementations/connection-type-references.d.ts.map +1 -0
  52. package/dist/rules/implementations/connection-type-references.js +104 -0
  53. package/dist/rules/implementations/connection-type-references.js.map +1 -0
  54. package/dist/rules/implementations/dead-end-states.d.ts +17 -0
  55. package/dist/rules/implementations/dead-end-states.d.ts.map +1 -0
  56. package/dist/rules/implementations/dead-end-states.js +72 -0
  57. package/dist/rules/implementations/dead-end-states.js.map +1 -0
  58. package/dist/rules/implementations/index.d.ts +24 -0
  59. package/dist/rules/implementations/index.d.ts.map +1 -0
  60. package/dist/rules/implementations/index.js +62 -0
  61. package/dist/rules/implementations/index.js.map +1 -0
  62. package/dist/rules/implementations/library-node-type-match.d.ts +17 -0
  63. package/dist/rules/implementations/library-node-type-match.d.ts.map +1 -0
  64. package/dist/rules/implementations/library-node-type-match.js +123 -0
  65. package/dist/rules/implementations/library-node-type-match.js.map +1 -0
  66. package/dist/rules/implementations/minimum-node-sources.d.ts +22 -0
  67. package/dist/rules/implementations/minimum-node-sources.d.ts.map +1 -0
  68. package/dist/rules/implementations/minimum-node-sources.js +54 -0
  69. package/dist/rules/implementations/minimum-node-sources.js.map +1 -0
  70. package/dist/rules/implementations/no-unknown-fields.d.ts +7 -0
  71. package/dist/rules/implementations/no-unknown-fields.d.ts.map +1 -0
  72. package/dist/rules/implementations/no-unknown-fields.js +211 -0
  73. package/dist/rules/implementations/no-unknown-fields.js.map +1 -0
  74. package/dist/rules/implementations/orphaned-edge-types.d.ts +7 -0
  75. package/dist/rules/implementations/orphaned-edge-types.d.ts.map +1 -0
  76. package/dist/rules/implementations/orphaned-edge-types.js +47 -0
  77. package/dist/rules/implementations/orphaned-edge-types.js.map +1 -0
  78. package/dist/rules/implementations/orphaned-node-types.d.ts +7 -0
  79. package/dist/rules/implementations/orphaned-node-types.d.ts.map +1 -0
  80. package/dist/rules/implementations/orphaned-node-types.js +50 -0
  81. package/dist/rules/implementations/orphaned-node-types.js.map +1 -0
  82. package/dist/rules/implementations/required-metadata.d.ts +7 -0
  83. package/dist/rules/implementations/required-metadata.d.ts.map +1 -0
  84. package/dist/rules/implementations/required-metadata.js +57 -0
  85. package/dist/rules/implementations/required-metadata.js.map +1 -0
  86. package/dist/rules/implementations/state-transition-references.d.ts +7 -0
  87. package/dist/rules/implementations/state-transition-references.d.ts.map +1 -0
  88. package/dist/rules/implementations/state-transition-references.js +135 -0
  89. package/dist/rules/implementations/state-transition-references.js.map +1 -0
  90. package/dist/rules/implementations/unreachable-states.d.ts +7 -0
  91. package/dist/rules/implementations/unreachable-states.d.ts.map +1 -0
  92. package/dist/rules/implementations/unreachable-states.js +80 -0
  93. package/dist/rules/implementations/unreachable-states.js.map +1 -0
  94. package/dist/rules/implementations/valid-action-patterns.d.ts +17 -0
  95. package/dist/rules/implementations/valid-action-patterns.d.ts.map +1 -0
  96. package/dist/rules/implementations/valid-action-patterns.js +109 -0
  97. package/dist/rules/implementations/valid-action-patterns.js.map +1 -0
  98. package/dist/rules/implementations/valid-color-format.d.ts +7 -0
  99. package/dist/rules/implementations/valid-color-format.d.ts.map +1 -0
  100. package/dist/rules/implementations/valid-color-format.js +91 -0
  101. package/dist/rules/implementations/valid-color-format.js.map +1 -0
  102. package/dist/rules/implementations/valid-edge-types.d.ts +7 -0
  103. package/dist/rules/implementations/valid-edge-types.d.ts.map +1 -0
  104. package/dist/rules/implementations/valid-edge-types.js +244 -0
  105. package/dist/rules/implementations/valid-edge-types.js.map +1 -0
  106. package/dist/rules/implementations/valid-node-types.d.ts +7 -0
  107. package/dist/rules/implementations/valid-node-types.d.ts.map +1 -0
  108. package/dist/rules/implementations/valid-node-types.js +175 -0
  109. package/dist/rules/implementations/valid-node-types.js.map +1 -0
  110. package/dist/rules/index.d.ts +28 -0
  111. package/dist/rules/index.d.ts.map +1 -0
  112. package/dist/rules/index.js +45 -0
  113. package/dist/rules/index.js.map +1 -0
  114. package/dist/rules/types.d.ts +309 -0
  115. package/dist/rules/types.d.ts.map +1 -0
  116. package/dist/rules/types.js +35 -0
  117. package/dist/rules/types.js.map +1 -0
  118. package/dist/types/canvas.d.ts +409 -0
  119. package/dist/types/canvas.d.ts.map +1 -0
  120. package/dist/types/canvas.js +70 -0
  121. package/dist/types/canvas.js.map +1 -0
  122. package/dist/types/index.d.ts +311 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/index.js +13 -0
  125. package/dist/types/index.js.map +1 -0
  126. package/dist/types/library.d.ts +185 -0
  127. package/dist/types/library.d.ts.map +1 -0
  128. package/dist/types/library.js +15 -0
  129. package/dist/types/library.js.map +1 -0
  130. package/dist/types/path-based-config.d.ts +230 -0
  131. package/dist/types/path-based-config.d.ts.map +1 -0
  132. package/dist/types/path-based-config.js +9 -0
  133. package/dist/types/path-based-config.js.map +1 -0
  134. package/dist/utils/CanvasConverter.d.ts +118 -0
  135. package/dist/utils/CanvasConverter.d.ts.map +1 -0
  136. package/dist/utils/CanvasConverter.js +315 -0
  137. package/dist/utils/CanvasConverter.js.map +1 -0
  138. package/dist/utils/GraphConverter.d.ts +18 -0
  139. package/dist/utils/GraphConverter.d.ts.map +1 -0
  140. package/dist/utils/GraphConverter.js +61 -0
  141. package/dist/utils/GraphConverter.js.map +1 -0
  142. package/dist/utils/LibraryConverter.d.ts +113 -0
  143. package/dist/utils/LibraryConverter.d.ts.map +1 -0
  144. package/dist/utils/LibraryConverter.js +166 -0
  145. package/dist/utils/LibraryConverter.js.map +1 -0
  146. package/dist/utils/PathMatcher.d.ts +55 -0
  147. package/dist/utils/PathMatcher.d.ts.map +1 -0
  148. package/dist/utils/PathMatcher.js +172 -0
  149. package/dist/utils/PathMatcher.js.map +1 -0
  150. package/dist/utils/YamlParser.d.ts +36 -0
  151. package/dist/utils/YamlParser.d.ts.map +1 -0
  152. package/dist/utils/YamlParser.js +63 -0
  153. package/dist/utils/YamlParser.js.map +1 -0
  154. package/package.json +47 -0
  155. package/src/ConfigurationLoader.test.ts +490 -0
  156. package/src/ConfigurationLoader.ts +185 -0
  157. package/src/ConfigurationValidator.test.ts +200 -0
  158. package/src/ConfigurationValidator.ts +283 -0
  159. package/src/EventProcessor.test.ts +405 -0
  160. package/src/EventProcessor.ts +250 -0
  161. package/src/EventRecorderService.test.ts +541 -0
  162. package/src/EventRecorderService.ts +744 -0
  163. package/src/LibraryLoader.ts +215 -0
  164. package/src/PathBasedEventProcessor.test.ts +567 -0
  165. package/src/PathBasedEventProcessor.ts +332 -0
  166. package/src/SessionManager.test.ts +424 -0
  167. package/src/SessionManager.ts +470 -0
  168. package/src/ValidationEngine.test.ts +371 -0
  169. package/src/ValidationEngine.ts +196 -0
  170. package/src/helpers/GraphInstrumentationHelper.test.ts +340 -0
  171. package/src/helpers/GraphInstrumentationHelper.ts +326 -0
  172. package/src/index.ts +85 -0
  173. package/src/rules/config.test.ts +278 -0
  174. package/src/rules/config.ts +459 -0
  175. package/src/rules/engine.test.ts +332 -0
  176. package/src/rules/engine.ts +318 -0
  177. package/src/rules/implementations/connection-type-references.ts +117 -0
  178. package/src/rules/implementations/dead-end-states.ts +101 -0
  179. package/src/rules/implementations/index.ts +73 -0
  180. package/src/rules/implementations/library-node-type-match.ts +148 -0
  181. package/src/rules/implementations/minimum-node-sources.ts +82 -0
  182. package/src/rules/implementations/no-unknown-fields.ts +342 -0
  183. package/src/rules/implementations/orphaned-edge-types.ts +55 -0
  184. package/src/rules/implementations/orphaned-node-types.ts +58 -0
  185. package/src/rules/implementations/required-metadata.ts +64 -0
  186. package/src/rules/implementations/state-transition-references.ts +151 -0
  187. package/src/rules/implementations/unreachable-states.ts +94 -0
  188. package/src/rules/implementations/valid-action-patterns.ts +136 -0
  189. package/src/rules/implementations/valid-color-format.ts +140 -0
  190. package/src/rules/implementations/valid-edge-types.ts +258 -0
  191. package/src/rules/implementations/valid-node-types.ts +189 -0
  192. package/src/rules/index.ts +95 -0
  193. package/src/rules/types.ts +426 -0
  194. package/src/types/canvas.ts +496 -0
  195. package/src/types/index.ts +382 -0
  196. package/src/types/library.ts +233 -0
  197. package/src/types/path-based-config.ts +281 -0
  198. package/src/utils/CanvasConverter.ts +431 -0
  199. package/src/utils/GraphConverter.test.ts +195 -0
  200. package/src/utils/GraphConverter.ts +71 -0
  201. package/src/utils/LibraryConverter.ts +245 -0
  202. package/src/utils/PathMatcher.test.ts +148 -0
  203. package/src/utils/PathMatcher.ts +183 -0
  204. package/src/utils/YamlParser.ts +75 -0
@@ -0,0 +1,382 @@
1
+ /**
2
+ * VGC Configuration Loader and Validator
3
+ * Handles loading and validating .vgcrc files
4
+ */
5
+ // ============================================================================
6
+ // Constants
7
+ // ============================================================================
8
+ /**
9
+ * Valid config file names in resolution order
10
+ */
11
+ export const CONFIG_FILE_NAMES = [
12
+ '.vgcrc.json',
13
+ '.vgcrc.yaml',
14
+ '.vgcrc.yml',
15
+ 'vgc.config.json',
16
+ 'vgc.config.yaml',
17
+ 'vgc.config.yml',
18
+ ];
19
+ /**
20
+ * Default include patterns
21
+ */
22
+ export const DEFAULT_INCLUDE_PATTERNS = ['.vgc/**/*.yaml', '.vgc/**/*.yml', '.vgc/**/*.json'];
23
+ /**
24
+ * Default exclude patterns
25
+ */
26
+ export const DEFAULT_EXCLUDE_PATTERNS = ['**/node_modules/**', '**/*.test.*'];
27
+ /**
28
+ * Valid severity values
29
+ */
30
+ export const VALID_SEVERITIES = [
31
+ 'off',
32
+ 'warn',
33
+ 'error',
34
+ 0,
35
+ 1,
36
+ 2,
37
+ false,
38
+ ];
39
+ /**
40
+ * All valid rule IDs
41
+ */
42
+ export const VALID_RULE_IDS = [
43
+ // Schema rules
44
+ 'no-unknown-fields',
45
+ 'required-metadata',
46
+ 'valid-node-types',
47
+ 'valid-edge-types',
48
+ 'valid-color-format',
49
+ // Reference rules
50
+ 'connection-type-references',
51
+ 'state-transition-references',
52
+ // Structure rules
53
+ 'minimum-node-sources',
54
+ 'orphaned-node-types',
55
+ 'orphaned-edge-types',
56
+ 'unreachable-states',
57
+ 'dead-end-states',
58
+ // Pattern rules
59
+ 'valid-action-patterns',
60
+ // Library rules
61
+ 'library-node-type-match',
62
+ ];
63
+ /**
64
+ * Rule-specific valid options
65
+ */
66
+ export const RULE_OPTIONS_SCHEMA = {
67
+ 'minimum-node-sources': ['minimum', 'excludeNodeTypes'],
68
+ 'dead-end-states': ['terminalStates'],
69
+ 'valid-action-patterns': ['strictMode'],
70
+ 'library-node-type-match': ['allowExtra'],
71
+ };
72
+ // ============================================================================
73
+ // Validation Functions
74
+ // ============================================================================
75
+ /**
76
+ * Validate a VGC configuration object
77
+ */
78
+ export function validatePrivuConfig(config) {
79
+ const errors = [];
80
+ if (typeof config !== 'object' || config === null) {
81
+ return {
82
+ valid: false,
83
+ errors: [{ path: '', message: 'Configuration must be an object' }],
84
+ };
85
+ }
86
+ const configObj = config;
87
+ // Validate known top-level fields
88
+ const validTopLevelFields = [
89
+ '$schema',
90
+ 'extends',
91
+ 'root',
92
+ 'library',
93
+ 'include',
94
+ 'exclude',
95
+ 'rules',
96
+ ];
97
+ for (const key of Object.keys(configObj)) {
98
+ if (!validTopLevelFields.includes(key)) {
99
+ const suggestion = findSimilarString(key, validTopLevelFields);
100
+ errors.push({
101
+ path: key,
102
+ message: `Unknown configuration field "${key}"`,
103
+ suggestion: suggestion ? `Did you mean "${suggestion}"?` : undefined,
104
+ });
105
+ }
106
+ }
107
+ // Validate $schema
108
+ if (configObj.$schema !== undefined && typeof configObj.$schema !== 'string') {
109
+ errors.push({
110
+ path: '$schema',
111
+ message: '$schema must be a string',
112
+ });
113
+ }
114
+ // Validate extends
115
+ if (configObj.extends !== undefined) {
116
+ if (typeof configObj.extends !== 'string' &&
117
+ !(Array.isArray(configObj.extends) &&
118
+ configObj.extends.every((e) => typeof e === 'string'))) {
119
+ errors.push({
120
+ path: 'extends',
121
+ message: 'extends must be a string or array of strings',
122
+ });
123
+ }
124
+ }
125
+ // Validate root
126
+ if (configObj.root !== undefined && typeof configObj.root !== 'boolean') {
127
+ errors.push({
128
+ path: 'root',
129
+ message: 'root must be a boolean',
130
+ });
131
+ }
132
+ // Validate library
133
+ if (configObj.library !== undefined && typeof configObj.library !== 'string') {
134
+ errors.push({
135
+ path: 'library',
136
+ message: 'library must be a string path',
137
+ });
138
+ }
139
+ // Validate include
140
+ if (configObj.include !== undefined) {
141
+ if (!Array.isArray(configObj.include) ||
142
+ !configObj.include.every((p) => typeof p === 'string')) {
143
+ errors.push({
144
+ path: 'include',
145
+ message: 'include must be an array of strings',
146
+ });
147
+ }
148
+ }
149
+ // Validate exclude
150
+ if (configObj.exclude !== undefined) {
151
+ if (!Array.isArray(configObj.exclude) ||
152
+ !configObj.exclude.every((p) => typeof p === 'string')) {
153
+ errors.push({
154
+ path: 'exclude',
155
+ message: 'exclude must be an array of strings',
156
+ });
157
+ }
158
+ }
159
+ // Validate rules
160
+ if (configObj.rules !== undefined) {
161
+ if (typeof configObj.rules !== 'object' || configObj.rules === null) {
162
+ errors.push({
163
+ path: 'rules',
164
+ message: 'rules must be an object',
165
+ });
166
+ }
167
+ else {
168
+ const rulesErrors = validateRulesConfig(configObj.rules);
169
+ errors.push(...rulesErrors);
170
+ }
171
+ }
172
+ if (errors.length > 0) {
173
+ return { valid: false, errors };
174
+ }
175
+ return {
176
+ valid: true,
177
+ errors: [],
178
+ config: configObj,
179
+ };
180
+ }
181
+ /**
182
+ * Validate the rules section of a VGC config
183
+ */
184
+ function validateRulesConfig(rules) {
185
+ const errors = [];
186
+ for (const [ruleId, ruleConfig] of Object.entries(rules)) {
187
+ const path = `rules.${ruleId}`;
188
+ // Check if rule ID is valid
189
+ if (!VALID_RULE_IDS.includes(ruleId)) {
190
+ const suggestion = findSimilarString(ruleId, [...VALID_RULE_IDS]);
191
+ errors.push({
192
+ path,
193
+ message: `Unknown rule ID "${ruleId}"`,
194
+ suggestion: suggestion ? `Did you mean "${suggestion}"?` : undefined,
195
+ });
196
+ continue;
197
+ }
198
+ // Handle false (disabled)
199
+ if (ruleConfig === false) {
200
+ continue;
201
+ }
202
+ // Handle severity shorthand
203
+ if (typeof ruleConfig === 'string' || typeof ruleConfig === 'number') {
204
+ if (!isValidSeverity(ruleConfig)) {
205
+ errors.push({
206
+ path,
207
+ message: `Invalid severity "${ruleConfig}" for rule "${ruleId}"`,
208
+ suggestion: 'Allowed values: "off", "warn", "error", 0, 1, 2',
209
+ });
210
+ }
211
+ continue;
212
+ }
213
+ // Handle full config object
214
+ if (typeof ruleConfig !== 'object' || ruleConfig === null) {
215
+ errors.push({
216
+ path,
217
+ message: `Rule configuration must be a severity string, number, false, or config object`,
218
+ });
219
+ continue;
220
+ }
221
+ const ruleConfigObj = ruleConfig;
222
+ // Validate config object fields
223
+ const validRuleConfigFields = ['severity', 'options'];
224
+ for (const key of Object.keys(ruleConfigObj)) {
225
+ if (!validRuleConfigFields.includes(key)) {
226
+ errors.push({
227
+ path: `${path}.${key}`,
228
+ message: `Unknown rule config field "${key}"`,
229
+ suggestion: `Allowed fields: ${validRuleConfigFields.join(', ')}`,
230
+ });
231
+ }
232
+ }
233
+ // Validate severity
234
+ if (ruleConfigObj.severity !== undefined) {
235
+ if (!isValidSeverity(ruleConfigObj.severity)) {
236
+ errors.push({
237
+ path: `${path}.severity`,
238
+ message: `Invalid severity "${ruleConfigObj.severity}"`,
239
+ suggestion: 'Allowed values: "off", "warn", "error", 0, 1, 2',
240
+ });
241
+ }
242
+ }
243
+ // Validate options
244
+ if (ruleConfigObj.options !== undefined) {
245
+ if (typeof ruleConfigObj.options !== 'object' || ruleConfigObj.options === null) {
246
+ errors.push({
247
+ path: `${path}.options`,
248
+ message: 'options must be an object',
249
+ });
250
+ }
251
+ else {
252
+ // Validate rule-specific options
253
+ const validOptions = RULE_OPTIONS_SCHEMA[ruleId];
254
+ if (validOptions) {
255
+ const optionsObj = ruleConfigObj.options;
256
+ for (const optionKey of Object.keys(optionsObj)) {
257
+ if (!validOptions.includes(optionKey)) {
258
+ const suggestion = findSimilarString(optionKey, validOptions);
259
+ errors.push({
260
+ path: `${path}.options.${optionKey}`,
261
+ message: `Unknown option "${optionKey}" for rule "${ruleId}"`,
262
+ suggestion: suggestion
263
+ ? `Did you mean "${suggestion}"?`
264
+ : `Allowed options: ${validOptions.join(', ')}`,
265
+ });
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ return errors;
273
+ }
274
+ /**
275
+ * Check if a value is a valid severity
276
+ */
277
+ function isValidSeverity(value) {
278
+ return VALID_SEVERITIES.includes(value);
279
+ }
280
+ // ============================================================================
281
+ // Default Config
282
+ // ============================================================================
283
+ /**
284
+ * Get the default VGC configuration
285
+ */
286
+ export function getDefaultConfig() {
287
+ return {
288
+ root: false,
289
+ include: DEFAULT_INCLUDE_PATTERNS,
290
+ exclude: DEFAULT_EXCLUDE_PATTERNS,
291
+ rules: {},
292
+ };
293
+ }
294
+ /**
295
+ * Merge configs with proper precedence (later configs override earlier)
296
+ */
297
+ export function mergeConfigs(...configs) {
298
+ const result = getDefaultConfig();
299
+ for (const config of configs) {
300
+ if (!config)
301
+ continue;
302
+ if (config.root !== undefined)
303
+ result.root = config.root;
304
+ if (config.library !== undefined)
305
+ result.library = config.library;
306
+ if (config.include !== undefined)
307
+ result.include = config.include;
308
+ if (config.exclude !== undefined)
309
+ result.exclude = config.exclude;
310
+ // Merge rules
311
+ if (config.rules) {
312
+ result.rules = { ...result.rules, ...config.rules };
313
+ }
314
+ }
315
+ return result;
316
+ }
317
+ // ============================================================================
318
+ // Utility Functions
319
+ // ============================================================================
320
+ /**
321
+ * Find a similar string from a list (for "did you mean" suggestions)
322
+ */
323
+ function findSimilarString(input, candidates) {
324
+ const inputLower = input.toLowerCase();
325
+ let bestMatch = null;
326
+ let bestDistance = Infinity;
327
+ for (const candidate of candidates) {
328
+ const candidateLower = candidate.toLowerCase();
329
+ // Exact substring match
330
+ if (inputLower.includes(candidateLower) || candidateLower.includes(inputLower)) {
331
+ return candidate;
332
+ }
333
+ // Calculate Levenshtein distance
334
+ const distance = levenshteinDistance(inputLower, candidateLower);
335
+ // Accept if distance is small relative to string length
336
+ if (distance <= 3 && distance < bestDistance) {
337
+ bestDistance = distance;
338
+ bestMatch = candidate;
339
+ }
340
+ }
341
+ return bestMatch;
342
+ }
343
+ /**
344
+ * Calculate Levenshtein edit distance between two strings
345
+ */
346
+ function levenshteinDistance(a, b) {
347
+ const matrix = [];
348
+ // Initialize matrix
349
+ for (let i = 0; i <= a.length; i++) {
350
+ matrix[i] = [i];
351
+ }
352
+ for (let j = 0; j <= b.length; j++) {
353
+ matrix[0][j] = j;
354
+ }
355
+ // Fill matrix
356
+ for (let i = 1; i <= a.length; i++) {
357
+ for (let j = 1; j <= b.length; j++) {
358
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
359
+ matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion
360
+ matrix[i][j - 1] + 1, // insertion
361
+ matrix[i - 1][j - 1] + cost // substitution
362
+ );
363
+ }
364
+ }
365
+ return matrix[a.length][b.length];
366
+ }
367
+ /**
368
+ * Format config validation errors for display
369
+ */
370
+ export function formatConfigErrors(errors) {
371
+ const lines = [];
372
+ for (const error of errors) {
373
+ lines.push(` error ${error.path || '(root)'}: ${error.message}`);
374
+ if (error.suggestion) {
375
+ lines.push(` → ${error.suggestion}`);
376
+ }
377
+ }
378
+ lines.push('');
379
+ lines.push(` ✖ ${errors.length} configuration error${errors.length === 1 ? '' : 's'}`);
380
+ return lines.join('\n');
381
+ }
382
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/rules/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Graph Rules Engine
3
+ * Central orchestrator for configuration validation rules
4
+ */
5
+ import type { GraphConfiguration } from '../types';
6
+ import type { GraphRule, GraphLintResult, LintOptions, RuleCategory, PrivuConfig } from './types';
7
+ /**
8
+ * Graph Rules Engine - validates GraphConfiguration against registered rules
9
+ */
10
+ export declare class GraphRulesEngine {
11
+ private rules;
12
+ constructor();
13
+ /**
14
+ * Register a single rule
15
+ */
16
+ registerRule(rule: GraphRule): void;
17
+ /**
18
+ * Register multiple rules at once
19
+ */
20
+ registerRules(rules: GraphRule[]): void;
21
+ /**
22
+ * Unregister a rule by ID
23
+ */
24
+ unregisterRule(ruleId: string): boolean;
25
+ /**
26
+ * Get a rule by ID
27
+ */
28
+ getRule(ruleId: string): GraphRule | undefined;
29
+ /**
30
+ * Get all registered rules
31
+ */
32
+ getAllRules(): Map<string, GraphRule>;
33
+ /**
34
+ * Get rules by category
35
+ */
36
+ getRulesByCategory(category: RuleCategory): GraphRule[];
37
+ /**
38
+ * Lint a configuration against all enabled rules
39
+ */
40
+ lint(configuration: GraphConfiguration, options?: LintOptions): Promise<GraphLintResult>;
41
+ /**
42
+ * Lint a configuration with VGC config file settings applied
43
+ */
44
+ lintWithConfig(configuration: GraphConfiguration, privuConfig: PrivuConfig, options?: Omit<LintOptions, 'ruleOptions' | 'severityOverrides'>): Promise<GraphLintResult>;
45
+ /**
46
+ * Check if a rule should run based on options
47
+ */
48
+ private shouldRunRule;
49
+ /**
50
+ * Get the effective severity for a rule
51
+ */
52
+ private getEffectiveSeverity;
53
+ /**
54
+ * Build the context object for a rule
55
+ */
56
+ private buildRuleContext;
57
+ /**
58
+ * Build the final lint result from violations
59
+ */
60
+ private buildResult;
61
+ /**
62
+ * Parse VGC config rules into lint options
63
+ */
64
+ private parsePrivuConfigRules;
65
+ }
66
+ /**
67
+ * Create a new rules engine with optional initial rules
68
+ */
69
+ export declare function createRulesEngine(rules?: GraphRule[]): GraphRulesEngine;
70
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/rules/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EACV,SAAS,EAGT,eAAe,EACf,WAAW,EAGX,YAAY,EACZ,WAAW,EAGZ,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAqC;;IAMlD;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAOnC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAMvC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI9C;;OAEG;IACH,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAIrC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE;IAIvD;;OAEG;IACG,IAAI,CAAC,aAAa,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IA0C9F;;OAEG;IACG,cAAc,CAClB,aAAa,EAAE,kBAAkB,EACjC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,mBAAmB,CAAC,GAC/D,OAAO,CAAC,eAAe,CAAC;IAc3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgDnB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAkD9B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAMvE"}