@codeledger/repo 0.6.0 → 0.6.2
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/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +9 -1
- package/dist/indexer.js.map +1 -1
- package/dist/temporal.d.ts +21 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +224 -0
- package/dist/temporal.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export { analyzeChurn } from './churn.js';
|
|
|
4
4
|
export { buildTestMap } from './test-map.js';
|
|
5
5
|
export { buildRepoIndex } from './indexer.js';
|
|
6
6
|
export type { IndexerOptions } from './indexer.js';
|
|
7
|
+
export { buildTemporalCoCommitIndex } from './temporal.js';
|
|
8
|
+
export type { TemporalIndexOptions } from './temporal.js';
|
|
7
9
|
export { detectLanguage, languageFamily, extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
|
|
8
10
|
export type { LanguageFamily } from './lang.js';
|
|
9
11
|
export { sha256File } from './hash.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClH,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClH,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export { buildDepGraph } from './dep-graph.js';
|
|
|
3
3
|
export { analyzeChurn } from './churn.js';
|
|
4
4
|
export { buildTestMap } from './test-map.js';
|
|
5
5
|
export { buildRepoIndex } from './indexer.js';
|
|
6
|
+
export { buildTemporalCoCommitIndex } from './temporal.js';
|
|
6
7
|
export { detectLanguage, languageFamily, extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
|
|
7
8
|
export { sha256File } from './hash.js';
|
|
8
9
|
//# 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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAElH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAElH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/indexer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO/D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;wEACoE;IACpE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAqE9D"}
|
package/dist/indexer.js
CHANGED
|
@@ -4,6 +4,7 @@ import { scanFiles } from './scanner.js';
|
|
|
4
4
|
import { buildDepGraph } from './dep-graph.js';
|
|
5
5
|
import { analyzeChurn } from './churn.js';
|
|
6
6
|
import { buildTestMap } from './test-map.js';
|
|
7
|
+
import { buildTemporalCoCommitIndex } from './temporal.js';
|
|
7
8
|
export function buildRepoIndex(opts) {
|
|
8
9
|
const { root, repoConfig, outputPath, churnDays = 90, log = console.log.bind(console) } = opts;
|
|
9
10
|
// Content cache: scanner reads each file once, dep-graph and test-map
|
|
@@ -27,7 +28,13 @@ export function buildRepoIndex(opts) {
|
|
|
27
28
|
const testMap = buildTestMap(root, files, contentCache);
|
|
28
29
|
const testCount = files.filter((f) => f.is_test).length;
|
|
29
30
|
log(` Mapped ${testMap.length} test↔source pairs (${testCount} test files)`);
|
|
30
|
-
// Step 5:
|
|
31
|
+
// Step 5: Build temporal co-commit index
|
|
32
|
+
log(' Building temporal co-commit index...');
|
|
33
|
+
const temporalResult = buildTemporalCoCommitIndex({ root, windowCommits: churnDays >= 180 ? 1000 : 500 });
|
|
34
|
+
const edgeCount = Object.values(temporalResult.adjacency)
|
|
35
|
+
.reduce((sum, edges) => sum + edges.length, 0);
|
|
36
|
+
log(` Built temporal index: ${Object.keys(temporalResult.adjacency).length} files, ${edgeCount} edges`);
|
|
37
|
+
// Step 6: Detect languages
|
|
31
38
|
const langCounts = new Map();
|
|
32
39
|
for (const f of files) {
|
|
33
40
|
langCounts.set(f.language, (langCounts.get(f.language) ?? 0) + 1);
|
|
@@ -44,6 +51,7 @@ export function buildRepoIndex(opts) {
|
|
|
44
51
|
dep_graph: depGraph,
|
|
45
52
|
churn,
|
|
46
53
|
test_map: testMap,
|
|
54
|
+
temporal_co_commit: temporalResult,
|
|
47
55
|
};
|
|
48
56
|
// Write to disk
|
|
49
57
|
const outputDir = dirname(outputPath);
|
package/dist/indexer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TemporalIndexMeta, CoCommitEdge } from '@codeledger/types';
|
|
2
|
+
export interface TemporalIndexOptions {
|
|
3
|
+
root: string;
|
|
4
|
+
/** Max commits to scan. Default: 1000. */
|
|
5
|
+
windowCommits?: number;
|
|
6
|
+
/** Skip commits touching more files than this. Default: 200. */
|
|
7
|
+
maxFilesPerCommit?: number;
|
|
8
|
+
/** Drop edges with co-commit count below this. Default: 3. */
|
|
9
|
+
minCoCommitCount?: number;
|
|
10
|
+
/** Keep at most this many neighbors per file. Default: 64. */
|
|
11
|
+
maxNeighborsPerFile?: number;
|
|
12
|
+
/** Only track adjacency for files touched in >= this many commits. Default: 2. */
|
|
13
|
+
churnFloor?: number;
|
|
14
|
+
/** Path prefixes to always exclude. */
|
|
15
|
+
ignorePrefixes?: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare function buildTemporalCoCommitIndex(opts: TemporalIndexOptions): {
|
|
18
|
+
meta: TemporalIndexMeta;
|
|
19
|
+
adjacency: Record<string, CoCommitEdge[]>;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=temporal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal.d.ts","sourceRoot":"","sources":["../src/temporal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AA0ED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,oBAAoB,GACzB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;CAAE,CA2MxE"}
|
package/dist/temporal.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
const DEFAULT_IGNORE_PREFIXES = [
|
|
3
|
+
'node_modules/', '.git/', 'dist/', 'build/', '.codeledger/',
|
|
4
|
+
];
|
|
5
|
+
const DEFAULT_IGNORE_FILENAMES = [
|
|
6
|
+
'pnpm-lock.yaml', 'package-lock.json', 'yarn.lock',
|
|
7
|
+
'go.sum', 'Cargo.lock', 'poetry.lock', 'Gemfile.lock',
|
|
8
|
+
];
|
|
9
|
+
/** Pair key for two file paths (order-independent). */
|
|
10
|
+
function pairKey(a, b) {
|
|
11
|
+
return a < b ? `${a}\0${b}` : `${b}\0${a}`;
|
|
12
|
+
}
|
|
13
|
+
function shouldIgnoreFile(filePath, prefixes) {
|
|
14
|
+
const basename = filePath.includes('/')
|
|
15
|
+
? filePath.slice(filePath.lastIndexOf('/') + 1)
|
|
16
|
+
: filePath;
|
|
17
|
+
if (DEFAULT_IGNORE_FILENAMES.includes(basename))
|
|
18
|
+
return true;
|
|
19
|
+
for (const prefix of prefixes) {
|
|
20
|
+
if (filePath.startsWith(prefix))
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
function parseGitLog(raw, ignorePrefixes) {
|
|
26
|
+
const commits = [];
|
|
27
|
+
let current;
|
|
28
|
+
for (const line of raw.split('\n')) {
|
|
29
|
+
const trimmed = line.trim();
|
|
30
|
+
if (trimmed.startsWith('COMMIT ')) {
|
|
31
|
+
// Flush previous commit
|
|
32
|
+
if (current) {
|
|
33
|
+
commits.push(current);
|
|
34
|
+
}
|
|
35
|
+
const parts = trimmed.split(' ');
|
|
36
|
+
const sha = parts[1] ?? '';
|
|
37
|
+
const ts = Number(parts[2] ?? '0');
|
|
38
|
+
current = { sha, timestamp: ts, files: [] };
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (!trimmed || !current)
|
|
42
|
+
continue;
|
|
43
|
+
// Skip files matching ignore rules
|
|
44
|
+
if (shouldIgnoreFile(trimmed, ignorePrefixes))
|
|
45
|
+
continue;
|
|
46
|
+
current.files.push(trimmed);
|
|
47
|
+
}
|
|
48
|
+
// Flush last commit
|
|
49
|
+
if (current) {
|
|
50
|
+
commits.push(current);
|
|
51
|
+
}
|
|
52
|
+
return commits;
|
|
53
|
+
}
|
|
54
|
+
export function buildTemporalCoCommitIndex(opts) {
|
|
55
|
+
const { root, windowCommits = 1000, maxFilesPerCommit = 200, minCoCommitCount = 3, maxNeighborsPerFile = 64, churnFloor = 2, ignorePrefixes = [], } = opts;
|
|
56
|
+
const allPrefixes = [...DEFAULT_IGNORE_PREFIXES, ...ignorePrefixes];
|
|
57
|
+
// Validate windowCommits to prevent shell injection
|
|
58
|
+
const safeWindow = Math.floor(Math.abs(windowCommits));
|
|
59
|
+
if (!Number.isFinite(safeWindow) || safeWindow <= 0 || safeWindow > 100_000) {
|
|
60
|
+
throw new Error(`Invalid windowCommits value: ${windowCommits} (must be 1–100000)`);
|
|
61
|
+
}
|
|
62
|
+
const emptyResult = {
|
|
63
|
+
meta: {
|
|
64
|
+
git_head: '',
|
|
65
|
+
window_commits: safeWindow,
|
|
66
|
+
max_files_per_commit: maxFilesPerCommit,
|
|
67
|
+
min_co_commit_count: minCoCommitCount,
|
|
68
|
+
max_neighbors_per_file: maxNeighborsPerFile,
|
|
69
|
+
churn_floor: churnFloor,
|
|
70
|
+
built_at_unix: Math.floor(Date.now() / 1000),
|
|
71
|
+
},
|
|
72
|
+
adjacency: {},
|
|
73
|
+
};
|
|
74
|
+
// Step 1: Run git log
|
|
75
|
+
let gitLog;
|
|
76
|
+
try {
|
|
77
|
+
gitLog = execSync(`git log --name-only --no-merges -n ${String(safeWindow)} --pretty=format:"COMMIT %H %ct"`, { cwd: root, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Not a git repo or git not available
|
|
81
|
+
return emptyResult;
|
|
82
|
+
}
|
|
83
|
+
// Step 2: Parse into commits
|
|
84
|
+
const commits = parseGitLog(gitLog, allPrefixes);
|
|
85
|
+
// Step 3: Build co-commit counts
|
|
86
|
+
// Per-file: churn count + last-touched timestamp
|
|
87
|
+
// Per-pair: co-commit count + last co-commit timestamp + accumulated commit sizes
|
|
88
|
+
const fileChurn = new Map();
|
|
89
|
+
const pairData = new Map();
|
|
90
|
+
for (const commit of commits) {
|
|
91
|
+
// Deduplicate files within the commit
|
|
92
|
+
const uniqueFiles = [...new Set(commit.files)];
|
|
93
|
+
// Skip oversized commits
|
|
94
|
+
if (uniqueFiles.length > maxFilesPerCommit)
|
|
95
|
+
continue;
|
|
96
|
+
const commitSize = uniqueFiles.length;
|
|
97
|
+
// Update per-file churn
|
|
98
|
+
for (const f of uniqueFiles) {
|
|
99
|
+
const existing = fileChurn.get(f);
|
|
100
|
+
if (!existing) {
|
|
101
|
+
fileChurn.set(f, { count: 1, lastTimestamp: commit.timestamp });
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
existing.count++;
|
|
105
|
+
if (commit.timestamp > existing.lastTimestamp) {
|
|
106
|
+
existing.lastTimestamp = commit.timestamp;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Update co-commit pairs
|
|
111
|
+
for (let i = 0; i < uniqueFiles.length; i++) {
|
|
112
|
+
for (let j = i + 1; j < uniqueFiles.length; j++) {
|
|
113
|
+
const a = uniqueFiles[i];
|
|
114
|
+
const b = uniqueFiles[j];
|
|
115
|
+
const key = pairKey(a, b);
|
|
116
|
+
const existing = pairData.get(key);
|
|
117
|
+
if (!existing) {
|
|
118
|
+
pairData.set(key, {
|
|
119
|
+
count: 1,
|
|
120
|
+
lastTimestamp: commit.timestamp,
|
|
121
|
+
totalCommitSize: commitSize,
|
|
122
|
+
fileA: a < b ? a : b,
|
|
123
|
+
fileB: a < b ? b : a,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
existing.count++;
|
|
128
|
+
if (commit.timestamp > existing.lastTimestamp) {
|
|
129
|
+
existing.lastTimestamp = commit.timestamp;
|
|
130
|
+
}
|
|
131
|
+
existing.totalCommitSize += commitSize;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Step 4: Get git HEAD
|
|
137
|
+
let gitHead = '';
|
|
138
|
+
try {
|
|
139
|
+
gitHead = execSync('git rev-parse HEAD', {
|
|
140
|
+
cwd: root,
|
|
141
|
+
encoding: 'utf-8',
|
|
142
|
+
maxBuffer: 1024 * 1024,
|
|
143
|
+
}).trim();
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Ignore — HEAD will be empty string
|
|
147
|
+
}
|
|
148
|
+
// Step 5: Prune and build adjacency
|
|
149
|
+
// - Drop files below churnFloor
|
|
150
|
+
// - Drop edges below minCoCommitCount
|
|
151
|
+
// - Sort edges by (count desc, last desc, path asc), cap at maxNeighborsPerFile
|
|
152
|
+
const qualifiedFiles = new Set();
|
|
153
|
+
for (const [path, info] of fileChurn) {
|
|
154
|
+
if (info.count >= churnFloor) {
|
|
155
|
+
qualifiedFiles.add(path);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Build raw adjacency lists (only for qualified files)
|
|
159
|
+
const rawAdjacency = new Map();
|
|
160
|
+
for (const pair of pairData.values()) {
|
|
161
|
+
// Both files must meet churn floor
|
|
162
|
+
if (!qualifiedFiles.has(pair.fileA) || !qualifiedFiles.has(pair.fileB))
|
|
163
|
+
continue;
|
|
164
|
+
// Edge must meet minimum co-commit count
|
|
165
|
+
if (pair.count < minCoCommitCount)
|
|
166
|
+
continue;
|
|
167
|
+
const avgCommitFiles = Math.round((pair.totalCommitSize / pair.count) * 100) / 100;
|
|
168
|
+
// Add edge in both directions
|
|
169
|
+
const edgeForA = {
|
|
170
|
+
other_path: pair.fileB,
|
|
171
|
+
co_commit_count: pair.count,
|
|
172
|
+
last_co_commit_unix: pair.lastTimestamp,
|
|
173
|
+
avg_commit_files: avgCommitFiles,
|
|
174
|
+
};
|
|
175
|
+
const edgeForB = {
|
|
176
|
+
other_path: pair.fileA,
|
|
177
|
+
co_commit_count: pair.count,
|
|
178
|
+
last_co_commit_unix: pair.lastTimestamp,
|
|
179
|
+
avg_commit_files: avgCommitFiles,
|
|
180
|
+
};
|
|
181
|
+
const listA = rawAdjacency.get(pair.fileA);
|
|
182
|
+
if (listA) {
|
|
183
|
+
listA.push(edgeForA);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
rawAdjacency.set(pair.fileA, [edgeForA]);
|
|
187
|
+
}
|
|
188
|
+
const listB = rawAdjacency.get(pair.fileB);
|
|
189
|
+
if (listB) {
|
|
190
|
+
listB.push(edgeForB);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
rawAdjacency.set(pair.fileB, [edgeForB]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Sort and cap each adjacency list
|
|
197
|
+
const adjacency = {};
|
|
198
|
+
for (const [filePath, edges] of rawAdjacency) {
|
|
199
|
+
edges.sort((a, b) => {
|
|
200
|
+
// count descending
|
|
201
|
+
if (b.co_commit_count !== a.co_commit_count) {
|
|
202
|
+
return b.co_commit_count - a.co_commit_count;
|
|
203
|
+
}
|
|
204
|
+
// last co-commit descending
|
|
205
|
+
if (b.last_co_commit_unix !== a.last_co_commit_unix) {
|
|
206
|
+
return b.last_co_commit_unix - a.last_co_commit_unix;
|
|
207
|
+
}
|
|
208
|
+
// path ascending
|
|
209
|
+
return a.other_path.localeCompare(b.other_path);
|
|
210
|
+
});
|
|
211
|
+
adjacency[filePath] = edges.slice(0, maxNeighborsPerFile);
|
|
212
|
+
}
|
|
213
|
+
const meta = {
|
|
214
|
+
git_head: gitHead,
|
|
215
|
+
window_commits: safeWindow,
|
|
216
|
+
max_files_per_commit: maxFilesPerCommit,
|
|
217
|
+
min_co_commit_count: minCoCommitCount,
|
|
218
|
+
max_neighbors_per_file: maxNeighborsPerFile,
|
|
219
|
+
churn_floor: churnFloor,
|
|
220
|
+
built_at_unix: Math.floor(Date.now() / 1000),
|
|
221
|
+
};
|
|
222
|
+
return { meta, adjacency };
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=temporal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal.js","sourceRoot":"","sources":["../src/temporal.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeledger/repo",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Repository scanning and indexing for CodeLedger",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@codeledger/types": "0.6.
|
|
27
|
+
"@codeledger/types": "0.6.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"typescript": "^5.4.0"
|