agents-reverse-engineer 0.1.1
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.
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/change-detection/detector.d.ts +24 -0
- package/dist/change-detection/detector.d.ts.map +1 -0
- package/dist/change-detection/detector.js +114 -0
- package/dist/change-detection/detector.js.map +1 -0
- package/dist/change-detection/index.d.ts +9 -0
- package/dist/change-detection/index.d.ts.map +1 -0
- package/dist/change-detection/index.js +8 -0
- package/dist/change-detection/index.js.map +1 -0
- package/dist/change-detection/types.d.ts +39 -0
- package/dist/change-detection/types.d.ts.map +1 -0
- package/dist/change-detection/types.js +5 -0
- package/dist/change-detection/types.js.map +1 -0
- package/dist/cli/discover.d.ts +52 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +125 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/generate.d.ts +41 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +179 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +38 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +94 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/update.d.ts +28 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +296 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/config/defaults.d.ts +38 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +89 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +66 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +158 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +235 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +80 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/discovery/filters/binary.d.ts +46 -0
- package/dist/discovery/filters/binary.d.ts.map +1 -0
- package/dist/discovery/filters/binary.js +157 -0
- package/dist/discovery/filters/binary.js.map +1 -0
- package/dist/discovery/filters/custom.d.ts +26 -0
- package/dist/discovery/filters/custom.d.ts.map +1 -0
- package/dist/discovery/filters/custom.js +50 -0
- package/dist/discovery/filters/custom.js.map +1 -0
- package/dist/discovery/filters/gitignore.d.ts +24 -0
- package/dist/discovery/filters/gitignore.d.ts.map +1 -0
- package/dist/discovery/filters/gitignore.js +53 -0
- package/dist/discovery/filters/gitignore.js.map +1 -0
- package/dist/discovery/filters/index.d.ts +85 -0
- package/dist/discovery/filters/index.d.ts.map +1 -0
- package/dist/discovery/filters/index.js +98 -0
- package/dist/discovery/filters/index.js.map +1 -0
- package/dist/discovery/filters/vendor.d.ts +30 -0
- package/dist/discovery/filters/vendor.d.ts.map +1 -0
- package/dist/discovery/filters/vendor.js +57 -0
- package/dist/discovery/filters/vendor.js.map +1 -0
- package/dist/discovery/types.d.ts +66 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +8 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/discovery/walker.d.ts +24 -0
- package/dist/discovery/walker.d.ts.map +1 -0
- package/dist/discovery/walker.js +35 -0
- package/dist/discovery/walker.js.map +1 -0
- package/dist/generation/budget/chunker.d.ts +38 -0
- package/dist/generation/budget/chunker.d.ts.map +1 -0
- package/dist/generation/budget/chunker.js +73 -0
- package/dist/generation/budget/chunker.js.map +1 -0
- package/dist/generation/budget/counter.d.ts +26 -0
- package/dist/generation/budget/counter.d.ts.map +1 -0
- package/dist/generation/budget/counter.js +45 -0
- package/dist/generation/budget/counter.js.map +1 -0
- package/dist/generation/budget/index.d.ts +4 -0
- package/dist/generation/budget/index.d.ts.map +1 -0
- package/dist/generation/budget/index.js +4 -0
- package/dist/generation/budget/index.js.map +1 -0
- package/dist/generation/budget/tracker.d.ts +63 -0
- package/dist/generation/budget/tracker.d.ts.map +1 -0
- package/dist/generation/budget/tracker.js +96 -0
- package/dist/generation/budget/tracker.js.map +1 -0
- package/dist/generation/complexity.d.ts +43 -0
- package/dist/generation/complexity.d.ts.map +1 -0
- package/dist/generation/complexity.js +156 -0
- package/dist/generation/complexity.js.map +1 -0
- package/dist/generation/detection/detector.d.ts +23 -0
- package/dist/generation/detection/detector.d.ts.map +1 -0
- package/dist/generation/detection/detector.js +62 -0
- package/dist/generation/detection/detector.js.map +1 -0
- package/dist/generation/detection/patterns.d.ts +21 -0
- package/dist/generation/detection/patterns.d.ts.map +1 -0
- package/dist/generation/detection/patterns.js +115 -0
- package/dist/generation/detection/patterns.js.map +1 -0
- package/dist/generation/executor.d.ts +95 -0
- package/dist/generation/executor.d.ts.map +1 -0
- package/dist/generation/executor.js +352 -0
- package/dist/generation/executor.js.map +1 -0
- package/dist/generation/orchestrator.d.ts +126 -0
- package/dist/generation/orchestrator.d.ts.map +1 -0
- package/dist/generation/orchestrator.js +222 -0
- package/dist/generation/orchestrator.js.map +1 -0
- package/dist/generation/prompts/builder.d.ts +31 -0
- package/dist/generation/prompts/builder.d.ts.map +1 -0
- package/dist/generation/prompts/builder.js +136 -0
- package/dist/generation/prompts/builder.js.map +1 -0
- package/dist/generation/prompts/index.d.ts +5 -0
- package/dist/generation/prompts/index.d.ts.map +1 -0
- package/dist/generation/prompts/index.js +4 -0
- package/dist/generation/prompts/index.js.map +1 -0
- package/dist/generation/prompts/templates.d.ts +11 -0
- package/dist/generation/prompts/templates.d.ts.map +1 -0
- package/dist/generation/prompts/templates.js +247 -0
- package/dist/generation/prompts/templates.js.map +1 -0
- package/dist/generation/prompts/types.d.ts +71 -0
- package/dist/generation/prompts/types.d.ts.map +1 -0
- package/dist/generation/prompts/types.js +23 -0
- package/dist/generation/prompts/types.js.map +1 -0
- package/dist/generation/types.d.ts +72 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +5 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/writers/agents-md.d.ts +63 -0
- package/dist/generation/writers/agents-md.d.ts.map +1 -0
- package/dist/generation/writers/agents-md.js +235 -0
- package/dist/generation/writers/agents-md.js.map +1 -0
- package/dist/generation/writers/claude-md.d.ts +13 -0
- package/dist/generation/writers/claude-md.d.ts.map +1 -0
- package/dist/generation/writers/claude-md.js +33 -0
- package/dist/generation/writers/claude-md.js.map +1 -0
- package/dist/generation/writers/index.d.ts +5 -0
- package/dist/generation/writers/index.d.ts.map +1 -0
- package/dist/generation/writers/index.js +5 -0
- package/dist/generation/writers/index.js.map +1 -0
- package/dist/generation/writers/sum.d.ts +37 -0
- package/dist/generation/writers/sum.d.ts.map +1 -0
- package/dist/generation/writers/sum.js +98 -0
- package/dist/generation/writers/sum.js.map +1 -0
- package/dist/generation/writers/supplementary.d.ts +53 -0
- package/dist/generation/writers/supplementary.d.ts.map +1 -0
- package/dist/generation/writers/supplementary.js +195 -0
- package/dist/generation/writers/supplementary.js.map +1 -0
- package/dist/integration/detect.d.ts +28 -0
- package/dist/integration/detect.d.ts.map +1 -0
- package/dist/integration/detect.js +64 -0
- package/dist/integration/detect.js.map +1 -0
- package/dist/integration/generate.d.ts +36 -0
- package/dist/integration/generate.d.ts.map +1 -0
- package/dist/integration/generate.js +107 -0
- package/dist/integration/generate.js.map +1 -0
- package/dist/integration/templates.d.ts +42 -0
- package/dist/integration/templates.d.ts.map +1 -0
- package/dist/integration/templates.js +203 -0
- package/dist/integration/templates.js.map +1 -0
- package/dist/integration/types.d.ts +44 -0
- package/dist/integration/types.d.ts.map +1 -0
- package/dist/integration/types.js +8 -0
- package/dist/integration/types.js.map +1 -0
- package/dist/output/logger.d.ts +86 -0
- package/dist/output/logger.d.ts.map +1 -0
- package/dist/output/logger.js +107 -0
- package/dist/output/logger.js.map +1 -0
- package/dist/state/database.d.ts +9 -0
- package/dist/state/database.d.ts.map +1 -0
- package/dist/state/database.js +66 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/index.d.ts +8 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/migrations.d.ts +12 -0
- package/dist/state/migrations.d.ts.map +1 -0
- package/dist/state/migrations.js +39 -0
- package/dist/state/migrations.js.map +1 -0
- package/dist/state/types.d.ts +54 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/update/index.d.ts +10 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/orchestrator.d.ts +91 -0
- package/dist/update/orchestrator.d.ts.map +1 -0
- package/dist/update/orchestrator.js +204 -0
- package/dist/update/orchestrator.js.map +1 -0
- package/dist/update/orphan-cleaner.d.ts +30 -0
- package/dist/update/orphan-cleaner.d.ts.map +1 -0
- package/dist/update/orphan-cleaner.js +151 -0
- package/dist/update/orphan-cleaner.js.map +1 -0
- package/dist/update/types.d.ts +59 -0
- package/dist/update/types.d.ts.map +1 -0
- package/dist/update/types.js +2 -0
- package/dist/update/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schema for configuration validation
|
|
3
|
+
*
|
|
4
|
+
* This schema defines the structure of `.agents-reverse/config.yaml`
|
|
5
|
+
* and provides sensible defaults for all fields.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
/**
|
|
9
|
+
* Schema for exclusion configuration
|
|
10
|
+
*/
|
|
11
|
+
declare const ExcludeSchema: z.ZodDefault<z.ZodObject<{
|
|
12
|
+
/** Custom glob patterns to exclude (e.g., ["*.log", "temp/**"]) */
|
|
13
|
+
patterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
14
|
+
/** Vendor directories to exclude */
|
|
15
|
+
vendorDirs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
16
|
+
/** Binary file extensions to exclude */
|
|
17
|
+
binaryExtensions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
vendorDirs: string[];
|
|
20
|
+
patterns: string[];
|
|
21
|
+
binaryExtensions: string[];
|
|
22
|
+
}, {
|
|
23
|
+
vendorDirs?: string[] | undefined;
|
|
24
|
+
patterns?: string[] | undefined;
|
|
25
|
+
binaryExtensions?: string[] | undefined;
|
|
26
|
+
}>>;
|
|
27
|
+
/**
|
|
28
|
+
* Schema for options configuration
|
|
29
|
+
*/
|
|
30
|
+
declare const OptionsSchema: z.ZodDefault<z.ZodObject<{
|
|
31
|
+
/** Whether to follow symbolic links during traversal */
|
|
32
|
+
followSymlinks: z.ZodDefault<z.ZodBoolean>;
|
|
33
|
+
/** Maximum file size in bytes (files larger than this are skipped) */
|
|
34
|
+
maxFileSize: z.ZodDefault<z.ZodNumber>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
maxFileSize: number;
|
|
37
|
+
followSymlinks: boolean;
|
|
38
|
+
}, {
|
|
39
|
+
maxFileSize?: number | undefined;
|
|
40
|
+
followSymlinks?: boolean | undefined;
|
|
41
|
+
}>>;
|
|
42
|
+
/**
|
|
43
|
+
* Schema for output configuration
|
|
44
|
+
*/
|
|
45
|
+
declare const OutputSchema: z.ZodDefault<z.ZodObject<{
|
|
46
|
+
/** Whether to use colors in terminal output */
|
|
47
|
+
colors: z.ZodDefault<z.ZodBoolean>;
|
|
48
|
+
/** Whether to show verbose output (each file as processed) */
|
|
49
|
+
verbose: z.ZodDefault<z.ZodBoolean>;
|
|
50
|
+
}, "strip", z.ZodTypeAny, {
|
|
51
|
+
colors: boolean;
|
|
52
|
+
verbose: boolean;
|
|
53
|
+
}, {
|
|
54
|
+
colors?: boolean | undefined;
|
|
55
|
+
verbose?: boolean | undefined;
|
|
56
|
+
}>>;
|
|
57
|
+
/**
|
|
58
|
+
* Schema for generation configuration
|
|
59
|
+
*/
|
|
60
|
+
declare const GenerationSchema: z.ZodDefault<z.ZodObject<{
|
|
61
|
+
/** Token budget for entire project (default: 100,000) */
|
|
62
|
+
tokenBudget: z.ZodDefault<z.ZodNumber>;
|
|
63
|
+
/** Generate ARCHITECTURE.md when thresholds met (default: true) */
|
|
64
|
+
generateArchitecture: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
/** Generate STACK.md from package.json (default: true) */
|
|
66
|
+
generateStack: z.ZodDefault<z.ZodBoolean>;
|
|
67
|
+
/** Output directory for supplementary docs (default: project root) */
|
|
68
|
+
supplementaryDocsDir: z.ZodOptional<z.ZodString>;
|
|
69
|
+
/** Chunk size for large files in tokens (default: 3000) */
|
|
70
|
+
chunkSize: z.ZodDefault<z.ZodNumber>;
|
|
71
|
+
}, "strip", z.ZodTypeAny, {
|
|
72
|
+
tokenBudget: number;
|
|
73
|
+
generateArchitecture: boolean;
|
|
74
|
+
generateStack: boolean;
|
|
75
|
+
chunkSize: number;
|
|
76
|
+
supplementaryDocsDir?: string | undefined;
|
|
77
|
+
}, {
|
|
78
|
+
tokenBudget?: number | undefined;
|
|
79
|
+
generateArchitecture?: boolean | undefined;
|
|
80
|
+
generateStack?: boolean | undefined;
|
|
81
|
+
supplementaryDocsDir?: string | undefined;
|
|
82
|
+
chunkSize?: number | undefined;
|
|
83
|
+
}>>;
|
|
84
|
+
/**
|
|
85
|
+
* Main configuration schema for agents-reverse.
|
|
86
|
+
*
|
|
87
|
+
* All fields have sensible defaults, so an empty object `{}` is valid
|
|
88
|
+
* and will result in a fully populated configuration.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* // Parse with defaults
|
|
93
|
+
* const config = ConfigSchema.parse({});
|
|
94
|
+
*
|
|
95
|
+
* // Parse with partial overrides
|
|
96
|
+
* const config = ConfigSchema.parse({
|
|
97
|
+
* exclude: { patterns: ['*.log'] }
|
|
98
|
+
* });
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
102
|
+
/** Exclusion rules for files and directories */
|
|
103
|
+
exclude: z.ZodDefault<z.ZodObject<{
|
|
104
|
+
/** Custom glob patterns to exclude (e.g., ["*.log", "temp/**"]) */
|
|
105
|
+
patterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
106
|
+
/** Vendor directories to exclude */
|
|
107
|
+
vendorDirs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
108
|
+
/** Binary file extensions to exclude */
|
|
109
|
+
binaryExtensions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
110
|
+
}, "strip", z.ZodTypeAny, {
|
|
111
|
+
vendorDirs: string[];
|
|
112
|
+
patterns: string[];
|
|
113
|
+
binaryExtensions: string[];
|
|
114
|
+
}, {
|
|
115
|
+
vendorDirs?: string[] | undefined;
|
|
116
|
+
patterns?: string[] | undefined;
|
|
117
|
+
binaryExtensions?: string[] | undefined;
|
|
118
|
+
}>>;
|
|
119
|
+
/** Discovery options */
|
|
120
|
+
options: z.ZodDefault<z.ZodObject<{
|
|
121
|
+
/** Whether to follow symbolic links during traversal */
|
|
122
|
+
followSymlinks: z.ZodDefault<z.ZodBoolean>;
|
|
123
|
+
/** Maximum file size in bytes (files larger than this are skipped) */
|
|
124
|
+
maxFileSize: z.ZodDefault<z.ZodNumber>;
|
|
125
|
+
}, "strip", z.ZodTypeAny, {
|
|
126
|
+
maxFileSize: number;
|
|
127
|
+
followSymlinks: boolean;
|
|
128
|
+
}, {
|
|
129
|
+
maxFileSize?: number | undefined;
|
|
130
|
+
followSymlinks?: boolean | undefined;
|
|
131
|
+
}>>;
|
|
132
|
+
/** Output formatting options */
|
|
133
|
+
output: z.ZodDefault<z.ZodObject<{
|
|
134
|
+
/** Whether to use colors in terminal output */
|
|
135
|
+
colors: z.ZodDefault<z.ZodBoolean>;
|
|
136
|
+
/** Whether to show verbose output (each file as processed) */
|
|
137
|
+
verbose: z.ZodDefault<z.ZodBoolean>;
|
|
138
|
+
}, "strip", z.ZodTypeAny, {
|
|
139
|
+
colors: boolean;
|
|
140
|
+
verbose: boolean;
|
|
141
|
+
}, {
|
|
142
|
+
colors?: boolean | undefined;
|
|
143
|
+
verbose?: boolean | undefined;
|
|
144
|
+
}>>;
|
|
145
|
+
/** Generation options */
|
|
146
|
+
generation: z.ZodDefault<z.ZodObject<{
|
|
147
|
+
/** Token budget for entire project (default: 100,000) */
|
|
148
|
+
tokenBudget: z.ZodDefault<z.ZodNumber>;
|
|
149
|
+
/** Generate ARCHITECTURE.md when thresholds met (default: true) */
|
|
150
|
+
generateArchitecture: z.ZodDefault<z.ZodBoolean>;
|
|
151
|
+
/** Generate STACK.md from package.json (default: true) */
|
|
152
|
+
generateStack: z.ZodDefault<z.ZodBoolean>;
|
|
153
|
+
/** Output directory for supplementary docs (default: project root) */
|
|
154
|
+
supplementaryDocsDir: z.ZodOptional<z.ZodString>;
|
|
155
|
+
/** Chunk size for large files in tokens (default: 3000) */
|
|
156
|
+
chunkSize: z.ZodDefault<z.ZodNumber>;
|
|
157
|
+
}, "strip", z.ZodTypeAny, {
|
|
158
|
+
tokenBudget: number;
|
|
159
|
+
generateArchitecture: boolean;
|
|
160
|
+
generateStack: boolean;
|
|
161
|
+
chunkSize: number;
|
|
162
|
+
supplementaryDocsDir?: string | undefined;
|
|
163
|
+
}, {
|
|
164
|
+
tokenBudget?: number | undefined;
|
|
165
|
+
generateArchitecture?: boolean | undefined;
|
|
166
|
+
generateStack?: boolean | undefined;
|
|
167
|
+
supplementaryDocsDir?: string | undefined;
|
|
168
|
+
chunkSize?: number | undefined;
|
|
169
|
+
}>>;
|
|
170
|
+
}, "strip", z.ZodTypeAny, {
|
|
171
|
+
options: {
|
|
172
|
+
maxFileSize: number;
|
|
173
|
+
followSymlinks: boolean;
|
|
174
|
+
};
|
|
175
|
+
exclude: {
|
|
176
|
+
vendorDirs: string[];
|
|
177
|
+
patterns: string[];
|
|
178
|
+
binaryExtensions: string[];
|
|
179
|
+
};
|
|
180
|
+
output: {
|
|
181
|
+
colors: boolean;
|
|
182
|
+
verbose: boolean;
|
|
183
|
+
};
|
|
184
|
+
generation: {
|
|
185
|
+
tokenBudget: number;
|
|
186
|
+
generateArchitecture: boolean;
|
|
187
|
+
generateStack: boolean;
|
|
188
|
+
chunkSize: number;
|
|
189
|
+
supplementaryDocsDir?: string | undefined;
|
|
190
|
+
};
|
|
191
|
+
}, {
|
|
192
|
+
options?: {
|
|
193
|
+
maxFileSize?: number | undefined;
|
|
194
|
+
followSymlinks?: boolean | undefined;
|
|
195
|
+
} | undefined;
|
|
196
|
+
exclude?: {
|
|
197
|
+
vendorDirs?: string[] | undefined;
|
|
198
|
+
patterns?: string[] | undefined;
|
|
199
|
+
binaryExtensions?: string[] | undefined;
|
|
200
|
+
} | undefined;
|
|
201
|
+
output?: {
|
|
202
|
+
colors?: boolean | undefined;
|
|
203
|
+
verbose?: boolean | undefined;
|
|
204
|
+
} | undefined;
|
|
205
|
+
generation?: {
|
|
206
|
+
tokenBudget?: number | undefined;
|
|
207
|
+
generateArchitecture?: boolean | undefined;
|
|
208
|
+
generateStack?: boolean | undefined;
|
|
209
|
+
supplementaryDocsDir?: string | undefined;
|
|
210
|
+
chunkSize?: number | undefined;
|
|
211
|
+
} | undefined;
|
|
212
|
+
}>>;
|
|
213
|
+
/**
|
|
214
|
+
* Inferred TypeScript type from the schema.
|
|
215
|
+
* Use this type for function parameters and return types.
|
|
216
|
+
*/
|
|
217
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
218
|
+
/**
|
|
219
|
+
* Type for the exclude section of config
|
|
220
|
+
*/
|
|
221
|
+
export type ExcludeConfig = z.infer<typeof ExcludeSchema>;
|
|
222
|
+
/**
|
|
223
|
+
* Type for the options section of config
|
|
224
|
+
*/
|
|
225
|
+
export type OptionsConfig = z.infer<typeof OptionsSchema>;
|
|
226
|
+
/**
|
|
227
|
+
* Type for the output section of config
|
|
228
|
+
*/
|
|
229
|
+
export type OutputConfig = z.infer<typeof OutputSchema>;
|
|
230
|
+
/**
|
|
231
|
+
* Type for the generation section of config
|
|
232
|
+
*/
|
|
233
|
+
export type GenerationConfig = z.infer<typeof GenerationSchema>;
|
|
234
|
+
export {};
|
|
235
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;GAEG;AACH,QAAA,MAAM,aAAa;IACjB,mEAAmE;;IAEnE,oCAAoC;;IAEpC,wCAAwC;;;;;;;;;;GAE5B,CAAC;AAEf;;GAEG;AACH,QAAA,MAAM,aAAa;IACjB,wDAAwD;;IAExD,sEAAsE;;;;;;;;GAE1D,CAAC;AAEf;;GAEG;AACH,QAAA,MAAM,YAAY;IAChB,+CAA+C;;IAE/C,8DAA8D;;;;;;;;GAElD,CAAC;AAEf;;GAEG;AACH,QAAA,MAAM,gBAAgB;IACpB,yDAAyD;;IAEzD,mEAAmE;;IAEnE,0DAA0D;;IAE1D,sEAAsE;;IAEtE,2DAA2D;;;;;;;;;;;;;;GAE/C,CAAC;AAEf;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY;IACvB,gDAAgD;;QA9DhD,mEAAmE;;QAEnE,oCAAoC;;QAEpC,wCAAwC;;;;;;;;;;;IA4DxC,wBAAwB;;QApDxB,wDAAwD;;QAExD,sEAAsE;;;;;;;;;IAoDtE,gCAAgC;;QA5ChC,+CAA+C;;QAE/C,8DAA8D;;;;;;;;;IA4C9D,yBAAyB;;QApCzB,yDAAyD;;QAEzD,mEAAmE;;QAEnE,0DAA0D;;QAE1D,sEAAsE;;QAEtE,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8B/C,CAAC;AAEf;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schema for configuration validation
|
|
3
|
+
*
|
|
4
|
+
* This schema defines the structure of `.agents-reverse/config.yaml`
|
|
5
|
+
* and provides sensible defaults for all fields.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { DEFAULT_VENDOR_DIRS, DEFAULT_BINARY_EXTENSIONS, DEFAULT_MAX_FILE_SIZE, } from './defaults.js';
|
|
9
|
+
/**
|
|
10
|
+
* Schema for exclusion configuration
|
|
11
|
+
*/
|
|
12
|
+
const ExcludeSchema = z.object({
|
|
13
|
+
/** Custom glob patterns to exclude (e.g., ["*.log", "temp/**"]) */
|
|
14
|
+
patterns: z.array(z.string()).default([]),
|
|
15
|
+
/** Vendor directories to exclude */
|
|
16
|
+
vendorDirs: z.array(z.string()).default([...DEFAULT_VENDOR_DIRS]),
|
|
17
|
+
/** Binary file extensions to exclude */
|
|
18
|
+
binaryExtensions: z.array(z.string()).default([...DEFAULT_BINARY_EXTENSIONS]),
|
|
19
|
+
}).default({});
|
|
20
|
+
/**
|
|
21
|
+
* Schema for options configuration
|
|
22
|
+
*/
|
|
23
|
+
const OptionsSchema = z.object({
|
|
24
|
+
/** Whether to follow symbolic links during traversal */
|
|
25
|
+
followSymlinks: z.boolean().default(false),
|
|
26
|
+
/** Maximum file size in bytes (files larger than this are skipped) */
|
|
27
|
+
maxFileSize: z.number().positive().default(DEFAULT_MAX_FILE_SIZE),
|
|
28
|
+
}).default({});
|
|
29
|
+
/**
|
|
30
|
+
* Schema for output configuration
|
|
31
|
+
*/
|
|
32
|
+
const OutputSchema = z.object({
|
|
33
|
+
/** Whether to use colors in terminal output */
|
|
34
|
+
colors: z.boolean().default(true),
|
|
35
|
+
/** Whether to show verbose output (each file as processed) */
|
|
36
|
+
verbose: z.boolean().default(true),
|
|
37
|
+
}).default({});
|
|
38
|
+
/**
|
|
39
|
+
* Schema for generation configuration
|
|
40
|
+
*/
|
|
41
|
+
const GenerationSchema = z.object({
|
|
42
|
+
/** Token budget for entire project (default: 100,000) */
|
|
43
|
+
tokenBudget: z.number().positive().default(100_000),
|
|
44
|
+
/** Generate ARCHITECTURE.md when thresholds met (default: true) */
|
|
45
|
+
generateArchitecture: z.boolean().default(true),
|
|
46
|
+
/** Generate STACK.md from package.json (default: true) */
|
|
47
|
+
generateStack: z.boolean().default(true),
|
|
48
|
+
/** Output directory for supplementary docs (default: project root) */
|
|
49
|
+
supplementaryDocsDir: z.string().optional(),
|
|
50
|
+
/** Chunk size for large files in tokens (default: 3000) */
|
|
51
|
+
chunkSize: z.number().positive().default(3000),
|
|
52
|
+
}).default({});
|
|
53
|
+
/**
|
|
54
|
+
* Main configuration schema for agents-reverse.
|
|
55
|
+
*
|
|
56
|
+
* All fields have sensible defaults, so an empty object `{}` is valid
|
|
57
|
+
* and will result in a fully populated configuration.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* // Parse with defaults
|
|
62
|
+
* const config = ConfigSchema.parse({});
|
|
63
|
+
*
|
|
64
|
+
* // Parse with partial overrides
|
|
65
|
+
* const config = ConfigSchema.parse({
|
|
66
|
+
* exclude: { patterns: ['*.log'] }
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export const ConfigSchema = z.object({
|
|
71
|
+
/** Exclusion rules for files and directories */
|
|
72
|
+
exclude: ExcludeSchema,
|
|
73
|
+
/** Discovery options */
|
|
74
|
+
options: OptionsSchema,
|
|
75
|
+
/** Output formatting options */
|
|
76
|
+
output: OutputSchema,
|
|
77
|
+
/** Generation options */
|
|
78
|
+
generation: GenerationSchema,
|
|
79
|
+
}).default({});
|
|
80
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,oCAAoC;IACpC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;IACjE,wCAAwC;IACxC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC;CAC9E,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,wDAAwD;IACxD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,sEAAsE;IACtE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;CAClE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACjC,8DAA8D;IAC9D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACnC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,yDAAyD;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACnD,mEAAmE;IACnE,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,0DAA0D;IAC1D,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,sEAAsE;IACtE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,2DAA2D;IAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC/C,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,gDAAgD;IAChD,OAAO,EAAE,aAAa;IACtB,wBAAwB;IACxB,OAAO,EAAE,aAAa;IACtB,gCAAgC;IAChC,MAAM,EAAE,YAAY;IACpB,yBAAyB;IACzB,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary file filter for file discovery.
|
|
3
|
+
*
|
|
4
|
+
* Uses extension-based detection as a fast path, falling back to content
|
|
5
|
+
* analysis via `isbinaryfile` for unknown extensions. Also handles large
|
|
6
|
+
* files by size threshold.
|
|
7
|
+
*/
|
|
8
|
+
import type { FileFilter } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Set of file extensions known to be binary.
|
|
11
|
+
* These are excluded without content analysis for performance.
|
|
12
|
+
*/
|
|
13
|
+
export declare const BINARY_EXTENSIONS: Set<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Options for the binary filter.
|
|
16
|
+
*/
|
|
17
|
+
export interface BinaryFilterOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Maximum file size in bytes. Files larger than this are excluded.
|
|
20
|
+
* Default: 1MB (1048576 bytes)
|
|
21
|
+
*/
|
|
22
|
+
maxFileSize?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Additional binary extensions to recognize beyond the defaults.
|
|
25
|
+
*/
|
|
26
|
+
additionalExtensions?: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a binary filter that excludes binary files and files exceeding size limit.
|
|
30
|
+
*
|
|
31
|
+
* The filter uses a two-phase detection approach:
|
|
32
|
+
* 1. Fast path: Check extension against known binary extensions
|
|
33
|
+
* 2. Slow path: For unknown extensions, analyze file content with isbinaryfile
|
|
34
|
+
*
|
|
35
|
+
* @param options - Filter configuration options
|
|
36
|
+
* @returns A FileFilter that identifies binary files
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const filter = createBinaryFilter({ maxFileSize: 500000 });
|
|
41
|
+
* await filter.shouldExclude('/path/to/image.png'); // true (extension)
|
|
42
|
+
* await filter.shouldExclude('/path/to/unknown.xyz'); // checks content
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function createBinaryFilter(options?: BinaryFilterOptions): FileFilter;
|
|
46
|
+
//# sourceMappingURL=binary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../src/discovery/filters/binary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAyF5B,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAKD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAqChF"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary file filter for file discovery.
|
|
3
|
+
*
|
|
4
|
+
* Uses extension-based detection as a fast path, falling back to content
|
|
5
|
+
* analysis via `isbinaryfile` for unknown extensions. Also handles large
|
|
6
|
+
* files by size threshold.
|
|
7
|
+
*/
|
|
8
|
+
import { isBinaryFile } from 'isbinaryfile';
|
|
9
|
+
import fs from 'node:fs/promises';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
/**
|
|
12
|
+
* Set of file extensions known to be binary.
|
|
13
|
+
* These are excluded without content analysis for performance.
|
|
14
|
+
*/
|
|
15
|
+
export const BINARY_EXTENSIONS = new Set([
|
|
16
|
+
// Images
|
|
17
|
+
'.png',
|
|
18
|
+
'.jpg',
|
|
19
|
+
'.jpeg',
|
|
20
|
+
'.gif',
|
|
21
|
+
'.bmp',
|
|
22
|
+
'.ico',
|
|
23
|
+
'.webp',
|
|
24
|
+
'.svg',
|
|
25
|
+
'.tiff',
|
|
26
|
+
'.tif',
|
|
27
|
+
'.psd',
|
|
28
|
+
'.raw',
|
|
29
|
+
'.heif',
|
|
30
|
+
'.heic',
|
|
31
|
+
// Archives
|
|
32
|
+
'.zip',
|
|
33
|
+
'.tar',
|
|
34
|
+
'.gz',
|
|
35
|
+
'.rar',
|
|
36
|
+
'.7z',
|
|
37
|
+
'.bz2',
|
|
38
|
+
'.xz',
|
|
39
|
+
'.tgz',
|
|
40
|
+
// Executables
|
|
41
|
+
'.exe',
|
|
42
|
+
'.dll',
|
|
43
|
+
'.so',
|
|
44
|
+
'.dylib',
|
|
45
|
+
'.bin',
|
|
46
|
+
'.msi',
|
|
47
|
+
'.app',
|
|
48
|
+
'.dmg',
|
|
49
|
+
// Media
|
|
50
|
+
'.mp3',
|
|
51
|
+
'.mp4',
|
|
52
|
+
'.wav',
|
|
53
|
+
'.avi',
|
|
54
|
+
'.mov',
|
|
55
|
+
'.mkv',
|
|
56
|
+
'.flac',
|
|
57
|
+
'.ogg',
|
|
58
|
+
'.webm',
|
|
59
|
+
'.m4a',
|
|
60
|
+
'.aac',
|
|
61
|
+
'.wma',
|
|
62
|
+
'.wmv',
|
|
63
|
+
'.flv',
|
|
64
|
+
// Documents (binary formats)
|
|
65
|
+
'.pdf',
|
|
66
|
+
'.doc',
|
|
67
|
+
'.docx',
|
|
68
|
+
'.xls',
|
|
69
|
+
'.xlsx',
|
|
70
|
+
'.ppt',
|
|
71
|
+
'.pptx',
|
|
72
|
+
'.odt',
|
|
73
|
+
'.ods',
|
|
74
|
+
'.odp',
|
|
75
|
+
// Fonts
|
|
76
|
+
'.woff',
|
|
77
|
+
'.woff2',
|
|
78
|
+
'.ttf',
|
|
79
|
+
'.eot',
|
|
80
|
+
'.otf',
|
|
81
|
+
// Compiled/bytecode
|
|
82
|
+
'.class',
|
|
83
|
+
'.pyc',
|
|
84
|
+
'.pyo',
|
|
85
|
+
'.o',
|
|
86
|
+
'.obj',
|
|
87
|
+
'.a',
|
|
88
|
+
'.lib',
|
|
89
|
+
'.wasm',
|
|
90
|
+
// Database
|
|
91
|
+
'.db',
|
|
92
|
+
'.sqlite',
|
|
93
|
+
'.sqlite3',
|
|
94
|
+
'.mdb',
|
|
95
|
+
// Other
|
|
96
|
+
'.ico',
|
|
97
|
+
'.icns',
|
|
98
|
+
'.cur',
|
|
99
|
+
'.deb',
|
|
100
|
+
'.rpm',
|
|
101
|
+
'.jar',
|
|
102
|
+
'.war',
|
|
103
|
+
'.ear',
|
|
104
|
+
]);
|
|
105
|
+
/** Default maximum file size: 1MB */
|
|
106
|
+
const DEFAULT_MAX_FILE_SIZE = 1024 * 1024;
|
|
107
|
+
/**
|
|
108
|
+
* Creates a binary filter that excludes binary files and files exceeding size limit.
|
|
109
|
+
*
|
|
110
|
+
* The filter uses a two-phase detection approach:
|
|
111
|
+
* 1. Fast path: Check extension against known binary extensions
|
|
112
|
+
* 2. Slow path: For unknown extensions, analyze file content with isbinaryfile
|
|
113
|
+
*
|
|
114
|
+
* @param options - Filter configuration options
|
|
115
|
+
* @returns A FileFilter that identifies binary files
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* const filter = createBinaryFilter({ maxFileSize: 500000 });
|
|
120
|
+
* await filter.shouldExclude('/path/to/image.png'); // true (extension)
|
|
121
|
+
* await filter.shouldExclude('/path/to/unknown.xyz'); // checks content
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export function createBinaryFilter(options = {}) {
|
|
125
|
+
const { maxFileSize = DEFAULT_MAX_FILE_SIZE, additionalExtensions = [] } = options;
|
|
126
|
+
// Create a combined set of all binary extensions
|
|
127
|
+
const binaryExtensions = new Set(BINARY_EXTENSIONS);
|
|
128
|
+
for (const ext of additionalExtensions) {
|
|
129
|
+
// Ensure extension has leading dot
|
|
130
|
+
binaryExtensions.add(ext.startsWith('.') ? ext : `.${ext}`);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
name: 'binary',
|
|
134
|
+
async shouldExclude(absolutePath) {
|
|
135
|
+
// Fast path: check extension
|
|
136
|
+
const ext = path.extname(absolutePath).toLowerCase();
|
|
137
|
+
if (binaryExtensions.has(ext)) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
// Check file size and content
|
|
141
|
+
try {
|
|
142
|
+
const stats = await fs.stat(absolutePath);
|
|
143
|
+
// Exclude files exceeding size limit
|
|
144
|
+
if (stats.size > maxFileSize) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
// Slow path: content analysis for unknown extensions
|
|
148
|
+
return await isBinaryFile(absolutePath);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// If we can't read it, skip it
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../src/discovery/filters/binary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom pattern filter for file discovery.
|
|
3
|
+
*
|
|
4
|
+
* Allows users to specify additional exclusion patterns in their configuration.
|
|
5
|
+
* Uses the `ignore` library for gitignore-style pattern matching.
|
|
6
|
+
*/
|
|
7
|
+
import type { FileFilter } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a custom filter that excludes files matching user-provided patterns.
|
|
10
|
+
*
|
|
11
|
+
* Patterns use gitignore syntax and are checked against relative paths from
|
|
12
|
+
* the root directory. If no patterns are provided, the filter passes all files.
|
|
13
|
+
*
|
|
14
|
+
* @param patterns - Array of gitignore-style patterns to exclude
|
|
15
|
+
* @param root - Root directory for converting absolute paths to relative
|
|
16
|
+
* @returns A FileFilter that checks paths against custom patterns
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const filter = createCustomFilter(['*.log', 'tmp/**', 'secret.txt'], '/project');
|
|
21
|
+
* filter.shouldExclude('/project/debug.log'); // true
|
|
22
|
+
* filter.shouldExclude('/project/src/app.ts'); // false
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function createCustomFilter(patterns: string[], root: string): FileFilter;
|
|
26
|
+
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../src/discovery/filters/custom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CA6B/E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom pattern filter for file discovery.
|
|
3
|
+
*
|
|
4
|
+
* Allows users to specify additional exclusion patterns in their configuration.
|
|
5
|
+
* Uses the `ignore` library for gitignore-style pattern matching.
|
|
6
|
+
*/
|
|
7
|
+
import ignore from 'ignore';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Creates a custom filter that excludes files matching user-provided patterns.
|
|
11
|
+
*
|
|
12
|
+
* Patterns use gitignore syntax and are checked against relative paths from
|
|
13
|
+
* the root directory. If no patterns are provided, the filter passes all files.
|
|
14
|
+
*
|
|
15
|
+
* @param patterns - Array of gitignore-style patterns to exclude
|
|
16
|
+
* @param root - Root directory for converting absolute paths to relative
|
|
17
|
+
* @returns A FileFilter that checks paths against custom patterns
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const filter = createCustomFilter(['*.log', 'tmp/**', 'secret.txt'], '/project');
|
|
22
|
+
* filter.shouldExclude('/project/debug.log'); // true
|
|
23
|
+
* filter.shouldExclude('/project/src/app.ts'); // false
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function createCustomFilter(patterns, root) {
|
|
27
|
+
const ig = ignore();
|
|
28
|
+
const normalizedRoot = path.resolve(root);
|
|
29
|
+
// Add all patterns to the ignore instance
|
|
30
|
+
if (patterns.length > 0) {
|
|
31
|
+
ig.add(patterns);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
name: 'custom',
|
|
35
|
+
shouldExclude(absolutePath) {
|
|
36
|
+
// If no patterns, nothing to exclude
|
|
37
|
+
if (patterns.length === 0) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Convert to relative path (ignore library requires relative paths)
|
|
41
|
+
const relativePath = path.relative(normalizedRoot, absolutePath);
|
|
42
|
+
// If path is outside root (starts with ..) or is empty, don't exclude
|
|
43
|
+
if (!relativePath || relativePath.startsWith('..')) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
return ig.ignores(relativePath);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=custom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/discovery/filters/custom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAkB,EAAE,IAAY;IACjE,MAAM,EAAE,GAAW,MAAM,EAAE,CAAC;IAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QAEd,aAAa,CAAC,YAAoB;YAChC,qCAAqC;YACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC;YACf,CAAC;YAED,oEAAoE;YACpE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAEjE,sEAAsE;YACtE,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gitignore pattern filter for file discovery.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `ignore` library to parse and match .gitignore patterns.
|
|
5
|
+
* This filter loads the root .gitignore file and checks paths against
|
|
6
|
+
* the patterns to determine exclusion.
|
|
7
|
+
*/
|
|
8
|
+
import type { FileFilter } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Creates a gitignore filter that excludes files matching .gitignore patterns.
|
|
11
|
+
*
|
|
12
|
+
* @param root - The root directory containing the .gitignore file
|
|
13
|
+
* @returns A FileFilter that checks paths against gitignore patterns
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const filter = await createGitignoreFilter('/path/to/project');
|
|
18
|
+
* if (filter.shouldExclude('/path/to/project/dist/bundle.js')) {
|
|
19
|
+
* console.log('File is gitignored');
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function createGitignoreFilter(root: string): Promise<FileFilter>;
|
|
24
|
+
//# sourceMappingURL=gitignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../../src/discovery/filters/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA+B7E"}
|