agentmap 0.7.1 → 0.9.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 (96) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +24 -0
  3. package/dist/cli.js +44 -12
  4. package/dist/cli.js.map +1 -1
  5. package/dist/extract/definitions.js +12 -12
  6. package/dist/extract/definitions.js.map +1 -1
  7. package/dist/extract/definitions.test.js +30 -259
  8. package/dist/extract/definitions.test.js.map +1 -1
  9. package/dist/extract/git-status.d.ts +11 -4
  10. package/dist/extract/git-status.d.ts.map +1 -1
  11. package/dist/extract/git-status.js +21 -16
  12. package/dist/extract/git-status.js.map +1 -1
  13. package/dist/extract/markdown.js +1 -1
  14. package/dist/extract/markdown.test.js +3 -3
  15. package/dist/extract/markdown.test.js.map +1 -1
  16. package/dist/extract/marker.js +1 -1
  17. package/dist/extract/marker.test.js +4 -4
  18. package/dist/extract/marker.test.js.map +1 -1
  19. package/dist/extract/submodules.d.ts +12 -0
  20. package/dist/extract/submodules.d.ts.map +1 -0
  21. package/dist/extract/submodules.js +234 -0
  22. package/dist/extract/submodules.js.map +1 -0
  23. package/dist/extract/submodules.test.d.ts +2 -0
  24. package/dist/extract/submodules.test.d.ts.map +1 -0
  25. package/dist/extract/submodules.test.js +84 -0
  26. package/dist/extract/submodules.test.js.map +1 -0
  27. package/dist/index.d.ts +4 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -9
  30. package/dist/index.js.map +1 -1
  31. package/dist/logger.d.ts +10 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +41 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/map/builder.d.ts +3 -3
  36. package/dist/map/builder.d.ts.map +1 -1
  37. package/dist/map/builder.js +59 -9
  38. package/dist/map/builder.js.map +1 -1
  39. package/dist/map/builder.test.d.ts +2 -0
  40. package/dist/map/builder.test.d.ts.map +1 -0
  41. package/dist/map/builder.test.js +66 -0
  42. package/dist/map/builder.test.js.map +1 -0
  43. package/dist/map/truncate.d.ts +7 -3
  44. package/dist/map/truncate.d.ts.map +1 -1
  45. package/dist/map/truncate.js +90 -9
  46. package/dist/map/truncate.js.map +1 -1
  47. package/dist/map/yaml.d.ts.map +1 -1
  48. package/dist/map/yaml.js +13 -3
  49. package/dist/map/yaml.js.map +1 -1
  50. package/dist/scanner.d.ts +9 -2
  51. package/dist/scanner.d.ts.map +1 -1
  52. package/dist/scanner.js +172 -49
  53. package/dist/scanner.js.map +1 -1
  54. package/dist/scanner.test.d.ts +2 -0
  55. package/dist/scanner.test.d.ts.map +1 -0
  56. package/dist/scanner.test.js +84 -0
  57. package/dist/scanner.test.js.map +1 -0
  58. package/dist/test-helpers/git-test-helpers.d.ts +13 -0
  59. package/dist/test-helpers/git-test-helpers.d.ts.map +1 -0
  60. package/dist/test-helpers/git-test-helpers.js +48 -0
  61. package/dist/test-helpers/git-test-helpers.js.map +1 -0
  62. package/dist/types.d.ts +42 -2
  63. package/dist/types.d.ts.map +1 -1
  64. package/package.json +15 -3
  65. package/src/cli.ts +164 -0
  66. package/src/extract/definitions.test.ts +2040 -0
  67. package/src/extract/definitions.ts +379 -0
  68. package/src/extract/git-status.test.ts +507 -0
  69. package/src/extract/git-status.ts +359 -0
  70. package/src/extract/markdown.test.ts +159 -0
  71. package/src/extract/markdown.ts +202 -0
  72. package/src/extract/marker.test.ts +566 -0
  73. package/src/extract/marker.ts +398 -0
  74. package/src/extract/submodules.test.ts +95 -0
  75. package/src/extract/submodules.ts +269 -0
  76. package/src/extract/utils.ts +27 -0
  77. package/src/index.ts +106 -0
  78. package/src/languages/cpp.ts +129 -0
  79. package/src/languages/go.ts +72 -0
  80. package/src/languages/index.ts +231 -0
  81. package/src/languages/javascript.ts +33 -0
  82. package/src/languages/python.ts +41 -0
  83. package/src/languages/rust.ts +72 -0
  84. package/src/languages/typescript.ts +74 -0
  85. package/src/languages/zig.ts +106 -0
  86. package/src/logger.ts +55 -0
  87. package/src/map/builder.test.ts +72 -0
  88. package/src/map/builder.ts +175 -0
  89. package/src/map/truncate.ts +188 -0
  90. package/src/map/yaml.ts +66 -0
  91. package/src/parser/index.ts +53 -0
  92. package/src/parser/languages.ts +64 -0
  93. package/src/scanner.test.ts +95 -0
  94. package/src/scanner.ts +364 -0
  95. package/src/test-helpers/git-test-helpers.ts +62 -0
  96. package/src/types.ts +191 -0
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import { toYaml } from './map/yaml.js';
8
8
  import { truncateMap } from './map/truncate.js';
9
9
  export { toYaml } from './map/yaml.js';
10
10
  export { truncateMap, truncateDefs } from './map/truncate.js';
11
+ export { createConsoleLogger, createNoopLogger, formatLogMessage } from './logger.js';
11
12
  /**
12
13
  * Check if directory is inside a git repository
13
14
  */
@@ -40,11 +41,11 @@ export async function generateMap(options = {}) {
40
41
  if (!isGitRepo(dir) || isHomeDirectory(dir)) {
41
42
  return { [rootName]: {} };
42
43
  }
43
- const results = await scanDirectory({ ...options, dir });
44
- const map = buildMap(results, rootName);
45
- // Apply truncation (default 25)
44
+ const { files, submodules } = await scanDirectory({ ...options, dir });
45
+ const map = buildMap(files, rootName, submodules);
46
+ // Apply truncation
46
47
  const maxDefs = options.maxDefs ?? DEFAULT_MAX_DEFS;
47
- return truncateMap(map, maxDefs);
48
+ return truncateMap(map, { maxDefs, maxDescChars: options.maxDescChars });
48
49
  }
49
50
  /**
50
51
  * Generate a YAML string map from a directory
@@ -56,15 +57,15 @@ export async function generateMapYaml(options = {}) {
56
57
  if (!isGitRepo(dir) || isHomeDirectory(dir)) {
57
58
  return '';
58
59
  }
59
- const results = await scanDirectory({ ...options, dir });
60
- if (results.length === 0) {
60
+ const { files, submodules } = await scanDirectory({ ...options, dir });
61
+ if (files.length === 0 && submodules.length === 0) {
61
62
  return '';
62
63
  }
63
64
  const rootName = getRootName(dir);
64
- const map = buildMap(results, rootName);
65
- // Apply truncation (default 25)
65
+ const map = buildMap(files, rootName, submodules);
66
+ // Apply truncation
66
67
  const maxDefs = options.maxDefs ?? DEFAULT_MAX_DEFS;
67
- const truncated = truncateMap(map, maxDefs);
68
+ const truncated = truncateMap(map, { maxDefs, maxDescChars: options.maxDescChars });
68
69
  return toYaml(truncated);
69
70
  }
70
71
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface Logger {
2
+ debug: (...args: unknown[]) => void;
3
+ info: (...args: unknown[]) => void;
4
+ warn: (...args: unknown[]) => void;
5
+ error: (...args: unknown[]) => void;
6
+ }
7
+ export declare function createNoopLogger(): Logger;
8
+ export declare function formatLogMessage(args: unknown[]): string;
9
+ export declare function createConsoleLogger(): Logger;
10
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACpC;AAWD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAkBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAExD;AAOD,wBAAgB,mBAAmB,IAAI,MAAM,CAO5C"}
package/dist/logger.js ADDED
@@ -0,0 +1,41 @@
1
+ // Shared logger abstraction used by CLI and integrations.
2
+ const NOOP = () => { };
3
+ const NOOP_LOGGER = {
4
+ debug: NOOP,
5
+ info: NOOP,
6
+ warn: NOOP,
7
+ error: NOOP,
8
+ };
9
+ export function createNoopLogger() {
10
+ return NOOP_LOGGER;
11
+ }
12
+ function formatArg(value) {
13
+ if (typeof value === 'string') {
14
+ return value;
15
+ }
16
+ if (value instanceof Error) {
17
+ return value.stack ?? value.message;
18
+ }
19
+ try {
20
+ return JSON.stringify(value);
21
+ }
22
+ catch {
23
+ return String(value);
24
+ }
25
+ }
26
+ export function formatLogMessage(args) {
27
+ return args.map(formatArg).join(' ');
28
+ }
29
+ function writeLine(stream, args) {
30
+ const message = formatLogMessage(args);
31
+ stream.write(message.endsWith('\n') ? message : `${message}\n`);
32
+ }
33
+ export function createConsoleLogger() {
34
+ return {
35
+ debug: (...args) => writeLine(process.stderr, args),
36
+ info: (...args) => writeLine(process.stderr, args),
37
+ warn: (...args) => writeLine(process.stderr, args),
38
+ error: (...args) => writeLine(process.stderr, args),
39
+ };
40
+ }
41
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAS1D,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAErB,MAAM,WAAW,GAAW;IAC1B,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;CACZ,CAAA;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAA;IACrC,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAe;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,MAAyC,EAAE,IAAe;IAC3E,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;QACnD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;QAClD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;QAClD,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;KACpD,CAAA;AACH,CAAC"}
@@ -1,8 +1,8 @@
1
- import type { FileResult, MapNode } from '../types.js';
1
+ import type { FileResult, MapNode, SubmoduleInfo } from '../types.js';
2
2
  /**
3
- * Build a nested map object from file results
3
+ * Build a nested map object from file results and submodule info
4
4
  */
5
- export declare function buildMap(results: FileResult[], rootName: string): MapNode;
5
+ export declare function buildMap(results: FileResult[], rootName: string, submodules?: SubmoduleInfo[]): MapNode;
6
6
  /**
7
7
  * Get the root name from a directory path
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,UAAU,EAAiB,OAAO,EAAE,MAAM,aAAa,CAAA;AAE5F;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CASzE;AA4FD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,UAAU,EAAiB,OAAO,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AAE1H;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,EAAE,GAAG,OAAO,CAgBvG;AA6ID;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C"}
@@ -1,10 +1,16 @@
1
1
  // Build the nested map object from file results.
2
2
  import { basename } from 'path';
3
3
  /**
4
- * Build a nested map object from file results
4
+ * Build a nested map object from file results and submodule info
5
5
  */
6
- export function buildMap(results, rootName) {
6
+ export function buildMap(results, rootName, submodules) {
7
7
  const root = {};
8
+ // Insert submodule entries
9
+ if (submodules) {
10
+ for (const sub of submodules) {
11
+ insertSubmodule(root, sub);
12
+ }
13
+ }
8
14
  for (const result of results) {
9
15
  insertFile(root, result);
10
16
  }
@@ -25,20 +31,20 @@ function formatFileDiff(diff) {
25
31
  return parts.join('');
26
32
  }
27
33
  /**
28
- * Format a definition as a string like "line 13, function, exported, extern, updated (+5-2)"
34
+ * Format a definition as a string like "exported fn updated (+5-2)"
35
+ * No commas, exported/extern before the type, "fn" instead of "function".
29
36
  */
30
37
  function formatDefinition(def) {
31
- const lineStr = `line ${def.line}`;
32
- const parts = [lineStr, def.type];
38
+ const parts = [];
33
39
  if (def.exported) {
34
40
  parts.push('exported');
35
41
  }
36
42
  if (def.extern) {
37
43
  parts.push('extern');
38
44
  }
45
+ parts.push(def.type === 'function' ? 'fn' : def.type);
39
46
  // Add diff info if present
40
47
  if (def.diff) {
41
- // Format as +N-M or just +N or -M
42
48
  const diffParts = [];
43
49
  if (def.diff.added > 0) {
44
50
  diffParts.push(`+${def.diff.added}`);
@@ -46,7 +52,6 @@ function formatDefinition(def) {
46
52
  if (def.diff.deleted > 0) {
47
53
  diffParts.push(`-${def.diff.deleted}`);
48
54
  }
49
- // Combine status with counts: "updated (+5-2)" or just "added"
50
55
  if (diffParts.length > 0) {
51
56
  parts.push(`${def.diff.status} (${diffParts.join('')})`);
52
57
  }
@@ -54,7 +59,7 @@ function formatDefinition(def) {
54
59
  parts.push(def.diff.status);
55
60
  }
56
61
  }
57
- return parts.join(', ');
62
+ return parts.join(' ');
58
63
  }
59
64
  /**
60
65
  * Insert a file result into the map at its path location
@@ -70,8 +75,13 @@ function insertFile(root, result) {
70
75
  }
71
76
  current = current[dir];
72
77
  }
73
- // Create file entry - description first, then diff, then defs
78
+ // Create file entry
74
79
  const filename = parts[parts.length - 1];
80
+ // Duplicate files: just point to the original, no defs
81
+ if (result.duplicateOf) {
82
+ current[filename] = { description: `duplicate of ${result.duplicateOf}` };
83
+ return;
84
+ }
75
85
  const entry = {};
76
86
  if (result.description) {
77
87
  entry.description = result.description;
@@ -87,6 +97,46 @@ function insertFile(root, result) {
87
97
  }
88
98
  current[filename] = entry;
89
99
  }
100
+ /**
101
+ * Insert a submodule entry into the map at its path location.
102
+ * Format: "branch @ sha" or "detached @ sha" or "uninitialized @ sha"
103
+ */
104
+ function insertSubmodule(root, sub) {
105
+ const parts = sub.path.split('/');
106
+ let current = root;
107
+ // Navigate/create directory structure for nested submodule paths
108
+ for (let i = 0; i < parts.length - 1; i++) {
109
+ const dir = parts[i];
110
+ if (!current[dir]) {
111
+ current[dir] = {};
112
+ }
113
+ current = current[dir];
114
+ }
115
+ // Build the submodule label
116
+ let label;
117
+ if (!sub.initialized) {
118
+ label = `uninitialized @ ${sub.commit}`;
119
+ }
120
+ else if (sub.branch) {
121
+ label = `${sub.branch} @ ${sub.commit}`;
122
+ }
123
+ else {
124
+ label = `detached @ ${sub.commit}`;
125
+ }
126
+ const name = parts[parts.length - 1];
127
+ const existing = current[name];
128
+ const entry = existing && typeof existing === 'object'
129
+ ? existing
130
+ : { submodule: label };
131
+ entry.submodule = label;
132
+ if (sub.dirty) {
133
+ entry.dirty = 'modified';
134
+ }
135
+ else {
136
+ delete entry.dirty;
137
+ }
138
+ current[name] = entry;
139
+ }
90
140
  /**
91
141
  * Get the root name from a directory path
92
142
  */
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAG/B;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAqB,EAAE,QAAgB;IAC9D,MAAM,IAAI,GAAY,EAAE,CAAA;IAExB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED,oBAAoB;IACpB,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAmB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAe;IACvC,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAA;IAElC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAEjC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtB,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,kCAAkC;QAClC,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACxC,CAAC;QAED,+DAA+D;QAC/D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAa,EAAE,MAAkB;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,OAAO,GAAG,IAAI,CAAA;IAElB,sCAAsC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QACnB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAY,CAAA;IACnC,CAAC;IAED,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxC,MAAM,KAAK,GAAc,EAAE,CAAA;IAE3B,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;IACxC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;QACf,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,0BAA0B;IAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACvC,oDAAoD;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC9B,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AACpD,CAAC"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.test.d.ts","sourceRoot":"","sources":["../../src/map/builder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ // Tests for building nested map nodes for recursive submodule trees.
2
+ import { describe, expect, test } from 'bun:test';
3
+ import { buildMap } from './builder.js';
4
+ describe('buildMap with recursive submodules', () => {
5
+ test('renders submodule metadata and nested files under the same node', () => {
6
+ const map = buildMap([
7
+ {
8
+ relativePath: 'README.md',
9
+ description: 'Root repo\nRoot README.',
10
+ definitions: [],
11
+ },
12
+ {
13
+ relativePath: 'vendor/child-lib/README.md',
14
+ description: 'Child repo\nChild README.',
15
+ definitions: [],
16
+ },
17
+ {
18
+ relativePath: 'vendor/child-lib/deps/nested-lib/README.md',
19
+ description: 'Nested repo\nNested README.',
20
+ definitions: [],
21
+ },
22
+ ], 'repo', [
23
+ {
24
+ path: 'vendor/child-lib',
25
+ commit: 'abc1234',
26
+ branch: undefined,
27
+ dirty: false,
28
+ initialized: true,
29
+ url: undefined,
30
+ },
31
+ {
32
+ path: 'vendor/child-lib/deps/nested-lib',
33
+ commit: 'def5678',
34
+ branch: undefined,
35
+ dirty: true,
36
+ initialized: true,
37
+ url: undefined,
38
+ },
39
+ ]);
40
+ expect(map).toEqual({
41
+ repo: {
42
+ 'README.md': {
43
+ description: 'Root repo\nRoot README.',
44
+ },
45
+ vendor: {
46
+ 'child-lib': {
47
+ 'README.md': {
48
+ description: 'Child repo\nChild README.',
49
+ },
50
+ deps: {
51
+ 'nested-lib': {
52
+ 'README.md': {
53
+ description: 'Nested repo\nNested README.',
54
+ },
55
+ dirty: 'modified',
56
+ submodule: 'detached @ def5678',
57
+ },
58
+ },
59
+ submodule: 'detached @ abc1234',
60
+ },
61
+ },
62
+ },
63
+ });
64
+ });
65
+ });
66
+ //# sourceMappingURL=builder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.test.js","sourceRoot":"","sources":["../../src/map/builder.test.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC3E,MAAM,GAAG,GAAG,QAAQ,CAClB;YACE;gBACE,YAAY,EAAE,WAAW;gBACzB,WAAW,EAAE,yBAAyB;gBACtC,WAAW,EAAE,EAAE;aAChB;YACD;gBACE,YAAY,EAAE,4BAA4B;gBAC1C,WAAW,EAAE,2BAA2B;gBACxC,WAAW,EAAE,EAAE;aAChB;YACD;gBACE,YAAY,EAAE,4CAA4C;gBAC1D,WAAW,EAAE,6BAA6B;gBAC1C,WAAW,EAAE,EAAE;aAChB;SACF,EACD,MAAM,EACN;YACE;gBACE,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,IAAI;gBACjB,GAAG,EAAE,SAAS;aACf;YACD;gBACE,IAAI,EAAE,kCAAkC;gBACxC,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,IAAI;gBACjB,GAAG,EAAE,SAAS;aACf;SACF,CACF,CAAA;QAED,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE;gBACJ,WAAW,EAAE;oBACX,WAAW,EAAE,yBAAyB;iBACvC;gBACD,MAAM,EAAE;oBACN,WAAW,EAAE;wBACX,WAAW,EAAE;4BACX,WAAW,EAAE,2BAA2B;yBACzC;wBACD,IAAI,EAAE;4BACJ,YAAY,EAAE;gCACZ,WAAW,EAAE;oCACX,WAAW,EAAE,6BAA6B;iCAC3C;gCACD,KAAK,EAAE,UAAU;gCACjB,SAAS,EAAE,oBAAoB;6BAChC;yBACF;wBACD,SAAS,EAAE,oBAAoB;qBAChC;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,12 +1,16 @@
1
1
  import type { FileEntry, MapNode } from '../types.js';
2
+ export interface TruncateOptions {
3
+ maxDefs?: number;
4
+ maxDescChars?: number;
5
+ }
2
6
  /**
3
7
  * Truncate definitions in a file entry to maxDefs
4
8
  * If file has exported symbols, shows only exports field instead
5
9
  * Otherwise uses current truncation behavior
6
10
  */
7
- export declare function truncateDefs(entry: FileEntry, maxDefs?: number): FileEntry;
11
+ export declare function truncateDefs(entry: FileEntry, maxDefsOrOptions?: number | TruncateOptions): FileEntry;
8
12
  /**
9
- * Recursively truncate defs in all files in the map
13
+ * Recursively truncate defs and descriptions in all files in the map
10
14
  */
11
- export declare function truncateMap(node: MapNode, maxDefs?: number): MapNode;
15
+ export declare function truncateMap(node: MapNode, maxDefsOrOptions?: number | TruncateOptions): MapNode;
12
16
  //# sourceMappingURL=truncate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/map/truncate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAoB/D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,MAAyB,GAAG,SAAS,CA0C5F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,MAAyB,GAAG,OAAO,CActF"}
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/map/truncate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,SAAS,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAA;AAK9F,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAuGD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CA8CrG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAkB/F"}
@@ -1,11 +1,40 @@
1
- // Truncate definitions in map to limit context size.
1
+ // Truncate definitions and descriptions in map to limit context size.
2
2
  const DEFAULT_MAX_DEFS = 25;
3
+ const DEFAULT_MAX_DESC_CHARS = 300;
3
4
  /**
4
5
  * Check if a def value indicates exported or extern
5
6
  */
6
7
  function isExportedDef(value) {
7
8
  return value.includes('exported') || value.includes('extern');
8
9
  }
10
+ /**
11
+ * Truncate description by character count, rounding up to include the full line
12
+ * that crosses the limit (in excess).
13
+ */
14
+ function truncateDescriptionByChars(description, maxChars) {
15
+ if (description.length <= maxChars)
16
+ return description;
17
+ const lines = description.split('\n');
18
+ // Single-line fallback: hard-truncate at maxChars
19
+ if (lines.length === 1) {
20
+ return description.slice(0, maxChars) + '...';
21
+ }
22
+ let charCount = 0;
23
+ for (let i = 0; i < lines.length; i++) {
24
+ // +1 for the newline separator (except first line)
25
+ charCount += lines[i].length + (i > 0 ? 1 : 0);
26
+ if (charCount >= maxChars) {
27
+ // Include this line (in excess), then stop
28
+ const kept = lines.slice(0, i + 1);
29
+ const remaining = lines.length - kept.length;
30
+ if (remaining > 0) {
31
+ kept.push(`... and ${remaining} more lines`);
32
+ }
33
+ return kept.join('\n');
34
+ }
35
+ }
36
+ return description;
37
+ }
9
38
  /**
10
39
  * Check if a value is a FileEntry (has description or defs)
11
40
  */
@@ -15,12 +44,61 @@ function isFileEntry(value) {
15
44
  const obj = value;
16
45
  return 'description' in obj || 'defs' in obj;
17
46
  }
47
+ /**
48
+ * Check if a value is a SubmoduleEntry (has submodule key)
49
+ */
50
+ function isSubmoduleEntry(value) {
51
+ if (!value || typeof value !== 'object')
52
+ return false;
53
+ return 'submodule' in value;
54
+ }
55
+ /**
56
+ * Recursively truncate a submodule node while preserving its metadata keys.
57
+ */
58
+ function truncateSubmoduleNode(entry, options) {
59
+ const result = { submodule: entry.submodule };
60
+ if (entry.dirty) {
61
+ result.dirty = entry.dirty;
62
+ }
63
+ for (const [key, value] of Object.entries(entry)) {
64
+ if (key === 'submodule' || key === 'dirty') {
65
+ continue;
66
+ }
67
+ if (isFileEntry(value)) {
68
+ result[key] = truncateFileEntry(value, options);
69
+ }
70
+ else if (isSubmoduleEntry(value)) {
71
+ result[key] = truncateSubmoduleNode(value, options);
72
+ }
73
+ else if (value && typeof value === 'object') {
74
+ result[key] = truncateMap(value, options);
75
+ }
76
+ }
77
+ return result;
78
+ }
79
+ /**
80
+ * Truncate a file entry: cap description by chars and defs by count.
81
+ */
82
+ function truncateFileEntry(entry, options) {
83
+ let result = entry;
84
+ // Truncate description by character count
85
+ const maxDescChars = options.maxDescChars ?? DEFAULT_MAX_DESC_CHARS;
86
+ if (result.description && result.description.length > maxDescChars) {
87
+ result = { ...result, description: truncateDescriptionByChars(result.description, maxDescChars) };
88
+ }
89
+ // Truncate defs
90
+ result = truncateDefs(result, options.maxDefs);
91
+ return result;
92
+ }
18
93
  /**
19
94
  * Truncate definitions in a file entry to maxDefs
20
95
  * If file has exported symbols, shows only exports field instead
21
96
  * Otherwise uses current truncation behavior
22
97
  */
23
- export function truncateDefs(entry, maxDefs = DEFAULT_MAX_DEFS) {
98
+ export function truncateDefs(entry, maxDefsOrOptions) {
99
+ const maxDefs = typeof maxDefsOrOptions === 'number'
100
+ ? maxDefsOrOptions
101
+ : (maxDefsOrOptions?.maxDefs ?? DEFAULT_MAX_DEFS);
24
102
  if (!entry.defs)
25
103
  return entry;
26
104
  const defNames = Object.keys(entry.defs);
@@ -57,19 +135,22 @@ export function truncateDefs(entry, maxDefs = DEFAULT_MAX_DEFS) {
57
135
  return { ...entry, defs: truncated };
58
136
  }
59
137
  /**
60
- * Recursively truncate defs in all files in the map
138
+ * Recursively truncate defs and descriptions in all files in the map
61
139
  */
62
- export function truncateMap(node, maxDefs = DEFAULT_MAX_DEFS) {
140
+ export function truncateMap(node, maxDefsOrOptions) {
141
+ const options = typeof maxDefsOrOptions === 'number'
142
+ ? { maxDefs: maxDefsOrOptions }
143
+ : (maxDefsOrOptions ?? {});
63
144
  const result = {};
64
145
  for (const [key, value] of Object.entries(node)) {
65
146
  if (isFileEntry(value)) {
66
- result[key] = truncateDefs(value, maxDefs);
147
+ result[key] = truncateFileEntry(value, options);
67
148
  }
68
- else if (value && typeof value === 'object') {
69
- result[key] = truncateMap(value, maxDefs);
149
+ else if (isSubmoduleEntry(value)) {
150
+ result[key] = truncateSubmoduleNode(value, options);
70
151
  }
71
- else {
72
- result[key] = value;
152
+ else if (value && typeof value === 'object') {
153
+ result[key] = truncateMap(value, options);
73
154
  }
74
155
  }
75
156
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/map/truncate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/map/truncate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AA0C1C;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU3C"}
1
+ {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAgD1C;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU3C"}
package/dist/map/yaml.js CHANGED
@@ -8,7 +8,7 @@ function isReadme(key) {
8
8
  return lower === 'readme.md' || lower === 'readme';
9
9
  }
10
10
  /**
11
- * Custom key sorter: description first, then diff, then defs/exports, then README files, then alphabetical
11
+ * Custom key sorter: description first, then submodule/dirty, then diff, then defs/exports, then README files, then alphabetical
12
12
  */
13
13
  function sortKeys(a, b) {
14
14
  // description always first
@@ -16,12 +16,22 @@ function sortKeys(a, b) {
16
16
  return -1;
17
17
  if (b === 'description')
18
18
  return 1;
19
- // diff second
19
+ // submodule second (for submodule entries)
20
+ if (a === 'submodule')
21
+ return -1;
22
+ if (b === 'submodule')
23
+ return 1;
24
+ // dirty third (for submodule entries)
25
+ if (a === 'dirty')
26
+ return -1;
27
+ if (b === 'dirty')
28
+ return 1;
29
+ // diff fourth
20
30
  if (a === 'diff')
21
31
  return -1;
22
32
  if (b === 'diff')
23
33
  return 1;
24
- // defs/exports third
34
+ // defs/exports fifth
25
35
  if (a === 'defs' || a === 'exports')
26
36
  return -1;
27
37
  if (b === 'defs' || b === 'exports')
@@ -1 +1 @@
1
- {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAG1B;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,2BAA2B;IAC3B,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAA;IACjC,cAAc;IACd,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAA;IAC1B,qBAAqB;IACrB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAC7C,uCAAuC;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IACtC,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAA;IACrC,mCAAmC;IACnC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,OAAO,CAAC,OAAO,CACpB,6DAA6D,EAC7D,YAAY,CACb,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC,CAAC,EAAG,mBAAmB;QACnC,MAAM,EAAE,IAAI,EAAI,4BAA4B;QAC5C,QAAQ,EAAQ,qCAAqC;QACrD,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAA;IACF,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAG1B;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,2BAA2B;IAC3B,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAA;IACjC,2CAA2C;IAC3C,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,CAAC,CAAC,CAAA;IAChC,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,CAAC,CAAA;IAC/B,sCAAsC;IACtC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,CAAA;IAC5B,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,CAAC,CAAA;IAC3B,cAAc;IACd,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAA;IAC1B,qBAAqB;IACrB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAC7C,uCAAuC;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IACtC,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAA;IACrC,mCAAmC;IACnC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,OAAO,CAAC,OAAO,CACpB,6DAA6D,EAC7D,YAAY,CACb,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC,CAAC,EAAG,mBAAmB;QACnC,MAAM,EAAE,IAAI,EAAI,4BAA4B;QAC5C,QAAQ,EAAQ,qCAAqC;QACrD,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAA;IACF,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
package/dist/scanner.d.ts CHANGED
@@ -1,6 +1,13 @@
1
- import type { FileResult, GenerateOptions } from './types.js';
1
+ import type { FileResult, GenerateOptions, SubmoduleInfo } from './types.js';
2
+ /**
3
+ * Result of scanning a directory, including both file results and submodule info
4
+ */
5
+ export interface ScanResult {
6
+ files: FileResult[];
7
+ submodules: SubmoduleInfo[];
8
+ }
2
9
  /**
3
10
  * Scan directory and process files with header comments
4
11
  */
5
- export declare function scanDirectory(options?: GenerateOptions): Promise<FileResult[]>;
12
+ export declare function scanDirectory(options?: GenerateOptions): Promise<ScanResult>;
6
13
  //# sourceMappingURL=scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAA2B,MAAM,YAAY,CAAA;AAuDtF;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsExF"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAA2B,aAAa,EAAE,MAAM,YAAY,CAAA;AAsHrG;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,UAAU,EAAE,aAAa,EAAE,CAAA;CAC5B;AAuJD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAetF"}