@auto-engineer/cli 0.8.4 → 0.8.5
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/CHANGELOG.md +7 -0
- package/dist/src/server/file-syncer/discovery/bareImports.d.ts +3 -0
- package/dist/src/server/file-syncer/discovery/bareImports.d.ts.map +1 -0
- package/dist/src/server/file-syncer/discovery/bareImports.js +36 -0
- package/dist/src/server/file-syncer/discovery/bareImports.js.map +1 -0
- package/dist/src/server/file-syncer/discovery/dts.d.ts +11 -0
- package/dist/src/server/file-syncer/discovery/dts.d.ts.map +1 -0
- package/dist/src/server/file-syncer/discovery/dts.js +108 -0
- package/dist/src/server/file-syncer/discovery/dts.js.map +1 -0
- package/dist/src/server/file-syncer/index.d.ts +17 -0
- package/dist/src/server/file-syncer/index.d.ts.map +1 -0
- package/dist/src/server/file-syncer/index.js +206 -0
- package/dist/src/server/file-syncer/index.js.map +1 -0
- package/dist/src/server/file-syncer/sync/computeDesiredSet.d.ts +7 -0
- package/dist/src/server/file-syncer/sync/computeDesiredSet.d.ts.map +1 -0
- package/dist/src/server/file-syncer/sync/computeDesiredSet.js +76 -0
- package/dist/src/server/file-syncer/sync/computeDesiredSet.js.map +1 -0
- package/dist/src/server/file-syncer/types/wire.d.ts +14 -0
- package/dist/src/server/file-syncer/types/wire.d.ts.map +1 -0
- package/dist/src/server/file-syncer/types/wire.js +2 -0
- package/dist/src/server/file-syncer/types/wire.js.map +1 -0
- package/dist/src/server/file-syncer/utils/hash.d.ts +5 -0
- package/dist/src/server/file-syncer/utils/hash.d.ts.map +1 -0
- package/dist/src/server/file-syncer/utils/hash.js +20 -0
- package/dist/src/server/file-syncer/utils/hash.js.map +1 -0
- package/dist/src/server/file-syncer/utils/path.d.ts +15 -0
- package/dist/src/server/file-syncer/utils/path.d.ts.map +1 -0
- package/dist/src/server/file-syncer/utils/path.js +100 -0
- package/dist/src/server/file-syncer/utils/path.js.map +1 -0
- package/dist/src/server/server.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/server/file-syncer.d.ts +0 -21
- package/dist/src/server/file-syncer.d.ts.map +0 -1
- package/dist/src/server/file-syncer.js +0 -101
- package/dist/src/server/file-syncer.js.map +0 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import createDebug from 'debug';
|
|
3
|
+
const debug = createDebug('cli:file-syncer:path');
|
|
4
|
+
export const posix = (p) => p.split(path.sep).join('/');
|
|
5
|
+
export function toWirePath(abs, projectRoot) {
|
|
6
|
+
const rel = path.relative(projectRoot, abs);
|
|
7
|
+
// If path is outside project root (starts with ..), remap to virtual path
|
|
8
|
+
if (rel.startsWith('..')) {
|
|
9
|
+
debug('toWirePath: abs is outside projectRoot. abs=%s', abs);
|
|
10
|
+
// Check if it's in node_modules
|
|
11
|
+
const nodeModulesMatch = abs.match(/.*\/node_modules\/(.*)/);
|
|
12
|
+
if (nodeModulesMatch) {
|
|
13
|
+
// Remap to virtual /.external/node_modules/ path to avoid traversal error
|
|
14
|
+
let modulePath = nodeModulesMatch[1];
|
|
15
|
+
// Normalize path by removing redundant ./ segments
|
|
16
|
+
modulePath = modulePath.replace(/\/\.\//g, '/').replace(/^\.\//, '');
|
|
17
|
+
const wire = `/.external/node_modules/${modulePath}`.split(path.sep).join('/');
|
|
18
|
+
cacheWireMapping(wire, abs); // Cache for reverse mapping
|
|
19
|
+
return wire;
|
|
20
|
+
}
|
|
21
|
+
// For other external paths, use a hash to create a unique virtual path
|
|
22
|
+
const hash = Buffer.from(abs)
|
|
23
|
+
.toString('base64')
|
|
24
|
+
.replace(/[^a-zA-Z0-9]/g, '')
|
|
25
|
+
.substring(0, 16);
|
|
26
|
+
const fileName = path.basename(abs);
|
|
27
|
+
const wire = `/.external/other/${hash}_${fileName}`;
|
|
28
|
+
debug('Remapped external path to: %s', wire);
|
|
29
|
+
cacheWireMapping(wire, abs); // Cache for reverse mapping
|
|
30
|
+
return wire;
|
|
31
|
+
}
|
|
32
|
+
// Normal case: path is within project root
|
|
33
|
+
const wire = ('/' + rel).split(path.sep).join('/');
|
|
34
|
+
return wire;
|
|
35
|
+
}
|
|
36
|
+
export function sample(arr, n = 5) {
|
|
37
|
+
return arr.slice(0, n);
|
|
38
|
+
}
|
|
39
|
+
export function logArray(label, arr, _n = 5) {
|
|
40
|
+
// Utility function for debugging - kept for potential future use
|
|
41
|
+
}
|
|
42
|
+
export function uniq(arr) {
|
|
43
|
+
return [...new Set(arr)];
|
|
44
|
+
}
|
|
45
|
+
// Map to store reverse mappings for two-way sync
|
|
46
|
+
// This needs to be persistent across connections for reliable sync
|
|
47
|
+
const wirePathToAbsCache = new Map();
|
|
48
|
+
// Clear and rebuild the cache (used when new connections are established)
|
|
49
|
+
export function rebuildWirePathCache(files) {
|
|
50
|
+
wirePathToAbsCache.clear();
|
|
51
|
+
for (const { abs, projectRoot } of files) {
|
|
52
|
+
toWirePath(abs, projectRoot);
|
|
53
|
+
// Cache will be populated automatically by toWirePath for external paths
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function fromWirePath(wirePath, projectRoot) {
|
|
57
|
+
// Check if it's a virtual external path
|
|
58
|
+
if (wirePath.startsWith('/.external/')) {
|
|
59
|
+
// Look up in cache
|
|
60
|
+
const cached = wirePathToAbsCache.get(wirePath);
|
|
61
|
+
if (cached !== undefined) {
|
|
62
|
+
return cached;
|
|
63
|
+
}
|
|
64
|
+
// Can't reverse map without cache - this shouldn't happen in practice
|
|
65
|
+
debug('⚠ Cannot reverse map virtual path: %s', wirePath);
|
|
66
|
+
return path.join(projectRoot, wirePath.substring(1)); // Fallback
|
|
67
|
+
}
|
|
68
|
+
// Normal path: remove leading slash and resolve relative to project root
|
|
69
|
+
const relativePath = wirePath.startsWith('/') ? wirePath.substring(1) : wirePath;
|
|
70
|
+
return path.join(projectRoot, relativePath);
|
|
71
|
+
}
|
|
72
|
+
// Store reverse mapping when creating wire paths
|
|
73
|
+
export function cacheWireMapping(wirePath, absPath) {
|
|
74
|
+
if (wirePath.startsWith('/.external/')) {
|
|
75
|
+
wirePathToAbsCache.set(wirePath, absPath);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function dirOf(p) {
|
|
79
|
+
const norm = p.replace(/\\/g, '/');
|
|
80
|
+
return norm.slice(0, norm.lastIndexOf('/')) || '/';
|
|
81
|
+
}
|
|
82
|
+
// Extract npm package from a node_modules path
|
|
83
|
+
export function pkgNameFromPath(p) {
|
|
84
|
+
const m = p.replace(/\\/g, '/').match(/\/node_modules\/((@[^/]+\/)?[^/]+)/);
|
|
85
|
+
return m ? m[1] : null;
|
|
86
|
+
}
|
|
87
|
+
// Prefer server/node_modules, then plain node_modules, avoid .pnpm, and shorter paths
|
|
88
|
+
export function scorePathForDedupe(p) {
|
|
89
|
+
let s = 0;
|
|
90
|
+
const pathPosix = p.replace(/\\/g, '/');
|
|
91
|
+
if (pathPosix.includes('/server/node_modules/'))
|
|
92
|
+
s -= 10;
|
|
93
|
+
if (!pathPosix.includes('/.pnpm/'))
|
|
94
|
+
s -= 3;
|
|
95
|
+
if (pathPosix.includes('/node_modules/'))
|
|
96
|
+
s -= 1;
|
|
97
|
+
s += pathPosix.length / 1000;
|
|
98
|
+
return s;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../../../../src/server/file-syncer/utils/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { Server as SocketIOServer } from 'socket.io';
|
|
|
5
5
|
import { createMessageBus } from '@auto-engineer/message-bus';
|
|
6
6
|
import createDebug from 'debug';
|
|
7
7
|
import { StateManager } from './state-manager.js';
|
|
8
|
-
import { FileSyncer } from './file-syncer.js';
|
|
8
|
+
import { FileSyncer } from './file-syncer/index.js';
|
|
9
9
|
import { setupHttpRoutes } from './http-routes.js';
|
|
10
10
|
import { setupWebSocketHandlers } from './websocket-handler.js';
|
|
11
11
|
import { EventProcessor } from './event-processor.js';
|