@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,244 @@
1
+ /**
2
+ * Rule: valid-edge-types
3
+ * Ensures edgeTypes have required fields and valid values
4
+ */
5
+ /**
6
+ * Valid style values for edges
7
+ */
8
+ const VALID_STYLES = ['solid', 'dashed', 'dotted', 'animated'];
9
+ /**
10
+ * Valid animation types
11
+ */
12
+ const VALID_ANIMATION_TYPES = ['flow', 'pulse', 'particle', 'glow'];
13
+ /**
14
+ * Valid label positions
15
+ */
16
+ const VALID_LABEL_POSITIONS = ['start', 'middle', 'end'];
17
+ /**
18
+ * Valid data schema field types
19
+ */
20
+ const VALID_DATA_TYPES = ['string', 'number', 'boolean', 'object', 'array'];
21
+ export const validEdgeTypes = {
22
+ id: 'valid-edge-types',
23
+ name: 'Valid Edge Types',
24
+ description: 'edgeTypes must have required fields and valid values',
25
+ impact: 'Invalid edge types will cause rendering errors or unexpected behavior',
26
+ severity: 'error',
27
+ category: 'schema',
28
+ enabled: true,
29
+ fixable: false,
30
+ async check(context) {
31
+ const violations = [];
32
+ const { configuration, configPath } = context;
33
+ if (!configuration.edgeTypes) {
34
+ violations.push({
35
+ ruleId: 'valid-edge-types',
36
+ severity: 'error',
37
+ file: configPath,
38
+ path: 'edgeTypes',
39
+ message: 'Configuration is missing edgeTypes section',
40
+ impact: 'No edges can be defined without edgeTypes',
41
+ suggestion: 'Add an edgeTypes section with at least one edge type definition',
42
+ fixable: false,
43
+ });
44
+ return violations;
45
+ }
46
+ if (Object.keys(configuration.edgeTypes).length === 0) {
47
+ violations.push({
48
+ ruleId: 'valid-edge-types',
49
+ severity: 'error',
50
+ file: configPath,
51
+ path: 'edgeTypes',
52
+ message: 'edgeTypes section is empty',
53
+ impact: 'No edges can be defined without at least one edge type',
54
+ suggestion: 'Add at least one edge type definition',
55
+ fixable: false,
56
+ });
57
+ return violations;
58
+ }
59
+ for (const [typeId, edgeType] of Object.entries(configuration.edgeTypes)) {
60
+ const basePath = `edgeTypes.${typeId}`;
61
+ // Check required style field
62
+ if (!edgeType.style) {
63
+ violations.push({
64
+ ruleId: 'valid-edge-types',
65
+ severity: 'error',
66
+ file: configPath,
67
+ path: `${basePath}.style`,
68
+ message: `Edge type "${typeId}" is missing required "style" field`,
69
+ impact: 'Edge cannot be rendered without a style',
70
+ suggestion: `Add a style field. Valid values: ${VALID_STYLES.join(', ')}`,
71
+ fixable: false,
72
+ });
73
+ }
74
+ else if (!VALID_STYLES.includes(edgeType.style)) {
75
+ violations.push({
76
+ ruleId: 'valid-edge-types',
77
+ severity: 'error',
78
+ file: configPath,
79
+ path: `${basePath}.style`,
80
+ message: `Edge type "${typeId}" has invalid style "${edgeType.style}"`,
81
+ impact: 'Edge may not render correctly',
82
+ suggestion: `Valid styles: ${VALID_STYLES.join(', ')}`,
83
+ fixable: false,
84
+ });
85
+ }
86
+ // Check width is a number if provided
87
+ if (edgeType.width !== undefined && typeof edgeType.width !== 'number') {
88
+ violations.push({
89
+ ruleId: 'valid-edge-types',
90
+ severity: 'error',
91
+ file: configPath,
92
+ path: `${basePath}.width`,
93
+ message: `Edge type "${typeId}" width must be a number`,
94
+ impact: 'Edge width may not render correctly',
95
+ suggestion: 'Provide width as a number (e.g., 2)',
96
+ fixable: false,
97
+ });
98
+ }
99
+ // Check directed is a boolean if provided
100
+ if (edgeType.directed !== undefined && typeof edgeType.directed !== 'boolean') {
101
+ violations.push({
102
+ ruleId: 'valid-edge-types',
103
+ severity: 'error',
104
+ file: configPath,
105
+ path: `${basePath}.directed`,
106
+ message: `Edge type "${typeId}" directed must be a boolean`,
107
+ impact: 'Edge direction may not work correctly',
108
+ suggestion: 'Provide directed as true or false',
109
+ fixable: false,
110
+ });
111
+ }
112
+ // Check animated is a boolean if provided
113
+ if (edgeType.animated !== undefined && typeof edgeType.animated !== 'boolean') {
114
+ violations.push({
115
+ ruleId: 'valid-edge-types',
116
+ severity: 'error',
117
+ file: configPath,
118
+ path: `${basePath}.animated`,
119
+ message: `Edge type "${typeId}" animated must be a boolean`,
120
+ impact: 'Edge animation may not work correctly',
121
+ suggestion: 'Provide animated as true or false',
122
+ fixable: false,
123
+ });
124
+ }
125
+ // Check label configuration
126
+ if (edgeType.label) {
127
+ if (typeof edgeType.label !== 'object' || edgeType.label === null) {
128
+ violations.push({
129
+ ruleId: 'valid-edge-types',
130
+ severity: 'error',
131
+ file: configPath,
132
+ path: `${basePath}.label`,
133
+ message: `Edge type "${typeId}" label must be an object`,
134
+ impact: 'Edge label configuration is invalid',
135
+ suggestion: 'Provide label as { field?: string, position?: "start" | "middle" | "end" }',
136
+ fixable: false,
137
+ });
138
+ }
139
+ else {
140
+ if (edgeType.label.position !== undefined) {
141
+ if (!VALID_LABEL_POSITIONS.includes(edgeType.label.position)) {
142
+ violations.push({
143
+ ruleId: 'valid-edge-types',
144
+ severity: 'error',
145
+ file: configPath,
146
+ path: `${basePath}.label.position`,
147
+ message: `Edge type "${typeId}" has invalid label position "${edgeType.label.position}"`,
148
+ impact: 'Label may not appear in expected position',
149
+ suggestion: `Valid positions: ${VALID_LABEL_POSITIONS.join(', ')}`,
150
+ fixable: false,
151
+ });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ // Check animation configuration
157
+ if (edgeType.animation) {
158
+ if (typeof edgeType.animation !== 'object' || edgeType.animation === null) {
159
+ violations.push({
160
+ ruleId: 'valid-edge-types',
161
+ severity: 'error',
162
+ file: configPath,
163
+ path: `${basePath}.animation`,
164
+ message: `Edge type "${typeId}" animation must be an object`,
165
+ impact: 'Edge animation configuration is invalid',
166
+ suggestion: 'Provide animation as { type: "flow" | "pulse" | "particle" | "glow", duration?: number }',
167
+ fixable: false,
168
+ });
169
+ }
170
+ else {
171
+ // Check animation type
172
+ if (!edgeType.animation.type) {
173
+ violations.push({
174
+ ruleId: 'valid-edge-types',
175
+ severity: 'error',
176
+ file: configPath,
177
+ path: `${basePath}.animation.type`,
178
+ message: `Edge type "${typeId}" animation is missing required "type" field`,
179
+ impact: 'Animation cannot run without a type',
180
+ suggestion: `Add a type field. Valid values: ${VALID_ANIMATION_TYPES.join(', ')}`,
181
+ fixable: false,
182
+ });
183
+ }
184
+ else if (!VALID_ANIMATION_TYPES.includes(edgeType.animation.type)) {
185
+ violations.push({
186
+ ruleId: 'valid-edge-types',
187
+ severity: 'error',
188
+ file: configPath,
189
+ path: `${basePath}.animation.type`,
190
+ message: `Edge type "${typeId}" has invalid animation type "${edgeType.animation.type}"`,
191
+ impact: 'Animation may not work correctly',
192
+ suggestion: `Valid animation types: ${VALID_ANIMATION_TYPES.join(', ')}`,
193
+ fixable: false,
194
+ });
195
+ }
196
+ // Check animation duration
197
+ if (edgeType.animation.duration !== undefined && typeof edgeType.animation.duration !== 'number') {
198
+ violations.push({
199
+ ruleId: 'valid-edge-types',
200
+ severity: 'error',
201
+ file: configPath,
202
+ path: `${basePath}.animation.duration`,
203
+ message: `Edge type "${typeId}" animation duration must be a number`,
204
+ impact: 'Animation timing may not work correctly',
205
+ suggestion: 'Provide duration as a number in milliseconds',
206
+ fixable: false,
207
+ });
208
+ }
209
+ }
210
+ }
211
+ // Check dataSchema field types
212
+ if (edgeType.dataSchema) {
213
+ for (const [fieldName, fieldDef] of Object.entries(edgeType.dataSchema)) {
214
+ if (!fieldDef.type) {
215
+ violations.push({
216
+ ruleId: 'valid-edge-types',
217
+ severity: 'error',
218
+ file: configPath,
219
+ path: `${basePath}.dataSchema.${fieldName}.type`,
220
+ message: `Data schema field "${fieldName}" in edge type "${typeId}" is missing "type"`,
221
+ impact: 'Data validation will not work for this field',
222
+ suggestion: `Add a type field. Valid values: ${VALID_DATA_TYPES.join(', ')}`,
223
+ fixable: false,
224
+ });
225
+ }
226
+ else if (!VALID_DATA_TYPES.includes(fieldDef.type)) {
227
+ violations.push({
228
+ ruleId: 'valid-edge-types',
229
+ severity: 'error',
230
+ file: configPath,
231
+ path: `${basePath}.dataSchema.${fieldName}.type`,
232
+ message: `Invalid data type "${fieldDef.type}" for field "${fieldName}" in edge type "${typeId}"`,
233
+ impact: 'Data validation may fail',
234
+ suggestion: `Valid types: ${VALID_DATA_TYPES.join(', ')}`,
235
+ fixable: false,
236
+ });
237
+ }
238
+ }
239
+ }
240
+ }
241
+ return violations;
242
+ },
243
+ };
244
+ //# sourceMappingURL=valid-edge-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valid-edge-types.js","sourceRoot":"","sources":["../../../src/rules/implementations/valid-edge-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Rule: valid-node-types
3
+ * Ensures nodeTypes have required fields and valid values
4
+ */
5
+ import type { GraphRule } from '../types';
6
+ export declare const validNodeTypes: GraphRule;
7
+ //# sourceMappingURL=valid-node-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valid-node-types.d.ts","sourceRoot":"","sources":["../../../src/rules/implementations/valid-node-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAwC,MAAM,UAAU,CAAC;AAiBhF,eAAO,MAAM,cAAc,EAAE,SAsK5B,CAAC"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Rule: valid-node-types
3
+ * Ensures nodeTypes have required fields and valid values
4
+ */
5
+ /**
6
+ * Valid shape values for nodes
7
+ */
8
+ const VALID_SHAPES = ['circle', 'rectangle', 'hexagon', 'diamond', 'custom'];
9
+ /**
10
+ * Valid animation types
11
+ */
12
+ const VALID_ANIMATION_TYPES = ['flow', 'pulse', 'particle', 'glow'];
13
+ /**
14
+ * Valid data schema field types
15
+ */
16
+ const VALID_DATA_TYPES = ['string', 'number', 'boolean', 'object', 'array'];
17
+ export const validNodeTypes = {
18
+ id: 'valid-node-types',
19
+ name: 'Valid Node Types',
20
+ description: 'nodeTypes must have required fields and valid values',
21
+ impact: 'Invalid node types will cause rendering errors or unexpected behavior',
22
+ severity: 'error',
23
+ category: 'schema',
24
+ enabled: true,
25
+ fixable: false,
26
+ async check(context) {
27
+ const violations = [];
28
+ const { configuration, configPath } = context;
29
+ if (!configuration.nodeTypes) {
30
+ violations.push({
31
+ ruleId: 'valid-node-types',
32
+ severity: 'error',
33
+ file: configPath,
34
+ path: 'nodeTypes',
35
+ message: 'Configuration is missing nodeTypes section',
36
+ impact: 'No nodes can be defined without nodeTypes',
37
+ suggestion: 'Add a nodeTypes section with at least one node type definition',
38
+ fixable: false,
39
+ });
40
+ return violations;
41
+ }
42
+ if (Object.keys(configuration.nodeTypes).length === 0) {
43
+ violations.push({
44
+ ruleId: 'valid-node-types',
45
+ severity: 'error',
46
+ file: configPath,
47
+ path: 'nodeTypes',
48
+ message: 'nodeTypes section is empty',
49
+ impact: 'No nodes can be defined without at least one node type',
50
+ suggestion: 'Add at least one node type definition',
51
+ fixable: false,
52
+ });
53
+ return violations;
54
+ }
55
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
56
+ const basePath = `nodeTypes.${typeId}`;
57
+ // Check required shape field
58
+ if (!nodeType.shape) {
59
+ violations.push({
60
+ ruleId: 'valid-node-types',
61
+ severity: 'error',
62
+ file: configPath,
63
+ path: `${basePath}.shape`,
64
+ message: `Node type "${typeId}" is missing required "shape" field`,
65
+ impact: 'Node cannot be rendered without a shape',
66
+ suggestion: `Add a shape field. Valid values: ${VALID_SHAPES.join(', ')}`,
67
+ fixable: false,
68
+ });
69
+ }
70
+ else if (!VALID_SHAPES.includes(nodeType.shape)) {
71
+ violations.push({
72
+ ruleId: 'valid-node-types',
73
+ severity: 'error',
74
+ file: configPath,
75
+ path: `${basePath}.shape`,
76
+ message: `Node type "${typeId}" has invalid shape "${nodeType.shape}"`,
77
+ impact: 'Node may not render correctly',
78
+ suggestion: `Valid shapes: ${VALID_SHAPES.join(', ')}`,
79
+ fixable: false,
80
+ });
81
+ }
82
+ // Check dataSchema field types
83
+ if (nodeType.dataSchema) {
84
+ for (const [fieldName, fieldDef] of Object.entries(nodeType.dataSchema)) {
85
+ if (!fieldDef.type) {
86
+ violations.push({
87
+ ruleId: 'valid-node-types',
88
+ severity: 'error',
89
+ file: configPath,
90
+ path: `${basePath}.dataSchema.${fieldName}.type`,
91
+ message: `Data schema field "${fieldName}" in node type "${typeId}" is missing "type"`,
92
+ impact: 'Data validation will not work for this field',
93
+ suggestion: `Add a type field. Valid values: ${VALID_DATA_TYPES.join(', ')}`,
94
+ fixable: false,
95
+ });
96
+ }
97
+ else if (!VALID_DATA_TYPES.includes(fieldDef.type)) {
98
+ violations.push({
99
+ ruleId: 'valid-node-types',
100
+ severity: 'error',
101
+ file: configPath,
102
+ path: `${basePath}.dataSchema.${fieldName}.type`,
103
+ message: `Invalid data type "${fieldDef.type}" for field "${fieldName}" in node type "${typeId}"`,
104
+ impact: 'Data validation may fail',
105
+ suggestion: `Valid types: ${VALID_DATA_TYPES.join(', ')}`,
106
+ fixable: false,
107
+ });
108
+ }
109
+ }
110
+ }
111
+ // Check states have valid structure
112
+ if (nodeType.states) {
113
+ for (const [stateName, stateDef] of Object.entries(nodeType.states)) {
114
+ // States should be objects (even if empty)
115
+ if (typeof stateDef !== 'object' || stateDef === null) {
116
+ violations.push({
117
+ ruleId: 'valid-node-types',
118
+ severity: 'error',
119
+ file: configPath,
120
+ path: `${basePath}.states.${stateName}`,
121
+ message: `State "${stateName}" in node type "${typeId}" must be an object`,
122
+ impact: 'State definition is invalid',
123
+ suggestion: 'State should be an object with optional color, icon, and label fields',
124
+ fixable: false,
125
+ });
126
+ }
127
+ }
128
+ }
129
+ // Check size has valid structure
130
+ if (nodeType.size) {
131
+ if (typeof nodeType.size.width !== 'number' || typeof nodeType.size.height !== 'number') {
132
+ violations.push({
133
+ ruleId: 'valid-node-types',
134
+ severity: 'error',
135
+ file: configPath,
136
+ path: `${basePath}.size`,
137
+ message: `Node type "${typeId}" size must have numeric width and height`,
138
+ impact: 'Node size may not render correctly',
139
+ suggestion: 'Provide size as { width: number, height: number }',
140
+ fixable: false,
141
+ });
142
+ }
143
+ }
144
+ // Check layout has valid structure
145
+ if (nodeType.layout) {
146
+ if (nodeType.layout.layer !== undefined && typeof nodeType.layout.layer !== 'number') {
147
+ violations.push({
148
+ ruleId: 'valid-node-types',
149
+ severity: 'error',
150
+ file: configPath,
151
+ path: `${basePath}.layout.layer`,
152
+ message: `Node type "${typeId}" layout.layer must be a number`,
153
+ impact: 'Layout layering may not work correctly',
154
+ suggestion: 'Provide layer as a number',
155
+ fixable: false,
156
+ });
157
+ }
158
+ if (nodeType.layout.cluster !== undefined && typeof nodeType.layout.cluster !== 'string') {
159
+ violations.push({
160
+ ruleId: 'valid-node-types',
161
+ severity: 'error',
162
+ file: configPath,
163
+ path: `${basePath}.layout.cluster`,
164
+ message: `Node type "${typeId}" layout.cluster must be a string`,
165
+ impact: 'Cluster grouping may not work correctly',
166
+ suggestion: 'Provide cluster as a string identifier',
167
+ fixable: false,
168
+ });
169
+ }
170
+ }
171
+ }
172
+ return violations;
173
+ },
174
+ };
175
+ //# sourceMappingURL=valid-node-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valid-node-types.js","sourceRoot":"","sources":["../../../src/rules/implementations/valid-node-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Rules Engine - Configuration validation for Visual Validation Framework
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { createRulesEngine, builtinRules } from '@principal-ai/principal-view-core/rules';
7
+ *
8
+ * const engine = createRulesEngine(builtinRules);
9
+ * const result = await engine.lint(configuration);
10
+ *
11
+ * if (result.errorCount > 0) {
12
+ * console.error(`Found ${result.errorCount} errors`);
13
+ * for (const violation of result.violations) {
14
+ * console.error(` ${violation.path}: ${violation.message}`);
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ export { GraphRulesEngine, createRulesEngine } from './engine';
20
+ export type { GraphRule, GraphRuleContext, GraphRuleViolation, GraphLintResult, LintOptions, RuleOptions, RuleSeverity, NormalizedSeverity, RuleCategory, RuleConfig, PrivuConfig, FixResult, } from './types';
21
+ export { normalizeSeverity, isRuleDisabled } from './types';
22
+ export { validatePrivuConfig, getDefaultConfig, mergeConfigs, formatConfigErrors, CONFIG_FILE_NAMES, DEFAULT_INCLUDE_PATTERNS, DEFAULT_EXCLUDE_PATTERNS, VALID_RULE_IDS, VALID_SEVERITIES, type ConfigValidationError, type ConfigValidationResult, type ValidRuleId, } from './config';
23
+ export { builtinRules, requiredMetadata, validNodeTypes, validEdgeTypes, validColorFormat, noUnknownFields, connectionTypeReferences, stateTransitionReferences, minimumNodeSources, orphanedNodeTypes, orphanedEdgeTypes, unreachableStates, deadEndStates, validActionPatterns, libraryNodeTypeMatch, type MinimumNodeSourcesOptions, type DeadEndStatesOptions, type ValidActionPatternsOptions, type LibraryNodeTypeMatchOptions, } from './implementations';
24
+ /**
25
+ * Create a rules engine pre-configured with all built-in rules
26
+ */
27
+ export declare function createDefaultRulesEngine(): import("./engine").GraphRulesEngine;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG/D,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG5D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EAEZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe,EAEf,wBAAwB,EACxB,yBAAyB,EAEzB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EAEb,mBAAmB,EAEnB,oBAAoB,EAEpB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,mBAAmB,CAAC;AAM3B;;GAEG;AACH,wBAAgB,wBAAwB,wCAEvC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Rules Engine - Configuration validation for Visual Validation Framework
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { createRulesEngine, builtinRules } from '@principal-ai/principal-view-core/rules';
7
+ *
8
+ * const engine = createRulesEngine(builtinRules);
9
+ * const result = await engine.lint(configuration);
10
+ *
11
+ * if (result.errorCount > 0) {
12
+ * console.error(`Found ${result.errorCount} errors`);
13
+ * for (const violation of result.violations) {
14
+ * console.error(` ${violation.path}: ${violation.message}`);
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ // Core engine
20
+ export { GraphRulesEngine, createRulesEngine } from './engine';
21
+ export { normalizeSeverity, isRuleDisabled } from './types';
22
+ // Config validation
23
+ export { validatePrivuConfig, getDefaultConfig, mergeConfigs, formatConfigErrors, CONFIG_FILE_NAMES, DEFAULT_INCLUDE_PATTERNS, DEFAULT_EXCLUDE_PATTERNS, VALID_RULE_IDS, VALID_SEVERITIES, } from './config';
24
+ // Built-in rules
25
+ export { builtinRules,
26
+ // Schema rules
27
+ requiredMetadata, validNodeTypes, validEdgeTypes, validColorFormat, noUnknownFields,
28
+ // Reference rules
29
+ connectionTypeReferences, stateTransitionReferences,
30
+ // Structure rules
31
+ minimumNodeSources, orphanedNodeTypes, orphanedEdgeTypes, unreachableStates, deadEndStates,
32
+ // Pattern rules
33
+ validActionPatterns,
34
+ // Library rules
35
+ libraryNodeTypeMatch, } from './implementations';
36
+ // Convenience factory that creates an engine with all built-in rules
37
+ import { createRulesEngine } from './engine';
38
+ import { builtinRules } from './implementations';
39
+ /**
40
+ * Create a rules engine pre-configured with all built-in rules
41
+ */
42
+ export function createDefaultRulesEngine() {
43
+ return createRulesEngine(builtinRules);
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAkB/D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE5D,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,GAIjB,MAAM,UAAU,CAAC;AAElB,iBAAiB;AACjB,OAAO,EACL,YAAY;AACZ,eAAe;AACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe;AACf,kBAAkB;AAClB,wBAAwB,EACxB,yBAAyB;AACzB,kBAAkB;AAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa;AACb,gBAAgB;AAChB,mBAAmB;AACnB,gBAAgB;AAChB,oBAAoB,GAMrB,MAAM,mBAAmB,CAAC;AAE3B,qEAAqE;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC"}