codesynapse 1.0.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.
- package/README.md +270 -0
- package/bin/cli.js +79 -0
- package/client/build/asset-manifest.json +14 -0
- package/client/build/index.html +1 -0
- package/client/build/static/css/main.23fcdbf2.css +2 -0
- package/client/build/static/css/main.23fcdbf2.css.map +1 -0
- package/client/build/static/js/main.5c90edac.js +3 -0
- package/client/build/static/js/main.5c90edac.js.LICENSE.txt +51 -0
- package/client/build/static/js/main.5c90edac.js.map +1 -0
- package/client/build/static/media/ngraph.events.d3dfed5ea2f996b98f21.cjs +1 -0
- package/package.json +61 -0
- package/server/dist/DependencyParser.d.ts +8 -0
- package/server/dist/DependencyParser.js +178 -0
- package/server/dist/DependencyParser.js.map +1 -0
- package/server/dist/FileWatcher.d.ts +12 -0
- package/server/dist/FileWatcher.js +125 -0
- package/server/dist/FileWatcher.js.map +1 -0
- package/server/dist/GitIntegration.d.ts +11 -0
- package/server/dist/GitIntegration.js +140 -0
- package/server/dist/GitIntegration.js.map +1 -0
- package/server/dist/GraphBuilder.d.ts +21 -0
- package/server/dist/GraphBuilder.js +201 -0
- package/server/dist/GraphBuilder.js.map +1 -0
- package/server/dist/index.d.ts +1 -0
- package/server/dist/index.js +338 -0
- package/server/dist/index.js.map +1 -0
- package/server/dist/types.d.ts +46 -0
- package/server/dist/types.js +3 -0
- package/server/dist/types.js.map +1 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GraphBuilder = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class GraphBuilder {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.nodes = new Map();
|
|
42
|
+
this.links = new Map();
|
|
43
|
+
this.changeFrequency = new Map();
|
|
44
|
+
}
|
|
45
|
+
buildGraph(files, dependencyMap) {
|
|
46
|
+
this.nodes.clear();
|
|
47
|
+
this.links.clear();
|
|
48
|
+
// Create nodes for all files
|
|
49
|
+
for (const filePath of files) {
|
|
50
|
+
this.addNode(filePath);
|
|
51
|
+
}
|
|
52
|
+
// Create links based on dependencies
|
|
53
|
+
for (const [source, targets] of Object.entries(dependencyMap)) {
|
|
54
|
+
for (const target of targets) {
|
|
55
|
+
this.addLink(source, target, 'import');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return this.getGraphData();
|
|
59
|
+
}
|
|
60
|
+
addNode(filePath) {
|
|
61
|
+
if (this.nodes.has(filePath)) {
|
|
62
|
+
return this.nodes.get(filePath);
|
|
63
|
+
}
|
|
64
|
+
let stats = null;
|
|
65
|
+
try {
|
|
66
|
+
stats = fs.statSync(filePath);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
// File might have been deleted
|
|
70
|
+
}
|
|
71
|
+
const node = {
|
|
72
|
+
id: filePath,
|
|
73
|
+
name: path.basename(filePath),
|
|
74
|
+
path: filePath,
|
|
75
|
+
type: this.getFileType(filePath),
|
|
76
|
+
size: stats ? stats.size : 0,
|
|
77
|
+
lastModified: stats ? stats.mtimeMs : Date.now(),
|
|
78
|
+
connections: 0,
|
|
79
|
+
changeFrequency: this.changeFrequency.get(filePath) || 0
|
|
80
|
+
};
|
|
81
|
+
this.nodes.set(filePath, node);
|
|
82
|
+
return node;
|
|
83
|
+
}
|
|
84
|
+
updateNode(filePath, changes) {
|
|
85
|
+
const node = this.nodes.get(filePath);
|
|
86
|
+
if (!node) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
Object.assign(node, changes);
|
|
90
|
+
// Update last modified
|
|
91
|
+
try {
|
|
92
|
+
const stats = fs.statSync(filePath);
|
|
93
|
+
node.lastModified = stats.mtimeMs;
|
|
94
|
+
node.size = stats.size;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// File might have been deleted
|
|
98
|
+
}
|
|
99
|
+
// Increment change frequency
|
|
100
|
+
const freq = this.changeFrequency.get(filePath) || 0;
|
|
101
|
+
this.changeFrequency.set(filePath, freq + 1);
|
|
102
|
+
node.changeFrequency = freq + 1;
|
|
103
|
+
return node;
|
|
104
|
+
}
|
|
105
|
+
removeNode(filePath) {
|
|
106
|
+
// Remove all links connected to this node
|
|
107
|
+
const linksToRemove = [];
|
|
108
|
+
for (const [linkId, link] of this.links.entries()) {
|
|
109
|
+
if (link.source === filePath || link.target === filePath) {
|
|
110
|
+
linksToRemove.push(linkId);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
linksToRemove.forEach(linkId => this.links.delete(linkId));
|
|
114
|
+
return this.nodes.delete(filePath);
|
|
115
|
+
}
|
|
116
|
+
addLink(source, target, type) {
|
|
117
|
+
const linkId = `${source}->${target}`;
|
|
118
|
+
if (this.links.has(linkId)) {
|
|
119
|
+
return this.links.get(linkId);
|
|
120
|
+
}
|
|
121
|
+
// Only add link if both nodes exist
|
|
122
|
+
if (!this.nodes.has(source) || !this.nodes.has(target)) {
|
|
123
|
+
// Ensure both nodes exist
|
|
124
|
+
if (!this.nodes.has(source))
|
|
125
|
+
this.addNode(source);
|
|
126
|
+
if (!this.nodes.has(target))
|
|
127
|
+
this.addNode(target);
|
|
128
|
+
}
|
|
129
|
+
const link = {
|
|
130
|
+
source,
|
|
131
|
+
target,
|
|
132
|
+
type
|
|
133
|
+
};
|
|
134
|
+
this.links.set(linkId, link);
|
|
135
|
+
// Update connection counts
|
|
136
|
+
const sourceNode = this.nodes.get(source);
|
|
137
|
+
const targetNode = this.nodes.get(target);
|
|
138
|
+
if (sourceNode)
|
|
139
|
+
sourceNode.connections = (sourceNode.connections || 0) + 1;
|
|
140
|
+
if (targetNode)
|
|
141
|
+
targetNode.connections = (targetNode.connections || 0) + 1;
|
|
142
|
+
return link;
|
|
143
|
+
}
|
|
144
|
+
removeLink(source, target) {
|
|
145
|
+
const linkId = `${source}->${target}`;
|
|
146
|
+
const removed = this.links.delete(linkId);
|
|
147
|
+
if (removed) {
|
|
148
|
+
// Update connection counts
|
|
149
|
+
const sourceNode = this.nodes.get(source);
|
|
150
|
+
const targetNode = this.nodes.get(target);
|
|
151
|
+
if (sourceNode && sourceNode.connections)
|
|
152
|
+
sourceNode.connections--;
|
|
153
|
+
if (targetNode && targetNode.connections)
|
|
154
|
+
targetNode.connections--;
|
|
155
|
+
}
|
|
156
|
+
return removed;
|
|
157
|
+
}
|
|
158
|
+
getGraphData() {
|
|
159
|
+
return {
|
|
160
|
+
nodes: Array.from(this.nodes.values()),
|
|
161
|
+
links: Array.from(this.links.values())
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
getNode(filePath) {
|
|
165
|
+
return this.nodes.get(filePath);
|
|
166
|
+
}
|
|
167
|
+
getFileType(filePath) {
|
|
168
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
169
|
+
const typeMap = {
|
|
170
|
+
'.js': 'javascript',
|
|
171
|
+
'.jsx': 'javascript',
|
|
172
|
+
'.ts': 'typescript',
|
|
173
|
+
'.tsx': 'typescript',
|
|
174
|
+
'.mjs': 'javascript',
|
|
175
|
+
'.cjs': 'javascript',
|
|
176
|
+
'.json': 'json',
|
|
177
|
+
'.css': 'style',
|
|
178
|
+
'.scss': 'style',
|
|
179
|
+
'.sass': 'style',
|
|
180
|
+
'.less': 'style',
|
|
181
|
+
'.html': 'markup',
|
|
182
|
+
'.md': 'markdown',
|
|
183
|
+
'.txt': 'text',
|
|
184
|
+
'.yml': 'config',
|
|
185
|
+
'.yaml': 'config',
|
|
186
|
+
'.toml': 'config',
|
|
187
|
+
'.env': 'config'
|
|
188
|
+
};
|
|
189
|
+
return typeMap[ext] || 'other';
|
|
190
|
+
}
|
|
191
|
+
getStats() {
|
|
192
|
+
return {
|
|
193
|
+
fileCount: this.nodes.size,
|
|
194
|
+
connectionCount: this.links.size,
|
|
195
|
+
changeCount: Array.from(this.changeFrequency.values()).reduce((a, b) => a + b, 0),
|
|
196
|
+
lastChangeTime: Math.max(...Array.from(this.nodes.values()).map(n => n.lastModified))
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.GraphBuilder = GraphBuilder;
|
|
201
|
+
//# sourceMappingURL=GraphBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphBuilder.js","sourceRoot":"","sources":["../src/GraphBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const express_1 = __importDefault(require("express"));
|
|
40
|
+
const http_1 = require("http");
|
|
41
|
+
const socket_io_1 = require("socket.io");
|
|
42
|
+
const cors_1 = __importDefault(require("cors"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const FileWatcher_1 = require("./FileWatcher");
|
|
46
|
+
const DependencyParser_1 = require("./DependencyParser");
|
|
47
|
+
const GitIntegration_1 = require("./GitIntegration");
|
|
48
|
+
const GraphBuilder_1 = require("./GraphBuilder");
|
|
49
|
+
const app = (0, express_1.default)();
|
|
50
|
+
const httpServer = (0, http_1.createServer)(app);
|
|
51
|
+
const io = new socket_io_1.Server(httpServer, {
|
|
52
|
+
cors: {
|
|
53
|
+
origin: 'http://localhost:3000',
|
|
54
|
+
methods: ['GET', 'POST']
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
const PORT = process.env.PORT || 3004;
|
|
58
|
+
// Middleware
|
|
59
|
+
app.use((0, cors_1.default)());
|
|
60
|
+
app.use(express_1.default.json());
|
|
61
|
+
// Serve static files from React build in production
|
|
62
|
+
const clientBuildPath = path.join(__dirname, '../../client/build');
|
|
63
|
+
if (fs.existsSync(clientBuildPath)) {
|
|
64
|
+
app.use(express_1.default.static(clientBuildPath));
|
|
65
|
+
}
|
|
66
|
+
// Health check endpoint
|
|
67
|
+
app.get('/health', (req, res) => {
|
|
68
|
+
res.json({ status: 'ok', timestamp: Date.now() });
|
|
69
|
+
});
|
|
70
|
+
// Get current working directory (parent of server folder)
|
|
71
|
+
app.get('/api/cwd', (req, res) => {
|
|
72
|
+
const cwd = process.cwd();
|
|
73
|
+
// If we're in the server directory, go up one level to the project root
|
|
74
|
+
const projectRoot = cwd.endsWith('/server') ? path.dirname(cwd) : cwd;
|
|
75
|
+
res.json({ cwd: projectRoot });
|
|
76
|
+
});
|
|
77
|
+
// Socket.io connection handling
|
|
78
|
+
io.on('connection', (socket) => {
|
|
79
|
+
console.log('Client connected:', socket.id);
|
|
80
|
+
const fileWatcher = new FileWatcher_1.FileWatcher();
|
|
81
|
+
const dependencyParser = new DependencyParser_1.DependencyParser();
|
|
82
|
+
const gitIntegration = new GitIntegration_1.GitIntegration();
|
|
83
|
+
const graphBuilder = new GraphBuilder_1.GraphBuilder();
|
|
84
|
+
let isInitialized = false;
|
|
85
|
+
let updateTimeout = null;
|
|
86
|
+
// Debounced graph update function
|
|
87
|
+
const scheduleGraphUpdate = () => {
|
|
88
|
+
if (updateTimeout) {
|
|
89
|
+
clearTimeout(updateTimeout);
|
|
90
|
+
}
|
|
91
|
+
updateTimeout = setTimeout(() => {
|
|
92
|
+
const graphData = graphBuilder.getGraphData();
|
|
93
|
+
const stats = graphBuilder.getStats();
|
|
94
|
+
socket.emit('stats:update', stats);
|
|
95
|
+
}, 500);
|
|
96
|
+
};
|
|
97
|
+
// Handle watch start
|
|
98
|
+
socket.on('watch:start', async (config) => {
|
|
99
|
+
try {
|
|
100
|
+
console.log('Starting watch on:', config.path);
|
|
101
|
+
// Initialize git
|
|
102
|
+
await gitIntegration.initialize(config.path);
|
|
103
|
+
// Register ready handler BEFORE starting the watcher
|
|
104
|
+
fileWatcher.once('ready', async () => {
|
|
105
|
+
try {
|
|
106
|
+
console.log('=== READY CALLBACK STARTED ===');
|
|
107
|
+
console.log('Getting files from:', config.path);
|
|
108
|
+
const files = getAllFiles(config.path, config.ignorePatterns || []);
|
|
109
|
+
console.log(`Found ${files.length} files`);
|
|
110
|
+
if (files.length === 0) {
|
|
111
|
+
console.log('No files found. Check ignore patterns.');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log('First few files:', files.slice(0, 5));
|
|
115
|
+
}
|
|
116
|
+
// Build dependency map
|
|
117
|
+
console.log('Building dependency map...');
|
|
118
|
+
const dependencyMap = dependencyParser.buildDependencyMap(files);
|
|
119
|
+
console.log('Dependency map built');
|
|
120
|
+
// Build initial graph
|
|
121
|
+
console.log('Building graph...');
|
|
122
|
+
const graphData = graphBuilder.buildGraph(files, dependencyMap);
|
|
123
|
+
console.log('Graph built:', graphData.nodes.length, 'nodes', graphData.links.length, 'links');
|
|
124
|
+
// Send initial graph to client
|
|
125
|
+
socket.emit('graph:init', graphData);
|
|
126
|
+
console.log('Emitted graph:init to client');
|
|
127
|
+
// Send initial stats
|
|
128
|
+
const stats = graphBuilder.getStats();
|
|
129
|
+
socket.emit('stats:update', stats);
|
|
130
|
+
console.log('Emitted stats:update to client');
|
|
131
|
+
isInitialized = true;
|
|
132
|
+
console.log('=== READY CALLBACK COMPLETED ===');
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error('=== ERROR IN READY CALLBACK ===', error);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// Start file watcher AFTER registering the ready handler
|
|
139
|
+
fileWatcher.start(config.path, config.ignorePatterns);
|
|
140
|
+
// Handle file changes
|
|
141
|
+
fileWatcher.on('fileChange', async (event) => {
|
|
142
|
+
if (!isInitialized)
|
|
143
|
+
return;
|
|
144
|
+
console.log(`File ${event.type}: ${event.path}`);
|
|
145
|
+
if (event.type === 'add') {
|
|
146
|
+
// Add new node
|
|
147
|
+
const node = graphBuilder.addNode(event.path);
|
|
148
|
+
socket.emit('graph:nodeAdded', node);
|
|
149
|
+
// Parse dependencies and add links
|
|
150
|
+
const deps = dependencyParser.parseFile(event.path);
|
|
151
|
+
for (const dep of deps) {
|
|
152
|
+
const link = graphBuilder.addLink(event.path, dep, 'import');
|
|
153
|
+
socket.emit('graph:linkAdded', link);
|
|
154
|
+
}
|
|
155
|
+
scheduleGraphUpdate();
|
|
156
|
+
}
|
|
157
|
+
else if (event.type === 'change') {
|
|
158
|
+
// Update existing node
|
|
159
|
+
const node = graphBuilder.updateNode(event.path, {
|
|
160
|
+
lastModified: Date.now()
|
|
161
|
+
});
|
|
162
|
+
if (node) {
|
|
163
|
+
socket.emit('graph:nodeChanged', { nodeId: node.id, changes: node });
|
|
164
|
+
// Reparse dependencies
|
|
165
|
+
const oldDeps = graphBuilder.getGraphData().links
|
|
166
|
+
.filter(link => link.source === event.path)
|
|
167
|
+
.map(link => link.target);
|
|
168
|
+
const newDeps = dependencyParser.parseFile(event.path);
|
|
169
|
+
// Find removed dependencies
|
|
170
|
+
const removed = oldDeps.filter(dep => !newDeps.includes(dep));
|
|
171
|
+
for (const dep of removed) {
|
|
172
|
+
graphBuilder.removeLink(event.path, dep);
|
|
173
|
+
socket.emit('graph:linkRemoved', { source: event.path, target: dep });
|
|
174
|
+
}
|
|
175
|
+
// Find added dependencies
|
|
176
|
+
const added = newDeps.filter(dep => !oldDeps.includes(dep));
|
|
177
|
+
for (const dep of added) {
|
|
178
|
+
const link = graphBuilder.addLink(event.path, dep, 'import');
|
|
179
|
+
socket.emit('graph:linkAdded', link);
|
|
180
|
+
}
|
|
181
|
+
scheduleGraphUpdate();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if (event.type === 'unlink') {
|
|
185
|
+
// Remove node
|
|
186
|
+
graphBuilder.removeNode(event.path);
|
|
187
|
+
socket.emit('graph:nodeRemoved', { nodeId: event.path });
|
|
188
|
+
scheduleGraphUpdate();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error('Error starting watch:', error);
|
|
194
|
+
socket.emit('error', { message: 'Failed to start watching' });
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
// Handle watch stop
|
|
198
|
+
socket.on('watch:stop', () => {
|
|
199
|
+
console.log('Stopping watch');
|
|
200
|
+
fileWatcher.stop();
|
|
201
|
+
isInitialized = false;
|
|
202
|
+
});
|
|
203
|
+
// Handle diff request
|
|
204
|
+
socket.on('diff:request', async (data) => {
|
|
205
|
+
try {
|
|
206
|
+
console.log('Received diff request for:', data.filePath);
|
|
207
|
+
const diff = await gitIntegration.getFileDiff(data.filePath);
|
|
208
|
+
// Read file content
|
|
209
|
+
let content = '';
|
|
210
|
+
let language = '';
|
|
211
|
+
try {
|
|
212
|
+
content = fs.readFileSync(data.filePath, 'utf-8');
|
|
213
|
+
console.log(`Read file content: ${content.length} characters`);
|
|
214
|
+
// Detect language from file extension
|
|
215
|
+
const ext = path.extname(data.filePath).toLowerCase();
|
|
216
|
+
const langMap = {
|
|
217
|
+
'.js': 'javascript',
|
|
218
|
+
'.jsx': 'javascript',
|
|
219
|
+
'.ts': 'typescript',
|
|
220
|
+
'.tsx': 'typescript',
|
|
221
|
+
'.json': 'json',
|
|
222
|
+
'.css': 'css',
|
|
223
|
+
'.html': 'html',
|
|
224
|
+
'.md': 'markdown',
|
|
225
|
+
'.py': 'python',
|
|
226
|
+
'.java': 'java',
|
|
227
|
+
'.go': 'go',
|
|
228
|
+
'.rs': 'rust',
|
|
229
|
+
'.cpp': 'cpp',
|
|
230
|
+
'.c': 'c',
|
|
231
|
+
'.sh': 'bash'
|
|
232
|
+
};
|
|
233
|
+
language = langMap[ext] || 'plaintext';
|
|
234
|
+
}
|
|
235
|
+
catch (readError) {
|
|
236
|
+
console.error('Error reading file:', readError);
|
|
237
|
+
content = 'Unable to read file content';
|
|
238
|
+
}
|
|
239
|
+
console.log(`Sending diff data for ${data.filePath}, language: ${language}`);
|
|
240
|
+
socket.emit('diff:data', {
|
|
241
|
+
filePath: data.filePath,
|
|
242
|
+
diff: diff || 'No changes detected',
|
|
243
|
+
content,
|
|
244
|
+
language
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error('Error getting diff:', error);
|
|
249
|
+
socket.emit('diff:data', {
|
|
250
|
+
filePath: data.filePath,
|
|
251
|
+
diff: 'Error getting diff',
|
|
252
|
+
content: 'Error reading file',
|
|
253
|
+
language: 'plaintext'
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
// Handle disconnection
|
|
258
|
+
socket.on('disconnect', () => {
|
|
259
|
+
console.log('Client disconnected:', socket.id);
|
|
260
|
+
fileWatcher.stop();
|
|
261
|
+
if (updateTimeout) {
|
|
262
|
+
clearTimeout(updateTimeout);
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
// Helper function to get all files in a directory
|
|
267
|
+
function getAllFiles(dirPath, ignorePatterns) {
|
|
268
|
+
const files = [];
|
|
269
|
+
const defaultIgnore = [
|
|
270
|
+
'/node_modules/',
|
|
271
|
+
'/.git/',
|
|
272
|
+
'/dist/',
|
|
273
|
+
'/build/',
|
|
274
|
+
'/.next/',
|
|
275
|
+
'/coverage/',
|
|
276
|
+
'/.cache/',
|
|
277
|
+
'/tmp/'
|
|
278
|
+
];
|
|
279
|
+
const shouldIgnore = (filePath) => {
|
|
280
|
+
// Check if path contains any of the ignore patterns (with slashes to avoid false positives)
|
|
281
|
+
return [...defaultIgnore, ...ignorePatterns].some(pattern => {
|
|
282
|
+
return filePath.includes(pattern);
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
const walk = (dir) => {
|
|
286
|
+
try {
|
|
287
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
288
|
+
for (const entry of entries) {
|
|
289
|
+
const fullPath = path.join(dir, entry.name);
|
|
290
|
+
if (shouldIgnore(fullPath)) {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
if (entry.isDirectory()) {
|
|
294
|
+
walk(fullPath);
|
|
295
|
+
}
|
|
296
|
+
else if (entry.isFile()) {
|
|
297
|
+
files.push(fullPath);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
console.error(`Error reading directory ${dir}:`, error);
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
walk(dirPath);
|
|
306
|
+
return files;
|
|
307
|
+
}
|
|
308
|
+
// Catch-all route for React app (must be after API routes)
|
|
309
|
+
app.get('*', (req, res) => {
|
|
310
|
+
const indexPath = path.join(clientBuildPath, 'index.html');
|
|
311
|
+
if (fs.existsSync(indexPath)) {
|
|
312
|
+
res.sendFile(indexPath);
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
res.status(404).send('React app not built. Run: npm run build --workspace=client');
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
// Start server with port conflict handling
|
|
319
|
+
const startServer = (port) => {
|
|
320
|
+
httpServer.listen(port, () => {
|
|
321
|
+
console.log(`
|
|
322
|
+
CodeSynapse Server Running
|
|
323
|
+
Port: ${port}
|
|
324
|
+
URL: http://localhost:${port}
|
|
325
|
+
`);
|
|
326
|
+
}).on('error', (err) => {
|
|
327
|
+
if (err.code === 'EADDRINUSE') {
|
|
328
|
+
console.log(`Port ${port} is in use, trying ${port + 1}...`);
|
|
329
|
+
startServer(port + 1);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
console.error('Server error:', err);
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
};
|
|
337
|
+
startServer(Number(PORT));
|
|
338
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface GraphNode {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
type: string;
|
|
6
|
+
size: number;
|
|
7
|
+
lastModified: number;
|
|
8
|
+
connections?: number;
|
|
9
|
+
changeFrequency?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface GraphLink {
|
|
12
|
+
source: string;
|
|
13
|
+
target: string;
|
|
14
|
+
type: 'import' | 'require';
|
|
15
|
+
}
|
|
16
|
+
export interface GraphData {
|
|
17
|
+
nodes: GraphNode[];
|
|
18
|
+
links: GraphLink[];
|
|
19
|
+
}
|
|
20
|
+
export interface FileChangeEvent {
|
|
21
|
+
type: 'add' | 'change' | 'unlink';
|
|
22
|
+
path: string;
|
|
23
|
+
stats?: {
|
|
24
|
+
size: number;
|
|
25
|
+
mtime: Date;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface DependencyMap {
|
|
29
|
+
[filePath: string]: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface WatchConfig {
|
|
32
|
+
path: string;
|
|
33
|
+
ignorePatterns?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface Stats {
|
|
36
|
+
fileCount: number;
|
|
37
|
+
changeCount: number;
|
|
38
|
+
connectionCount: number;
|
|
39
|
+
lastChangeTime?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface DiffData {
|
|
42
|
+
filePath: string;
|
|
43
|
+
diff: string;
|
|
44
|
+
content?: string;
|
|
45
|
+
language?: string;
|
|
46
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|