@graph-ir/core 0.2.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.
Files changed (92) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/generation/id-generator.d.ts +81 -0
  4. package/dist/generation/id-generator.d.ts.map +1 -0
  5. package/dist/generation/id-generator.js +193 -0
  6. package/dist/generation/id-generator.js.map +1 -0
  7. package/dist/generation/index.d.ts +7 -0
  8. package/dist/generation/index.d.ts.map +1 -0
  9. package/dist/generation/index.js +7 -0
  10. package/dist/generation/index.js.map +1 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +26 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/output/ci.d.ts +36 -0
  16. package/dist/output/ci.d.ts.map +1 -0
  17. package/dist/output/ci.js +145 -0
  18. package/dist/output/ci.js.map +1 -0
  19. package/dist/output/index.d.ts +20 -0
  20. package/dist/output/index.d.ts.map +1 -0
  21. package/dist/output/index.js +40 -0
  22. package/dist/output/index.js.map +1 -0
  23. package/dist/output/json.d.ts +24 -0
  24. package/dist/output/json.d.ts.map +1 -0
  25. package/dist/output/json.js +49 -0
  26. package/dist/output/json.js.map +1 -0
  27. package/dist/output/pretty.d.ts +44 -0
  28. package/dist/output/pretty.d.ts.map +1 -0
  29. package/dist/output/pretty.js +227 -0
  30. package/dist/output/pretty.js.map +1 -0
  31. package/dist/output/types.d.ts +63 -0
  32. package/dist/output/types.d.ts.map +1 -0
  33. package/dist/output/types.js +5 -0
  34. package/dist/output/types.js.map +1 -0
  35. package/dist/schemas/graph-ir.schema.json +360 -0
  36. package/dist/skills/diff.d.ts +73 -0
  37. package/dist/skills/diff.d.ts.map +1 -0
  38. package/dist/skills/diff.js +315 -0
  39. package/dist/skills/diff.js.map +1 -0
  40. package/dist/skills/migrate.d.ts +40 -0
  41. package/dist/skills/migrate.d.ts.map +1 -0
  42. package/dist/skills/migrate.js +288 -0
  43. package/dist/skills/migrate.js.map +1 -0
  44. package/dist/skills/visualize.d.ts +30 -0
  45. package/dist/skills/visualize.d.ts.map +1 -0
  46. package/dist/skills/visualize.js +254 -0
  47. package/dist/skills/visualize.js.map +1 -0
  48. package/dist/symbols/index.d.ts +12 -0
  49. package/dist/symbols/index.d.ts.map +1 -0
  50. package/dist/symbols/index.js +12 -0
  51. package/dist/symbols/index.js.map +1 -0
  52. package/dist/symbols/notation-registry.d.ts +61 -0
  53. package/dist/symbols/notation-registry.d.ts.map +1 -0
  54. package/dist/symbols/notation-registry.js +114 -0
  55. package/dist/symbols/notation-registry.js.map +1 -0
  56. package/dist/symbols/symbol-registry.d.ts +58 -0
  57. package/dist/symbols/symbol-registry.d.ts.map +1 -0
  58. package/dist/symbols/symbol-registry.js +88 -0
  59. package/dist/symbols/symbol-registry.js.map +1 -0
  60. package/dist/symbols/types.d.ts +166 -0
  61. package/dist/symbols/types.d.ts.map +1 -0
  62. package/dist/symbols/types.js +13 -0
  63. package/dist/symbols/types.js.map +1 -0
  64. package/dist/testing/diff.d.ts +46 -0
  65. package/dist/testing/diff.d.ts.map +1 -0
  66. package/dist/testing/diff.js +400 -0
  67. package/dist/testing/diff.js.map +1 -0
  68. package/dist/testing/index.d.ts +10 -0
  69. package/dist/testing/index.d.ts.map +1 -0
  70. package/dist/testing/index.js +10 -0
  71. package/dist/testing/index.js.map +1 -0
  72. package/dist/testing/snapshot.d.ts +95 -0
  73. package/dist/testing/snapshot.d.ts.map +1 -0
  74. package/dist/testing/snapshot.js +172 -0
  75. package/dist/testing/snapshot.js.map +1 -0
  76. package/dist/types.d.ts +240 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +7 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/validation/index.d.ts +9 -0
  81. package/dist/validation/index.d.ts.map +1 -0
  82. package/dist/validation/index.js +8 -0
  83. package/dist/validation/index.js.map +1 -0
  84. package/dist/validation/ir-validator.d.ts +51 -0
  85. package/dist/validation/ir-validator.d.ts.map +1 -0
  86. package/dist/validation/ir-validator.js +349 -0
  87. package/dist/validation/ir-validator.js.map +1 -0
  88. package/dist/validation/validator.d.ts +13 -0
  89. package/dist/validation/validator.d.ts.map +1 -0
  90. package/dist/validation/validator.js +19 -0
  91. package/dist/validation/validator.js.map +1 -0
  92. package/package.json +73 -0
@@ -0,0 +1,349 @@
1
+ /**
2
+ * Graph-IR Validator
3
+ *
4
+ * Validates Graph-IR against schema and semantic rules:
5
+ * 1. JSON Schema validation (structure)
6
+ * 2. ID uniqueness
7
+ * 3. Reference validity (edges -> nodes, ports)
8
+ * 4. Cycle detection in hierarchy
9
+ * 5. Semantic warnings (orphans, self-loops)
10
+ */
11
+ import { Ajv } from 'ajv';
12
+ // Import schema - will be loaded at runtime
13
+ import graphIRSchema from '../schemas/graph-ir.schema.json' with { type: 'json' };
14
+ // Use draft-07 compatible schema by removing the $schema field at runtime
15
+ const schema = { ...graphIRSchema };
16
+ delete schema['$schema'];
17
+ export class IRValidator {
18
+ options;
19
+ ajv;
20
+ schemaValidator;
21
+ constructor(options = {}) {
22
+ this.options = options;
23
+ this.ajv = new Ajv({ allErrors: true, verbose: true, strict: false });
24
+ // Add formats manually since ESM import is problematic
25
+ this.addDateTimeFormat();
26
+ this.schemaValidator = this.ajv.compile(schema);
27
+ }
28
+ addDateTimeFormat() {
29
+ this.ajv.addFormat('date-time', {
30
+ type: 'string',
31
+ validate: (dateTimeString) => {
32
+ // ISO 8601 date-time format
33
+ const dateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?$/;
34
+ return dateTimeRegex.test(dateTimeString);
35
+ },
36
+ });
37
+ }
38
+ /**
39
+ * Validate from JSON string
40
+ */
41
+ validateFromString(jsonString) {
42
+ // Parse JSON
43
+ let ir;
44
+ try {
45
+ ir = JSON.parse(jsonString);
46
+ }
47
+ catch (e) {
48
+ return {
49
+ valid: false,
50
+ errors: [
51
+ {
52
+ code: 'INVALID_JSON',
53
+ path: '$',
54
+ message: `Invalid JSON: ${e instanceof Error ? e.message : 'Parse error'}`,
55
+ severity: 'error',
56
+ },
57
+ ],
58
+ warnings: [],
59
+ stats: { nodes: 0, edges: 0 },
60
+ };
61
+ }
62
+ return this.validate(ir);
63
+ }
64
+ /**
65
+ * Validate a Graph-IR object
66
+ */
67
+ validate(ir) {
68
+ const errors = [];
69
+ const warnings = [];
70
+ // 1. Schema validation
71
+ if (!this.options.skipSchema) {
72
+ const schemaErrors = this.validateSchema(ir);
73
+ if (schemaErrors.length > 0) {
74
+ // Schema errors are fatal - return early
75
+ return {
76
+ valid: false,
77
+ errors: schemaErrors,
78
+ warnings: [],
79
+ stats: { nodes: 0, edges: 0 },
80
+ };
81
+ }
82
+ }
83
+ // At this point, ir should be a valid GraphIR structure
84
+ const graphIR = ir;
85
+ // 2. Collect all nodes (including nested children)
86
+ const allNodes = this.collectAllNodes(graphIR.nodes);
87
+ const nodeIds = new Map();
88
+ // 3. Check node ID uniqueness
89
+ allNodes.forEach(({ node, path }) => {
90
+ if (nodeIds.has(node.id)) {
91
+ errors.push({
92
+ code: 'DUPLICATE_NODE_ID',
93
+ path: `${path}.id`,
94
+ message: `Duplicate node ID: "${node.id}"`,
95
+ severity: 'error',
96
+ });
97
+ }
98
+ else {
99
+ nodeIds.set(node.id, { node, path });
100
+ }
101
+ });
102
+ // 4. Check edge ID uniqueness and references
103
+ const edgeIds = new Set();
104
+ graphIR.edges.forEach((edge, index) => {
105
+ const path = `$.edges[${index}]`;
106
+ // Check edge ID uniqueness
107
+ if (edgeIds.has(edge.id)) {
108
+ errors.push({
109
+ code: 'DUPLICATE_EDGE_ID',
110
+ path: `${path}.id`,
111
+ message: `Duplicate edge ID: "${edge.id}"`,
112
+ severity: 'error',
113
+ });
114
+ }
115
+ edgeIds.add(edge.id);
116
+ // Check source reference
117
+ if (!nodeIds.has(edge.source)) {
118
+ const suggestion = this.findSimilarId(edge.source, Array.from(nodeIds.keys()));
119
+ errors.push({
120
+ code: 'INVALID_EDGE_SOURCE',
121
+ path: `${path}.source`,
122
+ message: `Edge "${edge.id}" references non-existent source node: "${edge.source}"`,
123
+ severity: 'error',
124
+ suggestion,
125
+ });
126
+ }
127
+ // Check target reference
128
+ if (!nodeIds.has(edge.target)) {
129
+ const suggestion = this.findSimilarId(edge.target, Array.from(nodeIds.keys()));
130
+ errors.push({
131
+ code: 'INVALID_EDGE_TARGET',
132
+ path: `${path}.target`,
133
+ message: `Edge "${edge.id}" references non-existent target node: "${edge.target}"`,
134
+ severity: 'error',
135
+ suggestion,
136
+ });
137
+ }
138
+ // Check source port reference
139
+ if (edge.sourcePort && nodeIds.has(edge.source)) {
140
+ const sourceNode = nodeIds.get(edge.source).node;
141
+ if (!this.hasPort(sourceNode, edge.sourcePort)) {
142
+ errors.push({
143
+ code: 'INVALID_PORT_REFERENCE',
144
+ path: `${path}.sourcePort`,
145
+ message: `Edge "${edge.id}" references non-existent source port: "${edge.sourcePort}" on node "${edge.source}"`,
146
+ severity: 'error',
147
+ });
148
+ }
149
+ }
150
+ // Check target port reference
151
+ if (edge.targetPort && nodeIds.has(edge.target)) {
152
+ const targetNode = nodeIds.get(edge.target).node;
153
+ if (!this.hasPort(targetNode, edge.targetPort)) {
154
+ errors.push({
155
+ code: 'INVALID_PORT_REFERENCE',
156
+ path: `${path}.targetPort`,
157
+ message: `Edge "${edge.id}" references non-existent target port: "${edge.targetPort}" on node "${edge.target}"`,
158
+ severity: 'error',
159
+ });
160
+ }
161
+ }
162
+ });
163
+ // 5. Check for cycles in hierarchy
164
+ if (!this.options.skipSemantic) {
165
+ const cycleErrors = this.checkHierarchyCycles(graphIR.nodes);
166
+ errors.push(...cycleErrors);
167
+ }
168
+ // 6. Semantic warnings
169
+ if (!this.options.skipSemantic) {
170
+ // Check for self-loops
171
+ graphIR.edges.forEach((edge, index) => {
172
+ if (edge.source === edge.target) {
173
+ warnings.push({
174
+ code: 'SELF_LOOP_EDGE',
175
+ path: `$.edges[${index}]`,
176
+ message: `Edge "${edge.id}" connects node "${edge.source}" to itself`,
177
+ severity: 'warning',
178
+ });
179
+ }
180
+ });
181
+ // Check for orphan nodes (nodes with no connections)
182
+ const connectedNodes = new Set();
183
+ graphIR.edges.forEach((edge) => {
184
+ connectedNodes.add(edge.source);
185
+ connectedNodes.add(edge.target);
186
+ });
187
+ allNodes.forEach(({ node, path }) => {
188
+ // Skip nodes that have children (compound nodes)
189
+ if (!node.children?.length && !connectedNodes.has(node.id)) {
190
+ warnings.push({
191
+ code: 'ORPHAN_NODE',
192
+ path,
193
+ message: `Node "${node.id}" has no connections`,
194
+ severity: 'warning',
195
+ });
196
+ }
197
+ });
198
+ // Check for orphan ports
199
+ const usedPorts = new Set();
200
+ graphIR.edges.forEach((edge) => {
201
+ if (edge.sourcePort)
202
+ usedPorts.add(`${edge.source}:${edge.sourcePort}`);
203
+ if (edge.targetPort)
204
+ usedPorts.add(`${edge.target}:${edge.targetPort}`);
205
+ });
206
+ allNodes.forEach(({ node, path }) => {
207
+ node.ports?.forEach((port, portIndex) => {
208
+ const portKey = `${node.id}:${port.id}`;
209
+ if (!usedPorts.has(portKey)) {
210
+ warnings.push({
211
+ code: 'ORPHAN_PORT',
212
+ path: `${path}.ports[${portIndex}]`,
213
+ message: `Port "${port.id}" on node "${node.id}" is never referenced`,
214
+ severity: 'warning',
215
+ });
216
+ }
217
+ });
218
+ });
219
+ }
220
+ // Apply strict mode
221
+ const finalErrors = this.options.strict ? [...errors, ...warnings] : errors;
222
+ const finalWarnings = this.options.strict ? [] : warnings;
223
+ return {
224
+ valid: finalErrors.length === 0,
225
+ errors: finalErrors,
226
+ warnings: finalWarnings,
227
+ stats: {
228
+ nodes: allNodes.length,
229
+ edges: graphIR.edges.length,
230
+ },
231
+ };
232
+ }
233
+ /**
234
+ * Validate against JSON Schema
235
+ */
236
+ validateSchema(ir) {
237
+ const valid = this.schemaValidator(ir);
238
+ if (valid)
239
+ return [];
240
+ const errors = [];
241
+ for (const error of this.schemaValidator.errors || []) {
242
+ errors.push({
243
+ code: 'SCHEMA_VIOLATION',
244
+ path: error.instancePath || '$',
245
+ message: error.message || 'Schema validation failed',
246
+ severity: 'error',
247
+ });
248
+ }
249
+ return errors;
250
+ }
251
+ /**
252
+ * Collect all nodes including nested children
253
+ */
254
+ collectAllNodes(nodes, parentPath = '$.nodes') {
255
+ const result = [];
256
+ nodes.forEach((node, index) => {
257
+ const path = `${parentPath}[${index}]`;
258
+ result.push({ node, path });
259
+ if (node.children?.length) {
260
+ result.push(...this.collectAllNodes(node.children, `${path}.children`));
261
+ }
262
+ });
263
+ return result;
264
+ }
265
+ /**
266
+ * Check if a node has a port with the given ID
267
+ */
268
+ hasPort(node, portId) {
269
+ return node.ports?.some((p) => p.id === portId) ?? false;
270
+ }
271
+ /**
272
+ * Check for cycles in the node hierarchy
273
+ */
274
+ checkHierarchyCycles(nodes) {
275
+ const errors = [];
276
+ const visited = new Set();
277
+ const recursionStack = new Set();
278
+ const dfs = (node, path) => {
279
+ if (recursionStack.has(node.id)) {
280
+ // Found a cycle
281
+ const cycleStart = path.indexOf(node.id);
282
+ const cyclePath = path.slice(cycleStart).concat(node.id);
283
+ errors.push({
284
+ code: 'CYCLIC_HIERARCHY',
285
+ path: '$.nodes',
286
+ message: `Cyclic hierarchy detected: ${cyclePath.join(' -> ')}`,
287
+ severity: 'error',
288
+ });
289
+ return true;
290
+ }
291
+ if (visited.has(node.id)) {
292
+ return false;
293
+ }
294
+ visited.add(node.id);
295
+ recursionStack.add(node.id);
296
+ for (const child of node.children || []) {
297
+ if (dfs(child, [...path, node.id])) {
298
+ return true;
299
+ }
300
+ }
301
+ recursionStack.delete(node.id);
302
+ return false;
303
+ };
304
+ for (const node of nodes) {
305
+ dfs(node, []);
306
+ }
307
+ return errors;
308
+ }
309
+ /**
310
+ * Find a similar ID for suggestions
311
+ */
312
+ findSimilarId(target, candidates) {
313
+ const targetLower = target.toLowerCase();
314
+ let bestMatch;
315
+ let bestScore = Infinity;
316
+ for (const candidate of candidates) {
317
+ const distance = this.levenshteinDistance(targetLower, candidate.toLowerCase());
318
+ if (distance < bestScore && distance <= 3) {
319
+ bestScore = distance;
320
+ bestMatch = candidate;
321
+ }
322
+ }
323
+ return bestMatch ? `Did you mean "${bestMatch}"?` : undefined;
324
+ }
325
+ /**
326
+ * Calculate Levenshtein distance for similarity
327
+ */
328
+ levenshteinDistance(a, b) {
329
+ const matrix = [];
330
+ for (let i = 0; i <= b.length; i++) {
331
+ matrix[i] = [i];
332
+ }
333
+ for (let j = 0; j <= a.length; j++) {
334
+ matrix[0][j] = j;
335
+ }
336
+ for (let i = 1; i <= b.length; i++) {
337
+ for (let j = 1; j <= a.length; j++) {
338
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
339
+ matrix[i][j] = matrix[i - 1][j - 1];
340
+ }
341
+ else {
342
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
343
+ }
344
+ }
345
+ }
346
+ return matrix[b.length][a.length];
347
+ }
348
+ }
349
+ //# sourceMappingURL=ir-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-validator.js","sourceRoot":"","sources":["../../src/validation/ir-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Main validation entry points
3
+ */
4
+ import type { ValidationResult, ValidationOptions } from '../types.js';
5
+ /**
6
+ * Validate a Graph-IR object
7
+ */
8
+ export declare function validateIR(ir: unknown, options?: ValidationOptions): ValidationResult;
9
+ /**
10
+ * Validate Graph-IR from a JSON string
11
+ */
12
+ export declare function validateIRFromString(jsonString: string, options?: ValidationOptions): ValidationResult;
13
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAW,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhF;;GAEG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,OAAO,EACX,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CAGlB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CAGlB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Main validation entry points
3
+ */
4
+ import { IRValidator } from './ir-validator.js';
5
+ /**
6
+ * Validate a Graph-IR object
7
+ */
8
+ export function validateIR(ir, options = {}) {
9
+ const validator = new IRValidator(options);
10
+ return validator.validate(ir);
11
+ }
12
+ /**
13
+ * Validate Graph-IR from a JSON string
14
+ */
15
+ export function validateIRFromString(jsonString, options = {}) {
16
+ const validator = new IRValidator(options);
17
+ return validator.validateFromString(jsonString);
18
+ }
19
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,EAAW,EACX,UAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,UAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAClD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@graph-ir/core",
3
+ "version": "0.2.0",
4
+ "description": "Core utilities for Graph-IR validation, generation, and transformation",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./validation": {
14
+ "import": "./dist/validation/index.js",
15
+ "types": "./dist/validation/index.d.ts"
16
+ },
17
+ "./generation": {
18
+ "import": "./dist/generation/index.js",
19
+ "types": "./dist/generation/index.d.ts"
20
+ },
21
+ "./output": {
22
+ "import": "./dist/output/index.js",
23
+ "types": "./dist/output/index.d.ts"
24
+ },
25
+ "./testing": {
26
+ "import": "./dist/testing/index.js",
27
+ "types": "./dist/testing/index.d.ts"
28
+ },
29
+ "./schemas/*": {
30
+ "import": "./dist/schemas/*"
31
+ }
32
+ },
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "dev": "tsc --watch",
36
+ "test": "vitest",
37
+ "test:run": "vitest run",
38
+ "prepack": "npm run build",
39
+ "lint": "eslint src/"
40
+ },
41
+ "keywords": [
42
+ "graph-ir",
43
+ "validation",
44
+ "schema",
45
+ "graph"
46
+ ],
47
+ "author": "",
48
+ "license": "MIT",
49
+ "dependencies": {
50
+ "ajv": "8.20.0"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "24.10.1",
54
+ "typescript": "6.0.3",
55
+ "vitest": "5.0.0"
56
+ },
57
+ "engines": {
58
+ "node": ">=24.19.0"
59
+ },
60
+ "files": [
61
+ "dist",
62
+ "README.md",
63
+ "LICENSE"
64
+ ],
65
+ "publishConfig": {
66
+ "access": "public"
67
+ },
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "git+https://github.com/coreyt/graph-ir-tools.git",
71
+ "directory": "packages/core"
72
+ }
73
+ }