@grafema/util 0.3.16 → 0.3.18

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.
@@ -0,0 +1,210 @@
1
+ /**
2
+ * ManifestResolver — resolves cross-package imports via manifest.yaml files.
3
+ *
4
+ * Given an import like `import { GraphBackend } from '@grafema/util'`,
5
+ * the resolver loads @grafema/util's manifest.yaml and returns the
6
+ * ManifestExport entry for GraphBackend (kind, effects, semanticId).
7
+ *
8
+ * This is the read-side complement to ManifestGenerator (write-side).
9
+ *
10
+ * Usage:
11
+ * const resolver = new ManifestResolver();
12
+ * resolver.loadFromWorkspace('/project', ['packages/util', 'packages/types']);
13
+ * resolver.loadFromNodeModules('/project/node_modules');
14
+ *
15
+ * const result = resolver.resolve('@grafema/util', 'GraphBackend');
16
+ * // → { name: 'GraphBackend', kind: 'CLASS', effects: ['PURE'], semanticId: '...' }
17
+ */
18
+ import { readFileSync, existsSync } from 'fs';
19
+ import { join } from 'path';
20
+ import { parse as parseYaml } from 'yaml';
21
+ export class ManifestResolver {
22
+ /** package name → loaded Manifest */
23
+ manifests = new Map();
24
+ /** package name → Map<export name → ManifestExport> (index for O(1) lookup) */
25
+ exportIndex = new Map();
26
+ /** Number of loaded manifests */
27
+ get size() {
28
+ return this.manifests.size;
29
+ }
30
+ /** All loaded package names */
31
+ get packages() {
32
+ return [...this.manifests.keys()];
33
+ }
34
+ /**
35
+ * Load a single manifest from a YAML file path.
36
+ * The package name is extracted from the manifest's purl field.
37
+ */
38
+ loadFromFile(filePath) {
39
+ if (!existsSync(filePath))
40
+ return null;
41
+ try {
42
+ const raw = readFileSync(filePath, 'utf-8');
43
+ const manifest = parseYaml(raw);
44
+ if (!manifest?.package?.purl || !manifest.exports)
45
+ return null;
46
+ const pkgName = purlToPackageName(manifest.package.purl);
47
+ this.register(pkgName, manifest);
48
+ return manifest;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * Load manifests from workspace packages.
56
+ * Scans each directory for manifest.yaml.
57
+ *
58
+ * @param rootDir Project root directory
59
+ * @param packageDirs Relative paths to package directories (e.g., ['packages/util', 'packages/types'])
60
+ */
61
+ loadFromWorkspace(rootDir, packageDirs) {
62
+ let loaded = 0;
63
+ for (const dir of packageDirs) {
64
+ const manifestPath = join(rootDir, dir, 'manifest.yaml');
65
+ if (this.loadFromFile(manifestPath))
66
+ loaded++;
67
+ }
68
+ return loaded;
69
+ }
70
+ /**
71
+ * Auto-discover and load manifests from node_modules.
72
+ * Scans node_modules for packages containing manifest.yaml.
73
+ * Optionally scoped to specific package names.
74
+ *
75
+ * @param nodeModulesDir Path to node_modules directory
76
+ * @param packageNames Optional list of package names to load (e.g., ['@grafema/util']). If omitted, scans all.
77
+ */
78
+ loadFromNodeModules(nodeModulesDir, packageNames) {
79
+ if (!existsSync(nodeModulesDir))
80
+ return 0;
81
+ let loaded = 0;
82
+ if (packageNames) {
83
+ for (const name of packageNames) {
84
+ const manifestPath = join(nodeModulesDir, name, 'manifest.yaml');
85
+ if (this.loadFromFile(manifestPath))
86
+ loaded++;
87
+ }
88
+ }
89
+ return loaded;
90
+ }
91
+ /**
92
+ * Register a manifest directly (e.g., from in-memory generation).
93
+ */
94
+ register(packageName, manifest) {
95
+ this.manifests.set(packageName, manifest);
96
+ // Build export index
97
+ const index = new Map();
98
+ for (const exp of manifest.exports) {
99
+ index.set(exp.name, exp);
100
+ }
101
+ this.exportIndex.set(packageName, index);
102
+ }
103
+ /**
104
+ * Resolve an import: given package name and symbol, return the export info.
105
+ *
106
+ * @param source Import source (e.g., '@grafema/util', 'graphql-yoga')
107
+ * @param symbolName Exported symbol name (e.g., 'GraphBackend')
108
+ * @returns ResolveResult or null if not found
109
+ */
110
+ resolve(source, symbolName) {
111
+ const index = this.exportIndex.get(source);
112
+ if (!index)
113
+ return null;
114
+ const exp = index.get(symbolName);
115
+ if (!exp)
116
+ return null;
117
+ const manifest = this.manifests.get(source);
118
+ return {
119
+ export: exp,
120
+ packagePurl: manifest.package.purl,
121
+ confidence: manifest.confidence,
122
+ hasGraph: manifest.capabilities.has_graph,
123
+ };
124
+ }
125
+ /**
126
+ * Resolve all symbols from a specific import source.
127
+ * Returns a map of symbol name → ManifestExport for all known exports.
128
+ *
129
+ * Useful for: `import * as utils from '@grafema/util'`
130
+ */
131
+ resolveAll(source) {
132
+ return this.exportIndex.get(source) ?? null;
133
+ }
134
+ /**
135
+ * Get the full manifest for a package.
136
+ */
137
+ getManifest(packageName) {
138
+ return this.manifests.get(packageName) ?? null;
139
+ }
140
+ /**
141
+ * Check if a package has a loaded manifest.
142
+ */
143
+ has(packageName) {
144
+ return this.manifests.has(packageName);
145
+ }
146
+ /**
147
+ * Get the effects for an imported symbol.
148
+ * Shorthand for resolve() when you only need effects.
149
+ */
150
+ getEffects(source, symbolName) {
151
+ return this.resolve(source, symbolName)?.export.effects ?? null;
152
+ }
153
+ /**
154
+ * Build a dependency graph from loaded manifests.
155
+ * Returns: Map<packageName → Set<dependencyPackageName>>
156
+ */
157
+ buildDependencyGraph() {
158
+ const deps = new Map();
159
+ for (const [name, manifest] of this.manifests) {
160
+ const pkgDeps = new Set();
161
+ for (const imp of manifest.imports) {
162
+ const depName = purlToPackageName(imp.purl);
163
+ if (depName && this.manifests.has(depName)) {
164
+ pkgDeps.add(depName);
165
+ }
166
+ }
167
+ deps.set(name, pkgDeps);
168
+ }
169
+ return deps;
170
+ }
171
+ /**
172
+ * Get summary stats for all loaded manifests.
173
+ */
174
+ getSummary() {
175
+ const summaries = [];
176
+ for (const [name, manifest] of this.manifests) {
177
+ summaries.push({
178
+ packageName: name,
179
+ purl: manifest.package.purl,
180
+ totalExports: manifest.exports.length,
181
+ totalImports: manifest.imports.length,
182
+ confidence: manifest.confidence,
183
+ hasGraph: manifest.capabilities.has_graph,
184
+ exportsByKind: countByKind(manifest.exports),
185
+ });
186
+ }
187
+ return summaries.sort((a, b) => a.packageName.localeCompare(b.packageName));
188
+ }
189
+ }
190
+ // ── Helpers ──────────────────────────────────────────────
191
+ /** Extract npm package name from a purl like "pkg:npm/@grafema/util@0.2.0" */
192
+ function purlToPackageName(purl) {
193
+ // pkg:npm/@scope/name@version or pkg:npm/name@version
194
+ const match = purl.match(/^pkg:npm\/(.+?)(?:@[\d.]+.*)?$/);
195
+ if (!match)
196
+ return purl;
197
+ const name = match[1];
198
+ // For node builtins like "pkg:npm/node@*#fs", skip
199
+ if (name === 'node')
200
+ return '';
201
+ return name;
202
+ }
203
+ function countByKind(exports) {
204
+ const counts = {};
205
+ for (const e of exports) {
206
+ counts[e.kind] = (counts[e.kind] || 0) + 1;
207
+ }
208
+ return counts;
209
+ }
210
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/manifest/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Manifest format types for Grafema federation.
3
+ *
4
+ * A manifest describes a package's export surface: what it exports,
5
+ * what effects each export has, and what it imports.
6
+ *
7
+ * Manifest is the boundary contract between analyzed packages.
8
+ * It's polyglot (purl URIs), versioned (schema + analyzer),
9
+ * and layered (CDN < auto-generated < developer-authored).
10
+ */
11
+ export type EffectType = 'PURE' | 'MUTATION' | 'IO' | 'THROW' | 'ASYNC' | 'NONDETERMINISTIC' | 'UNKNOWN';
12
+ export type FlowType = 'IN' | 'OUT' | 'PIPE' | 'SINK';
13
+ export type ExportKind = 'FUNCTION' | 'CLASS' | 'VARIABLE' | 'TYPE' | 'CONSTANT' | 'INTERFACE';
14
+ export interface ManifestParam {
15
+ name: string;
16
+ flow: FlowType;
17
+ }
18
+ export interface ManifestExport {
19
+ name: string;
20
+ kind: ExportKind;
21
+ semanticId: string;
22
+ effects: EffectType[];
23
+ params?: ManifestParam[];
24
+ returns?: {
25
+ flow: FlowType;
26
+ };
27
+ fields?: string[];
28
+ }
29
+ export interface ManifestImport {
30
+ purl: string;
31
+ symbols: string[];
32
+ }
33
+ export interface ManifestCapabilities {
34
+ total_exports: number;
35
+ total_internal_symbols: number;
36
+ has_graph: boolean;
37
+ }
38
+ export interface ManifestPackage {
39
+ purl: string;
40
+ checksum?: string;
41
+ source_type: 'source' | 'compiled_js' | 'minified' | 'dts_only';
42
+ }
43
+ export interface ManifestAccess {
44
+ local?: string;
45
+ remote?: string;
46
+ }
47
+ export interface ManifestLanguageSpecific {
48
+ module_system: 'esm' | 'cjs' | 'dual';
49
+ entry_points?: Record<string, string>;
50
+ typescript_declarations?: boolean;
51
+ }
52
+ export interface Manifest {
53
+ schema_version: number;
54
+ analyzer_version: string;
55
+ authored: boolean;
56
+ confidence: number;
57
+ generated: string;
58
+ package: ManifestPackage;
59
+ exports: ManifestExport[];
60
+ imports: ManifestImport[];
61
+ capabilities: ManifestCapabilities;
62
+ access?: ManifestAccess;
63
+ language?: string;
64
+ language_specific?: ManifestLanguageSpecific;
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/manifest/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,UAAU,GACV,IAAI,GACJ,OAAO,GACP,OAAO,GACP,kBAAkB,GAClB,SAAS,CAAC;AAId,MAAM,MAAM,QAAQ,GAChB,IAAI,GACJ,KAAK,GACL,MAAM,GACN,MAAM,CAAC;AAIX,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,OAAO,GACP,UAAU,GACV,MAAM,GACN,UAAU,GACV,WAAW,CAAC;AAIhB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,YAAY,EAAE,oBAAoB,CAAC;IACnC,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Manifest format types for Grafema federation.
3
+ *
4
+ * A manifest describes a package's export surface: what it exports,
5
+ * what effects each export has, and what it imports.
6
+ *
7
+ * Manifest is the boundary contract between analyzed packages.
8
+ * It's polyglot (purl URIs), versioned (schema + analyzer),
9
+ * and layered (CDN < auto-generated < developer-authored).
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/manifest/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/notation/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAuBzD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqG1D,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAOxD;AAoBD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
1
+ {"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/notation/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAuBzD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAsG1D,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAOxD;AAoBD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
@@ -128,6 +128,7 @@ export const EDGE_ARCHETYPE_MAP = {
128
128
  AFFECTS: m('governs', '|=', 'affects'),
129
129
  MONITORED_BY: m('governs', '|=', 'monitored by'),
130
130
  MEASURED_BY: m('governs', '|=', 'measured by'),
131
+ OBSERVES: m('governs', '|=', 'observes'),
131
132
  PROVISIONED_BY: m('governs', '|=', 'provisioned by'),
132
133
  REGISTERS_VIEW: m('governs', '|=', 'registers view'),
133
134
  // === Fallback ===
@@ -1 +1 @@
1
- {"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/notation/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,oDAAoD;AACpD,4EAA4E;AAC5E,MAAM,IAAI,GAA8B;IACtC,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,yDAAyD;AACzD,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,SAAS,CAAC,CAAC,SAAoB,EAAE,QAAgB,EAAE,IAAY,EAAE,YAAqB;IACpF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D,yDAAyD;IACzD,QAAQ,EAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,CAAC;IAC7C,SAAS,EAAO,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC;IAC3C,UAAU,EAAM,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC;IACxC,QAAQ,EAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC;IACzC,YAAY,EAAI,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,CAAC;IAC7C,WAAW,EAAK,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC;IAC5C,QAAQ,EAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC;IACzC,UAAU,EAAM,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC;IAC3C,YAAY,EAAI,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,CAAC;IAC7C,SAAS,EAAO,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC;IAC1C,WAAW,EAAK,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC;IAC5C,QAAQ,EAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,CAAC;IAC7C,OAAO,EAAS,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC;IAC5C,MAAM,EAAU,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC;IAC3C,YAAY,EAAI,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC;IAE1C,uBAAuB;IACvB,UAAU,EAAM,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC;IAChD,OAAO,EAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IAC7C,YAAY,EAAI,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;IAClD,OAAO,EAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IAC7C,IAAI,EAAY,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC;IAC1C,WAAW,EAAK,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC;IACjD,WAAW,EAAK,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC;IACjD,WAAW,EAAK,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC;IACjD,YAAY,EAAI,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;IAElD,uBAAuB;IACvB,KAAK,EAAe,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;IAC/C,YAAY,EAAQ,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC;IACtD,SAAS,EAAW,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC;IACnD,UAAU,EAAU,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC;IACpD,aAAa,EAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC;IAClD,SAAS,EAAW,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC;IACnD,gBAAgB,EAAI,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;IACjD,eAAe,EAAK,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC;IAChD,OAAO,EAAa,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC;IAC/D,YAAY,EAAQ,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,YAAY,CAAC;IACpE,MAAM,EAAc,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC;IAC9D,aAAa,EAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE,YAAY,CAAC;IACrE,cAAc,EAAM,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC;IACxD,aAAa,EAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC;IAClD,UAAU,EAAU,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC;IACpD,QAAQ,EAAY,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC;IAClD,QAAQ,EAAY,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC;IAClD,UAAU,EAAU,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC;IAEpD,sBAAsB;IACtB,UAAU,EAAU,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;IAC9C,iBAAiB,EAAG,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC;IACjD,aAAa,EAAO,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,eAAe,CAAC;IACtD,YAAY,EAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,cAAc,CAAC;IACrD,YAAY,EAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,cAAc,CAAC;IACrD,UAAU,EAAU,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC;IACnD,MAAM,EAAc,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC;IAC/C,iBAAiB,EAAG,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC;IAC1D,aAAa,EAAO,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,eAAe,CAAC;IACtD,OAAO,EAAa,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;IAChD,UAAU,EAAU,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC;IACnD,WAAW,EAAS,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC;IAEpD,qBAAqB;IACrB,SAAS,EAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC9C,OAAO,EAAa,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC;IAC/C,cAAc,EAAO,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;IAE9C,yBAAyB;IACzB,MAAM,EAAc,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC;IAClD,OAAO,EAAa,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC;IACnD,YAAY,EAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC;IAExD,0BAA0B;IAC1B,WAAW,EAAS,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;IAClD,UAAU,EAAU,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC;IACvD,YAAY,EAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC;IACzD,aAAa,EAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC;IAC1D,WAAW,EAAS,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC;IACxD,OAAO,EAAa,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC;IACpD,UAAU,EAAU,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC;IAEvD,qBAAqB;IACrB,aAAa,EAAO,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC9C,cAAc,EAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;IAC5C,aAAa,EAAO,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;IAC5C,QAAQ,EAAY,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;IAC5C,WAAW,EAAS,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC;IAE/C,uBAAuB;IACvB,OAAO,EAAa,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IACjD,QAAQ,EAAY,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC;IAClD,OAAO,EAAa,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IACjD,YAAY,EAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;IACtD,WAAW,EAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC;IACrD,cAAc,EAAM,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC;IACxD,cAAc,EAAM,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC;IAExD,mBAAmB;IACnB,OAAO,EAAa,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,IAAI;QACrC,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/C,SAAS,EAAE,IAAI,CAAC,QAAQ;KACzB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB,GAA8C,CAAC,GAAG,EAAE;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAA8C,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClD,8DAA8D;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,EAAE,CAAC;AAEL;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IACrF,OAAO,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/notation/archetypes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafema/util",
3
- "version": "0.3.16",
3
+ "version": "0.3.18",
4
4
  "description": "Query, config, and guarantee utilities for Grafema",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -35,8 +35,8 @@
35
35
  "ajv": "^8.17.1",
36
36
  "minimatch": "^10.1.1",
37
37
  "yaml": "^2.8.2",
38
- "@grafema/rfdb-client": "0.3.16",
39
- "@grafema/types": "0.3.16"
38
+ "@grafema/rfdb-client": "0.3.18",
39
+ "@grafema/types": "0.3.18"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^25.0.8",
@@ -144,12 +144,45 @@ export class FileOverview {
144
144
  functions.push(await this.buildFunctionOverview(child, includeEdges));
145
145
  break;
146
146
  case 'VARIABLE':
147
- case 'CONSTANT':
148
- variables.push(await this.buildVariableOverview(child, includeEdges));
147
+ case 'CONSTANT': {
148
+ // Check if this is a const-bound function (const foo = () => {})
149
+ if (includeEdges) {
150
+ const assignedEdges = await this.graph.getOutgoingEdges(child.id, ['ASSIGNED_FROM']);
151
+ let isFunctionBinding = false;
152
+ for (const edge of assignedEdges) {
153
+ const target = await this.graph.getNode(edge.dst);
154
+ if (target && (target.type === 'FUNCTION' || target.type === 'METHOD')) {
155
+ // Build function overview using the target function but with the const name
156
+ const fnOverview = await this.buildFunctionOverview(target, includeEdges);
157
+ fnOverview.name = child.name ?? '<anonymous>';
158
+ fnOverview.line = child.line as number | undefined;
159
+ fnOverview.id = child.id;
160
+ functions.push(fnOverview);
161
+ isFunctionBinding = true;
162
+ break;
163
+ }
164
+ }
165
+ if (!isFunctionBinding) {
166
+ variables.push(await this.buildVariableOverview(child, includeEdges));
167
+ }
168
+ } else {
169
+ variables.push(await this.buildVariableOverview(child, includeEdges));
170
+ }
149
171
  break;
172
+ }
150
173
  }
151
174
  }
152
175
 
176
+ // CJS fallback: if no ESM imports/exports found, try CommonJS patterns
177
+ if (imports.length === 0) {
178
+ const cjsImports = await this.detectCjsImports(moduleNode.id);
179
+ imports.push(...cjsImports);
180
+ }
181
+ if (exports.length === 0) {
182
+ const cjsExports = await this.detectCjsExports(moduleNode.id);
183
+ exports.push(...cjsExports);
184
+ }
185
+
153
186
  const byLine = (a: { line?: number }, b: { line?: number }) =>
154
187
  (a.line ?? 0) - (b.line ?? 0);
155
188
 
@@ -364,6 +397,75 @@ export class FileOverview {
364
397
  return overview;
365
398
  }
366
399
 
400
+ /**
401
+ * Detect CommonJS require() calls as imports.
402
+ * Pattern: CALL(name="require") with PASSES_ARGUMENT -> LITERAL(value="module-path")
403
+ * Complexity: O(C * A) where C = CONTAINS edges, A = PASSES_ARGUMENT edges per CALL
404
+ */
405
+ private async detectCjsImports(moduleId: string): Promise<ImportInfo[]> {
406
+ const imports: ImportInfo[] = [];
407
+ const containsEdges = await this.graph.getOutgoingEdges(moduleId, ['CONTAINS']);
408
+
409
+ for (const edge of containsEdges) {
410
+ const child = await this.graph.getNode(edge.dst);
411
+ if (!child || child.type !== 'CALL') continue;
412
+ if (child.name !== 'require' && !child.name?.endsWith('.require')) continue;
413
+
414
+ // Find the first argument (module path)
415
+ const argEdges = await this.graph.getOutgoingEdges(child.id, ['PASSES_ARGUMENT']);
416
+ let source = '<unknown>';
417
+ for (const argEdge of argEdges) {
418
+ // Check metadata for index=0
419
+ const meta = argEdge.metadata;
420
+ const idx = typeof meta === 'object' && meta !== null ? (meta as Record<string, unknown>).index : undefined;
421
+ if (idx !== undefined && idx !== 0) continue;
422
+
423
+ const argNode = await this.graph.getNode(argEdge.dst);
424
+ if (argNode) {
425
+ source = (argNode.value as string) ?? argNode.name ?? '<unknown>';
426
+ break;
427
+ }
428
+ }
429
+
430
+ imports.push({ id: child.id, source, specifiers: [] });
431
+ }
432
+
433
+ return imports;
434
+ }
435
+
436
+ /**
437
+ * Detect CommonJS module.exports/exports assignments as exports.
438
+ * Pattern: PROPERTY_ACCESS with name containing "exports"
439
+ * Complexity: O(C) where C = CONTAINS edges from MODULE
440
+ */
441
+ private async detectCjsExports(moduleId: string): Promise<ExportInfo[]> {
442
+ const exports: ExportInfo[] = [];
443
+ const containsEdges = await this.graph.getOutgoingEdges(moduleId, ['CONTAINS']);
444
+
445
+ for (const edge of containsEdges) {
446
+ const child = await this.graph.getNode(edge.dst);
447
+ if (!child) continue;
448
+
449
+ if (child.type === 'PROPERTY_ACCESS') {
450
+ const name = child.name ?? '';
451
+ // Match patterns like "module.exports", "exports.foo"
452
+ if (name === 'module.exports' || name === 'exports' ||
453
+ name.startsWith('exports.') || name.startsWith('module.exports.')) {
454
+ const exportName = name.includes('.exports.')
455
+ ? name.split('.exports.').pop() ?? 'default'
456
+ : 'default';
457
+ exports.push({
458
+ id: child.id,
459
+ name: exportName,
460
+ isDefault: exportName === 'default',
461
+ });
462
+ }
463
+ }
464
+ }
465
+
466
+ return exports;
467
+ }
468
+
367
469
  /**
368
470
  * Build VariableOverview from a VARIABLE or CONSTANT node.
369
471
  * Complexity: Without edges O(1), with edges O(1)
package/src/index.ts CHANGED
@@ -257,5 +257,19 @@ export type {
257
257
  TraceNarrativeOptions,
258
258
  } from './notation/index.js';
259
259
 
260
+ // Manifest generation & resolution (federation)
261
+ export { ManifestGenerator, ManifestResolver } from './manifest/index.js';
262
+ export type {
263
+ Manifest,
264
+ ManifestExport,
265
+ ManifestImport,
266
+ ManifestParam,
267
+ EffectType,
268
+ FlowType,
269
+ ExportKind,
270
+ ResolveResult,
271
+ ManifestSummary,
272
+ } from './manifest/index.js';
273
+
260
274
  // Re-export types for convenience
261
275
  export type * from '@grafema/types';