@grafema/util 0.3.18 → 0.3.21

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 (49) hide show
  1. package/dist/core/FileOverview.d.ts.map +1 -1
  2. package/dist/core/FileOverview.js +16 -12
  3. package/dist/core/FileOverview.js.map +1 -1
  4. package/dist/federation/FederatedRouter.d.ts +124 -0
  5. package/dist/federation/FederatedRouter.d.ts.map +1 -0
  6. package/dist/federation/FederatedRouter.js +297 -0
  7. package/dist/federation/FederatedRouter.js.map +1 -0
  8. package/dist/federation/ShardDiscovery.d.ts +56 -0
  9. package/dist/federation/ShardDiscovery.d.ts.map +1 -0
  10. package/dist/federation/ShardDiscovery.js +100 -0
  11. package/dist/federation/ShardDiscovery.js.map +1 -0
  12. package/dist/federation/index.d.ts +28 -0
  13. package/dist/federation/index.d.ts.map +1 -0
  14. package/dist/federation/index.js +26 -0
  15. package/dist/federation/index.js.map +1 -0
  16. package/dist/index.d.ts +4 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/manifest/generator.d.ts.map +1 -1
  21. package/dist/manifest/generator.js +38 -5
  22. package/dist/manifest/generator.js.map +1 -1
  23. package/dist/manifest/index.d.ts +2 -0
  24. package/dist/manifest/index.d.ts.map +1 -1
  25. package/dist/manifest/index.js +1 -0
  26. package/dist/manifest/index.js.map +1 -1
  27. package/dist/manifest/registry.d.ts +116 -0
  28. package/dist/manifest/registry.d.ts.map +1 -0
  29. package/dist/manifest/registry.js +638 -0
  30. package/dist/manifest/registry.js.map +1 -0
  31. package/dist/manifest/resolver.d.ts +9 -0
  32. package/dist/manifest/resolver.d.ts.map +1 -1
  33. package/dist/manifest/resolver.js +31 -0
  34. package/dist/manifest/resolver.js.map +1 -1
  35. package/dist/notation/traceRenderer.d.ts +2 -0
  36. package/dist/notation/traceRenderer.d.ts.map +1 -1
  37. package/dist/notation/traceRenderer.js +6 -5
  38. package/dist/notation/traceRenderer.js.map +1 -1
  39. package/package.json +3 -3
  40. package/src/core/FileOverview.ts +16 -11
  41. package/src/federation/FederatedRouter.ts +440 -0
  42. package/src/federation/ShardDiscovery.ts +130 -0
  43. package/src/federation/index.ts +35 -0
  44. package/src/index.ts +16 -1
  45. package/src/manifest/generator.ts +37 -5
  46. package/src/manifest/index.ts +2 -0
  47. package/src/manifest/registry.ts +769 -0
  48. package/src/manifest/resolver.ts +33 -0
  49. package/src/notation/traceRenderer.ts +8 -5
@@ -174,9 +174,13 @@ export class ManifestGenerator {
174
174
  // Graph-based approach:
175
175
  // EXPORT(named) --EXPORTS--> EXPORT_BINDING(name, source) --> definition in source file
176
176
  await this.collectExportsViaBindings(entryFile, exports, seen, new Set());
177
- } else {
178
- // Fallback: all exported definitions from the package
177
+ }
178
+
179
+ // Fallback: if entry-file mode found 0 exports (e.g., CJS barrel,
180
+ // broken re-export chain in compiled_js), scan all exported definitions
181
+ if (exports.length === 0) {
179
182
  const prefix = this.options.packagePrefix ?? '';
183
+ // Check standard definition types (FUNCTION, CLASS, CONSTANT, INTERFACE)
180
184
  for (const type of ManifestGenerator.DEF_TYPES) {
181
185
  for await (const node of this.backend.queryNodes({ type: type as never })) {
182
186
  if (prefix && !node.file?.startsWith(prefix)) continue;
@@ -187,10 +191,28 @@ export class ManifestGenerator {
187
191
  await this.addExportFromDefinition(node, exports);
188
192
  }
189
193
  }
194
+ // Also check EXPORT_BINDING nodes (from CJS exports.foo = ...)
195
+ if (exports.length === 0) {
196
+ for await (const node of this.backend.queryNodes({ type: 'EXPORT_BINDING' as never })) {
197
+ if (prefix && !node.file?.startsWith(prefix)) continue;
198
+ if (!node.name || node.name === 'named' || node.name === 'default') continue;
199
+ if (seen.has(node.name)) continue;
200
+ seen.add(node.name);
201
+ exports.push({
202
+ name: node.name,
203
+ kind: 'VARIABLE',
204
+ semanticId: node.id,
205
+ effects: ['UNKNOWN'],
206
+ });
207
+ }
208
+ }
190
209
  }
191
210
 
192
211
  exports.sort((a, b) => a.name.localeCompare(b.name));
193
- return exports;
212
+
213
+ // Filter minified single-character exports (signal of internal bundler code)
214
+ const filtered = exports.filter(e => e.name.length > 1);
215
+ return filtered;
194
216
  }
195
217
 
196
218
  /** Collect exports by traversing EXPORT → EXPORT_BINDING graph edges from entry file */
@@ -258,6 +280,14 @@ export class ManifestGenerator {
258
280
  const def = await this.findDefinitionInFile(name, resolved);
259
281
  if (def) return def;
260
282
 
283
+ // Try common extensions if no match found (compiled_js often omits extensions in source fields)
284
+ for (const ext of ['.js', '.mjs', '.cjs', '/index.js', '/index.mjs']) {
285
+ const withExt = resolved.endsWith(ext) ? null : resolved + ext;
286
+ if (!withExt) continue;
287
+ const defWithExt = await this.findDefinitionInFile(name, withExt);
288
+ if (defWithExt) return defWithExt;
289
+ }
290
+
261
291
  // Follow barrel re-export chain via EXPORT_BINDING
262
292
  for await (const binding of this.backend.queryNodes({
263
293
  type: 'EXPORT_BINDING' as never, name, file: resolved,
@@ -276,7 +306,8 @@ export class ManifestGenerator {
276
306
  const dir = fromFile.substring(0, fromFile.lastIndexOf('/'));
277
307
  let resolved = source.startsWith('.') ? `${dir}/${source}` : source;
278
308
  resolved = resolved.replace(/\/\.\//g, '/');
279
- if (resolved.endsWith('.js')) {
309
+ // Only replace .js → .ts for source TypeScript code, not compiled_js
310
+ if (this.options.sourceType !== 'compiled_js' && resolved.endsWith('.js')) {
280
311
  resolved = resolved.replace(/\.js$/, '.ts');
281
312
  }
282
313
  return resolved;
@@ -330,7 +361,8 @@ export class ManifestGenerator {
330
361
  /** Enrich all exports with computed effects (transitive call graph analysis) */
331
362
  private async enrichEffects(exports: ManifestExport[]): Promise<void> {
332
363
  for (const entry of exports) {
333
- if (entry.kind !== 'FUNCTION' && entry.kind !== 'CLASS') continue;
364
+ // Enrich FUNCTION, CLASS, and VARIABLE (CJS exports may be VARIABLE kind)
365
+ if (entry.kind !== 'FUNCTION' && entry.kind !== 'CLASS' && entry.kind !== 'VARIABLE') continue;
334
366
 
335
367
  const effects = new Set<EffectType>();
336
368
  const visited = new Set<string>();
@@ -1,6 +1,8 @@
1
1
  export { ManifestGenerator } from './generator.js';
2
2
  export { ManifestResolver } from './resolver.js';
3
3
  export type { ResolveResult, ManifestSummary } from './resolver.js';
4
+ export { RegistryBuilder, resolvePackageDir, detectSourceType, resolveEntryPoint } from './registry.js';
5
+ export type { RegistryEntry, RegistryIndex, RegistryBuilderOptions, BuildResult } from './registry.js';
4
6
  export type {
5
7
  Manifest,
6
8
  ManifestExport,