-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtree-and-list-only-example.js
More file actions
178 lines (152 loc) · 4.19 KB
/
tree-and-list-only-example.js
File metadata and controls
178 lines (152 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
// Example: Tree View and List-Only Mode
// This example demonstrates how to use the tree view feature and list-only mode
const { generateTree, formatTree, integrateTreeWithCollector } = require('contextr');
const { FileContextBuilder } = require('contextr');
const path = require('path');
const fs = require('fs');
// Example 1: Generate and display a tree
async function showProjectTree() {
console.log('Example 1: Generate and display a project tree\n');
// Configure tree view
const treeConfig = {
rootDir: process.cwd(),
includeHidden: false,
maxDepth: 3,
exclude: [
'node_modules/**',
'dist/**',
'.git/**'
],
includeSize: true,
listOnlyPatterns: [
'**/*.png',
'**/*.jpg',
'**/*.gif',
'**/*.svg'
]
};
// Generate tree
const tree = await generateTree(treeConfig);
// Format and display tree
const formattedTree = formatTree(tree, {
showSize: true,
showListOnly: true
});
console.log(formattedTree);
console.log('\n');
}
// Example 2: Build context using tree and list-only mode
async function buildContextFromTree() {
console.log('Example 2: Build context using tree and list-only mode\n');
// Configure tree view
const treeConfig = {
rootDir: process.cwd(),
includeHidden: false,
maxDepth: 3,
exclude: [
'node_modules/**',
'dist/**',
'.git/**'
],
listOnlyPatterns: [
'**/*.png',
'**/*.jpg',
'**/*.gif',
'**/*.svg',
'**/*.min.js'
]
};
// Generate tree
const tree = await generateTree(treeConfig);
// Extract file paths from tree
const fileList = [];
const listOnlyFiles = [];
function traverseTree(node, basePath = '') {
if (!node.isDirectory) {
const fullPath = path.join(basePath, node.path);
if (node.listOnly) {
listOnlyFiles.push(fullPath);
} else {
fileList.push(fullPath);
}
}
if (node.children) {
for (const child of node.children) {
traverseTree(child, basePath);
}
}
}
traverseTree(tree);
// Create builder config
const builderConfig = {
includeFiles: fileList,
listOnlyFiles: listOnlyFiles
};
// Create builder
const builder = new FileContextBuilder(builderConfig);
// Build context
const result = await builder.build('console');
// Output summary
console.log(`Context built with ${fileList.length} regular files and ${listOnlyFiles.length} list-only files.`);
console.log('List-only files:');
listOnlyFiles.forEach(file => {
console.log(`- ${file}`);
});
// Write context to file
fs.writeFileSync('context.txt', result.output);
console.log('Context written to context.txt');
}
// Example 3: Using list-only mode with specific file types
async function listOnlySpecificTypes() {
console.log('Example 3: Using list-only mode with specific file types\n');
// Create builder with list-only configuration
const builder = new FileContextBuilder({
includeDirs: [
'src',
'public'
],
exclude: [
'node_modules/**',
'dist/**'
],
// List-only patterns for binary and large files
listOnlyPatterns: [
// Images
'**/*.png',
'**/*.jpg',
'**/*.gif',
'**/*.svg',
// Minified files
'**/*.min.js',
'**/*.min.css',
// Binary files
'**/*.pdf',
'**/*.zip',
'**/*.exe',
// Large files (handled separately in the code)
],
// Use regex for some patterns
useRegex: true
});
// Build context
const result = await builder.build('console');
// Output summary
console.log(`Context built successfully.`);
// Count list-only files
const listOnlyCount = result.files.filter(file => file.meta?.isListOnly).length;
console.log(`List-only files: ${listOnlyCount}`);
// Write context to file
fs.writeFileSync('context-list-only.txt', result.output);
console.log('Context written to context-list-only.txt');
}
// Run examples
async function runExamples() {
try {
await showProjectTree();
await buildContextFromTree();
await listOnlySpecificTypes();
} catch (error) {
console.error('Error running examples:', error);
}
}
runExamples();