@yanib/reverb-application 0.1.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/LICENSE +202 -0
- package/README.md +21 -0
- package/dist/analyze-pr.d.ts +43 -0
- package/dist/analyze-pr.d.ts.map +1 -0
- package/dist/analyze-pr.js +314 -0
- package/dist/analyze-pr.js.map +1 -0
- package/dist/artifacts.d.ts +33 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +260 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/create-overlay.d.ts +40 -0
- package/dist/create-overlay.d.ts.map +1 -0
- package/dist/create-overlay.js +272 -0
- package/dist/create-overlay.js.map +1 -0
- package/dist/index-generation.d.ts +41 -0
- package/dist/index-generation.d.ts.map +1 -0
- package/dist/index-generation.js +355 -0
- package/dist/index-generation.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/ports.d.ts +309 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +3 -0
- package/dist/ports.js.map +1 -0
- package/dist/review.d.ts +13 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +68 -0
- package/dist/review.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { adapterId, contentHash, sha256Bytes, } from '@yanib/reverb-domain';
|
|
2
|
+
export const FOUNDATION_PARSER_ID = adapterId('reverb.file-metadata');
|
|
3
|
+
export const FOUNDATION_PARSER_VERSION = '1.0.0';
|
|
4
|
+
const LANGUAGE_BY_EXTENSION = {
|
|
5
|
+
'.c': 'c',
|
|
6
|
+
'.cc': 'cpp',
|
|
7
|
+
'.cpp': 'cpp',
|
|
8
|
+
'.cs': 'csharp',
|
|
9
|
+
'.css': 'css',
|
|
10
|
+
'.go': 'go',
|
|
11
|
+
'.graphql': 'graphql',
|
|
12
|
+
'.gql': 'graphql',
|
|
13
|
+
'.h': 'c',
|
|
14
|
+
'.hpp': 'cpp',
|
|
15
|
+
'.html': 'html',
|
|
16
|
+
'.java': 'java',
|
|
17
|
+
'.js': 'javascript',
|
|
18
|
+
'.json': 'json',
|
|
19
|
+
'.jsx': 'javascript',
|
|
20
|
+
'.kt': 'kotlin',
|
|
21
|
+
'.kts': 'kotlin',
|
|
22
|
+
'.md': 'markdown',
|
|
23
|
+
'.mjs': 'javascript',
|
|
24
|
+
'.mts': 'typescript',
|
|
25
|
+
'.php': 'php',
|
|
26
|
+
'.proto': 'protobuf',
|
|
27
|
+
'.py': 'python',
|
|
28
|
+
'.rb': 'ruby',
|
|
29
|
+
'.rs': 'rust',
|
|
30
|
+
'.sh': 'shell',
|
|
31
|
+
'.sql': 'sql',
|
|
32
|
+
'.swift': 'swift',
|
|
33
|
+
'.toml': 'toml',
|
|
34
|
+
'.ts': 'typescript',
|
|
35
|
+
'.tsx': 'typescript',
|
|
36
|
+
'.txt': 'text',
|
|
37
|
+
'.xml': 'xml',
|
|
38
|
+
'.yaml': 'yaml',
|
|
39
|
+
'.yml': 'yaml',
|
|
40
|
+
};
|
|
41
|
+
const VENDORED_SEGMENTS = new Set(['node_modules', 'vendor', 'third_party', 'third-party', '.git']);
|
|
42
|
+
const GENERATED_SEGMENTS = new Set(['dist', 'build', 'coverage', '.next', 'target']);
|
|
43
|
+
const GENERATED_SUFFIXES = ['.min.js', '.min.css', '.generated.ts', '.g.ts', '.pb.go'];
|
|
44
|
+
const ARCHIVE_SUFFIXES = [
|
|
45
|
+
'.zip',
|
|
46
|
+
'.tar',
|
|
47
|
+
'.tgz',
|
|
48
|
+
'.gz',
|
|
49
|
+
'.bz2',
|
|
50
|
+
'.xz',
|
|
51
|
+
'.7z',
|
|
52
|
+
'.rar',
|
|
53
|
+
'.jar',
|
|
54
|
+
'.war',
|
|
55
|
+
];
|
|
56
|
+
function extension(path) {
|
|
57
|
+
const filename = path.slice(path.lastIndexOf('/') + 1).toLowerCase();
|
|
58
|
+
const dot = filename.lastIndexOf('.');
|
|
59
|
+
return dot >= 0 ? filename.slice(dot) : '';
|
|
60
|
+
}
|
|
61
|
+
function pathClassification(path) {
|
|
62
|
+
const lower = path.toLowerCase();
|
|
63
|
+
const segments = lower.split('/');
|
|
64
|
+
if (segments.some((segment) => VENDORED_SEGMENTS.has(segment)))
|
|
65
|
+
return 'vendored';
|
|
66
|
+
if (segments.some((segment) => GENERATED_SEGMENTS.has(segment)) ||
|
|
67
|
+
GENERATED_SUFFIXES.some((suffix) => lower.endsWith(suffix))) {
|
|
68
|
+
return 'generated';
|
|
69
|
+
}
|
|
70
|
+
if (ARCHIVE_SUFFIXES.some((suffix) => lower.endsWith(suffix)))
|
|
71
|
+
return 'unsupported';
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function diagnostic(code, path, safeMessage, severity = 'warning') {
|
|
75
|
+
return { code, severity, scope: path, safeMessage };
|
|
76
|
+
}
|
|
77
|
+
export class FoundationArtifactParserBoundary {
|
|
78
|
+
async classify(input) {
|
|
79
|
+
return classifyArtifact(input);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function failedArtifact(input, diagnosticCode, safeMessage) {
|
|
83
|
+
return {
|
|
84
|
+
artifact: {
|
|
85
|
+
generationId: input.generationId,
|
|
86
|
+
path: input.entry.path,
|
|
87
|
+
sourceBlobId: input.entry.objectId,
|
|
88
|
+
size: input.entry.size ?? 0,
|
|
89
|
+
language: 'unknown',
|
|
90
|
+
classification: 'unsupported',
|
|
91
|
+
parseState: 'failed',
|
|
92
|
+
parserId: FOUNDATION_PARSER_ID,
|
|
93
|
+
parserVersion: FOUNDATION_PARSER_VERSION,
|
|
94
|
+
configRevision: input.configRevision,
|
|
95
|
+
},
|
|
96
|
+
diagnostics: [diagnostic(diagnosticCode, input.entry.path, safeMessage, 'error')],
|
|
97
|
+
complete: false,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function classifyArtifact(input) {
|
|
101
|
+
const common = {
|
|
102
|
+
generationId: input.generationId,
|
|
103
|
+
path: input.entry.path,
|
|
104
|
+
sourceBlobId: input.entry.objectId,
|
|
105
|
+
size: input.entry.size ?? input.bytes?.length ?? 0,
|
|
106
|
+
parserId: FOUNDATION_PARSER_ID,
|
|
107
|
+
parserVersion: FOUNDATION_PARSER_VERSION,
|
|
108
|
+
configRevision: input.configRevision,
|
|
109
|
+
...(input.reusedFromGenerationId
|
|
110
|
+
? { reusedFromGenerationId: input.reusedFromGenerationId }
|
|
111
|
+
: {}),
|
|
112
|
+
};
|
|
113
|
+
if (input.entry.kind === 'symlink') {
|
|
114
|
+
return {
|
|
115
|
+
artifact: {
|
|
116
|
+
...common,
|
|
117
|
+
language: 'symlink',
|
|
118
|
+
classification: 'symlink',
|
|
119
|
+
parseState: 'skipped',
|
|
120
|
+
},
|
|
121
|
+
diagnostics: [
|
|
122
|
+
diagnostic('symlink_entry', input.entry.path, 'Symlink was recorded but not followed.'),
|
|
123
|
+
],
|
|
124
|
+
complete: false,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (input.entry.kind === 'submodule') {
|
|
128
|
+
return {
|
|
129
|
+
artifact: {
|
|
130
|
+
...common,
|
|
131
|
+
language: 'submodule',
|
|
132
|
+
classification: 'submodule',
|
|
133
|
+
parseState: 'skipped',
|
|
134
|
+
},
|
|
135
|
+
diagnostics: [
|
|
136
|
+
diagnostic('submodule_entry', input.entry.path, 'Submodule content is outside this generation.'),
|
|
137
|
+
],
|
|
138
|
+
complete: false,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const excluded = pathClassification(input.entry.path);
|
|
142
|
+
if (excluded) {
|
|
143
|
+
const code = excluded === 'generated'
|
|
144
|
+
? 'generated_path'
|
|
145
|
+
: excluded === 'vendored'
|
|
146
|
+
? 'vendored_path'
|
|
147
|
+
: 'unsupported_language';
|
|
148
|
+
return {
|
|
149
|
+
artifact: {
|
|
150
|
+
...common,
|
|
151
|
+
language: 'unknown',
|
|
152
|
+
classification: excluded,
|
|
153
|
+
parseState: 'skipped',
|
|
154
|
+
},
|
|
155
|
+
diagnostics: [
|
|
156
|
+
diagnostic(code, input.entry.path, 'File was classified outside baseline parsing.'),
|
|
157
|
+
],
|
|
158
|
+
complete: false,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
if ((input.entry.size ?? 0) > input.maximumBytes || !input.bytes) {
|
|
162
|
+
return {
|
|
163
|
+
artifact: {
|
|
164
|
+
...common,
|
|
165
|
+
language: 'unknown',
|
|
166
|
+
classification: 'oversized',
|
|
167
|
+
parseState: 'skipped',
|
|
168
|
+
},
|
|
169
|
+
diagnostics: [
|
|
170
|
+
diagnostic('oversized_file', input.entry.path, 'File exceeds the source read limit.'),
|
|
171
|
+
],
|
|
172
|
+
complete: false,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const hash = contentHash(sha256Bytes(input.bytes));
|
|
176
|
+
if (input.bytes.includes(0)) {
|
|
177
|
+
return {
|
|
178
|
+
artifact: {
|
|
179
|
+
...common,
|
|
180
|
+
contentHash: hash,
|
|
181
|
+
language: 'binary',
|
|
182
|
+
classification: 'binary',
|
|
183
|
+
parseState: 'skipped',
|
|
184
|
+
},
|
|
185
|
+
diagnostics: [diagnostic('binary_file', input.entry.path, 'Binary file was not parsed.')],
|
|
186
|
+
complete: false,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
let text;
|
|
190
|
+
try {
|
|
191
|
+
text = new TextDecoder('utf-8', { fatal: true }).decode(input.bytes);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return {
|
|
195
|
+
artifact: {
|
|
196
|
+
...common,
|
|
197
|
+
contentHash: hash,
|
|
198
|
+
language: 'binary',
|
|
199
|
+
classification: 'binary',
|
|
200
|
+
parseState: 'skipped',
|
|
201
|
+
},
|
|
202
|
+
diagnostics: [diagnostic('binary_file', input.entry.path, 'Non-UTF-8 file was not parsed.')],
|
|
203
|
+
complete: false,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
const language = LANGUAGE_BY_EXTENSION[extension(input.entry.path)] ?? 'unknown';
|
|
207
|
+
if (language === 'unknown') {
|
|
208
|
+
return {
|
|
209
|
+
artifact: {
|
|
210
|
+
...common,
|
|
211
|
+
contentHash: hash,
|
|
212
|
+
language,
|
|
213
|
+
classification: 'unsupported',
|
|
214
|
+
parseState: 'skipped',
|
|
215
|
+
lineCount: text.length === 0 ? 0 : text.split('\n').length,
|
|
216
|
+
},
|
|
217
|
+
diagnostics: [
|
|
218
|
+
diagnostic('unsupported_language', input.entry.path, 'Language is not recognized by the baseline index.'),
|
|
219
|
+
],
|
|
220
|
+
complete: false,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
artifact: {
|
|
225
|
+
...common,
|
|
226
|
+
contentHash: hash,
|
|
227
|
+
language,
|
|
228
|
+
classification: 'source',
|
|
229
|
+
parseState: 'parsed',
|
|
230
|
+
lineCount: text.length === 0 ? 0 : text.split('\n').length,
|
|
231
|
+
},
|
|
232
|
+
diagnostics: [],
|
|
233
|
+
complete: true,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
export function cachedArtifactToFile(cached, generationId, path, reusedFromGenerationId) {
|
|
237
|
+
const { generationId: _cachedGenerationId, path: _cachedPath, reusedFromGenerationId: _cachedReuse, ...portable } = cached;
|
|
238
|
+
void _cachedGenerationId;
|
|
239
|
+
void _cachedPath;
|
|
240
|
+
void _cachedReuse;
|
|
241
|
+
return {
|
|
242
|
+
...portable,
|
|
243
|
+
generationId,
|
|
244
|
+
path,
|
|
245
|
+
...(reusedFromGenerationId ? { reusedFromGenerationId } : {}),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
export function artifactCacheValue(artifact) {
|
|
249
|
+
const copy = { ...artifact };
|
|
250
|
+
delete copy.generationId;
|
|
251
|
+
delete copy.path;
|
|
252
|
+
delete copy.reusedFromGenerationId;
|
|
253
|
+
return copy;
|
|
254
|
+
}
|
|
255
|
+
export function overlayArtifactValue(artifact) {
|
|
256
|
+
const copy = { ...artifact };
|
|
257
|
+
delete copy.generationId;
|
|
258
|
+
return copy;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { contentHash, type BoundedDiagnostic, type CommitSha, type ConfigRevision, type CoverageRecord, type GenerationId, type GenerationLeaseId, type Instant, type OverlayId, type RegistryRevision, type RepositoryStableId, type WorkspaceId } from '@yanib/reverb-domain';
|
|
2
|
+
import { type ArtifactParserBoundary } from './artifacts.js';
|
|
3
|
+
import type { CancellationPort, Clock, GenerationStore, PortResult, RepositoryReader, TelemetryPort } from './ports.js';
|
|
4
|
+
export interface CreatePullRequestOverlayRequest {
|
|
5
|
+
readonly overlayId: OverlayId;
|
|
6
|
+
readonly leaseId: GenerationLeaseId;
|
|
7
|
+
readonly leaseExpiresAt: Instant;
|
|
8
|
+
readonly workspaceId: WorkspaceId;
|
|
9
|
+
readonly registryRevision: RegistryRevision;
|
|
10
|
+
readonly repositoryId: RepositoryStableId;
|
|
11
|
+
readonly baseGenerationId: GenerationId;
|
|
12
|
+
readonly baseSha: CommitSha;
|
|
13
|
+
readonly headSha: CommitSha;
|
|
14
|
+
readonly configRevision: ConfigRevision;
|
|
15
|
+
readonly indexerBundleVersion: string;
|
|
16
|
+
readonly supersessionKey: ReturnType<typeof contentHash>;
|
|
17
|
+
readonly maximumFileBytes?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface CreatePullRequestOverlayResult {
|
|
20
|
+
readonly overlayId: OverlayId;
|
|
21
|
+
readonly state: 'complete' | 'partial';
|
|
22
|
+
readonly entryCount: number;
|
|
23
|
+
readonly resultHash: ReturnType<typeof contentHash>;
|
|
24
|
+
readonly coverage: readonly CoverageRecord[];
|
|
25
|
+
readonly diagnostics: readonly BoundedDiagnostic[];
|
|
26
|
+
}
|
|
27
|
+
export interface OverlayDependencies {
|
|
28
|
+
readonly reader: RepositoryReader;
|
|
29
|
+
readonly store: GenerationStore;
|
|
30
|
+
readonly clock: Clock;
|
|
31
|
+
readonly telemetry: TelemetryPort;
|
|
32
|
+
readonly cancellation?: CancellationPort;
|
|
33
|
+
readonly parser?: ArtifactParserBoundary;
|
|
34
|
+
}
|
|
35
|
+
export declare class CreatePullRequestOverlay {
|
|
36
|
+
private readonly dependencies;
|
|
37
|
+
constructor(dependencies: OverlayDependencies);
|
|
38
|
+
execute(request: CreatePullRequestOverlayRequest): Promise<PortResult<CreatePullRequestOverlayResult>>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=create-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-overlay.d.ts","sourceRoot":"","sources":["../src/create-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAEZ,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,gBAAgB,EAChB,KAAK,EACL,eAAe,EAEf,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAMD,qBAAa,wBAAwB;IAChB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,mBAAmB;IAExD,OAAO,CAClB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;CA2RvD"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { contentHash, hashCanonical, } from '@yanib/reverb-domain';
|
|
2
|
+
import { failedArtifact, FoundationArtifactParserBoundary, overlayArtifactValue, } from './artifacts.js';
|
|
3
|
+
import { portFailure, portSuccess } from './ports.js';
|
|
4
|
+
function propagated(failure) {
|
|
5
|
+
return portFailure(failure);
|
|
6
|
+
}
|
|
7
|
+
export class CreatePullRequestOverlay {
|
|
8
|
+
dependencies;
|
|
9
|
+
constructor(dependencies) {
|
|
10
|
+
this.dependencies = dependencies;
|
|
11
|
+
}
|
|
12
|
+
async execute(request) {
|
|
13
|
+
const startedAt = this.dependencies.clock.now();
|
|
14
|
+
const base = await this.dependencies.store.getGeneration(request.baseGenerationId);
|
|
15
|
+
if (!base.ok)
|
|
16
|
+
return propagated(base.failure);
|
|
17
|
+
if (base.value.commitSha !== request.baseSha ||
|
|
18
|
+
base.value.repositoryId !== request.repositoryId ||
|
|
19
|
+
(base.value.state !== 'complete' && base.value.state !== 'partial')) {
|
|
20
|
+
return portFailure({
|
|
21
|
+
kind: 'domain',
|
|
22
|
+
code: 'base_generation_mismatch',
|
|
23
|
+
safeMessage: 'Overlay base generation does not match the exact requested base.',
|
|
24
|
+
retryable: false,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const head = await this.dependencies.reader.resolveCommit(request.repositoryId, request.headSha);
|
|
28
|
+
if (!head.ok)
|
|
29
|
+
return propagated(head.failure);
|
|
30
|
+
if (head.value.sha !== request.headSha) {
|
|
31
|
+
return portFailure({
|
|
32
|
+
kind: 'incomplete_provider_data',
|
|
33
|
+
code: 'head_commit_mismatch',
|
|
34
|
+
safeMessage: 'Source reader did not resolve the requested exact head.',
|
|
35
|
+
retryable: false,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const diff = await this.dependencies.reader.compare(request.repositoryId, request.baseSha, request.headSha);
|
|
39
|
+
if (!diff.ok)
|
|
40
|
+
return propagated(diff.failure);
|
|
41
|
+
const overlay = {
|
|
42
|
+
id: request.overlayId,
|
|
43
|
+
workspaceId: request.workspaceId,
|
|
44
|
+
repositoryId: request.repositoryId,
|
|
45
|
+
baseGenerationId: request.baseGenerationId,
|
|
46
|
+
baseSha: request.baseSha,
|
|
47
|
+
headSha: request.headSha,
|
|
48
|
+
headTreeHash: head.value.treeHash,
|
|
49
|
+
indexerBundleVersion: request.indexerBundleVersion,
|
|
50
|
+
configRevision: request.configRevision,
|
|
51
|
+
registryRevision: request.registryRevision,
|
|
52
|
+
state: 'building',
|
|
53
|
+
supersessionKey: request.supersessionKey,
|
|
54
|
+
diffHash: diff.value.manifestHash,
|
|
55
|
+
startedAt,
|
|
56
|
+
};
|
|
57
|
+
const leaseResult = await this.dependencies.store.beginOverlay({
|
|
58
|
+
overlay,
|
|
59
|
+
leaseId: request.leaseId,
|
|
60
|
+
leaseExpiresAt: request.leaseExpiresAt,
|
|
61
|
+
});
|
|
62
|
+
if (!leaseResult.ok)
|
|
63
|
+
return propagated(leaseResult.failure);
|
|
64
|
+
const lease = leaseResult.value;
|
|
65
|
+
const fail = async (failure) => {
|
|
66
|
+
await this.dependencies.store.failOverlay(lease, request.overlayId, {
|
|
67
|
+
failedAt: this.dependencies.clock.now(),
|
|
68
|
+
code: failure.kind === 'cancelled' ? 'cancelled' : 'infrastructure_failure',
|
|
69
|
+
safeMessage: failure.safeMessage,
|
|
70
|
+
});
|
|
71
|
+
return portFailure(failure);
|
|
72
|
+
};
|
|
73
|
+
const maximumFileBytes = request.maximumFileBytes ?? 2 * 1024 * 1024;
|
|
74
|
+
const headTree = await this.dependencies.reader.listTree(request.repositoryId, request.headSha);
|
|
75
|
+
if (!headTree.ok)
|
|
76
|
+
return fail(headTree.failure);
|
|
77
|
+
const headEntries = new Map(headTree.value.entries.map((entry) => [entry.path, entry]));
|
|
78
|
+
const entries = [];
|
|
79
|
+
const diagnostics = [
|
|
80
|
+
...diff.value.limitations.map((limitation) => ({
|
|
81
|
+
code: limitation.code,
|
|
82
|
+
severity: 'warning',
|
|
83
|
+
...(limitation.scope ? { scope: limitation.scope } : {}),
|
|
84
|
+
safeMessage: 'Diff provider data was incomplete.',
|
|
85
|
+
})),
|
|
86
|
+
...headTree.value.limitations.map((limitation) => ({
|
|
87
|
+
code: limitation.code,
|
|
88
|
+
severity: 'warning',
|
|
89
|
+
...(limitation.scope ? { scope: limitation.scope } : {}),
|
|
90
|
+
safeMessage: 'Head tree provider data was incomplete.',
|
|
91
|
+
})),
|
|
92
|
+
];
|
|
93
|
+
let partial = !diff.value.complete || !headTree.value.complete;
|
|
94
|
+
let replacementFiles = 0;
|
|
95
|
+
let failedFiles = 0;
|
|
96
|
+
let parsedFiles = 0;
|
|
97
|
+
let skippedFiles = 0;
|
|
98
|
+
let supportedLanguages = 0;
|
|
99
|
+
for (const change of diff.value.entries) {
|
|
100
|
+
if (this.dependencies.cancellation) {
|
|
101
|
+
const current = await this.dependencies.cancellation.isCurrent(request.supersessionKey);
|
|
102
|
+
if (!current.ok)
|
|
103
|
+
return fail(current.failure);
|
|
104
|
+
if (!current.value) {
|
|
105
|
+
return fail({
|
|
106
|
+
kind: 'cancelled',
|
|
107
|
+
code: 'superseded',
|
|
108
|
+
safeMessage: 'Overlay was superseded.',
|
|
109
|
+
retryable: false,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (change.kind === 'deleted') {
|
|
114
|
+
entries.push({ overlayId: request.overlayId, path: change.path, kind: 'tombstone' });
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (change.kind === 'renamed' && change.previousPath) {
|
|
118
|
+
entries.push({
|
|
119
|
+
overlayId: request.overlayId,
|
|
120
|
+
path: change.previousPath,
|
|
121
|
+
kind: 'tombstone',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
const treeEntry = headEntries.get(change.path);
|
|
125
|
+
replacementFiles += 1;
|
|
126
|
+
if (!treeEntry) {
|
|
127
|
+
partial = true;
|
|
128
|
+
failedFiles += 1;
|
|
129
|
+
diagnostics.push({
|
|
130
|
+
code: 'missing_blob',
|
|
131
|
+
severity: 'error',
|
|
132
|
+
scope: change.path,
|
|
133
|
+
safeMessage: 'Changed path was absent from the exact head tree.',
|
|
134
|
+
});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
let bytes;
|
|
138
|
+
let sourceFailed = false;
|
|
139
|
+
if (treeEntry.kind === 'blob' &&
|
|
140
|
+
(treeEntry.size === undefined || treeEntry.size <= maximumFileBytes)) {
|
|
141
|
+
const blob = await this.dependencies.reader.readBlob(request.repositoryId, request.headSha, change.path, maximumFileBytes);
|
|
142
|
+
if (!blob.ok) {
|
|
143
|
+
partial = true;
|
|
144
|
+
sourceFailed = true;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
bytes = blob.value.bytes;
|
|
148
|
+
partial ||= !blob.value.complete;
|
|
149
|
+
sourceFailed = !blob.value.complete;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const classifyInput = {
|
|
153
|
+
generationId: request.baseGenerationId,
|
|
154
|
+
entry: treeEntry,
|
|
155
|
+
...(bytes ? { bytes } : {}),
|
|
156
|
+
configRevision: request.configRevision,
|
|
157
|
+
maximumBytes: maximumFileBytes,
|
|
158
|
+
};
|
|
159
|
+
let classified;
|
|
160
|
+
if (sourceFailed) {
|
|
161
|
+
classified = failedArtifact(classifyInput, 'unreadable_blob', 'Overlay source was incomplete and could not be parsed.');
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
try {
|
|
165
|
+
classified = await (this.dependencies.parser ?? new FoundationArtifactParserBoundary()).classify(classifyInput);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
classified = failedArtifact(classifyInput, 'parse_failure', 'Parser failed inside its bounded execution boundary.');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
partial ||= !classified.complete;
|
|
172
|
+
diagnostics.push(...classified.diagnostics);
|
|
173
|
+
parsedFiles += classified.artifact.parseState === 'parsed' ? 1 : 0;
|
|
174
|
+
skippedFiles += classified.artifact.parseState === 'skipped' ? 1 : 0;
|
|
175
|
+
failedFiles += classified.artifact.parseState === 'failed' ? 1 : 0;
|
|
176
|
+
supportedLanguages += classified.artifact.language === 'unknown' ? 0 : 1;
|
|
177
|
+
const artifact = overlayArtifactValue(classified.artifact);
|
|
178
|
+
entries.push({
|
|
179
|
+
overlayId: request.overlayId,
|
|
180
|
+
path: change.path,
|
|
181
|
+
kind: 'replacement',
|
|
182
|
+
artifact,
|
|
183
|
+
...(change.previousPath ? { previousPath: change.previousPath } : {}),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
const sortedEntries = entries.sort((left, right) => left.path.localeCompare(right.path));
|
|
187
|
+
const coverage = [
|
|
188
|
+
{
|
|
189
|
+
dimension: 'repository',
|
|
190
|
+
state: partial ? 'partial' : 'complete',
|
|
191
|
+
eligible: 1,
|
|
192
|
+
processed: 1,
|
|
193
|
+
skipped: 0,
|
|
194
|
+
failed: diff.value.complete && headTree.value.complete ? 0 : 1,
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
dimension: 'tree',
|
|
198
|
+
state: diff.value.complete && headTree.value.complete ? 'complete' : 'partial',
|
|
199
|
+
eligible: headTree.value.entries.length,
|
|
200
|
+
processed: headTree.value.entries.length,
|
|
201
|
+
skipped: 0,
|
|
202
|
+
failed: diff.value.complete && headTree.value.complete ? 0 : 1,
|
|
203
|
+
...(!diff.value.complete || !headTree.value.complete
|
|
204
|
+
? { reason: 'incomplete_tree' }
|
|
205
|
+
: {}),
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
dimension: 'file',
|
|
209
|
+
state: failedFiles === 0 ? 'complete' : 'partial',
|
|
210
|
+
eligible: diff.value.entries.length,
|
|
211
|
+
processed: diff.value.entries.length - failedFiles,
|
|
212
|
+
skipped: 0,
|
|
213
|
+
failed: failedFiles,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
dimension: 'language',
|
|
217
|
+
state: supportedLanguages === replacementFiles ? 'complete' : 'partial',
|
|
218
|
+
eligible: replacementFiles,
|
|
219
|
+
processed: supportedLanguages,
|
|
220
|
+
skipped: replacementFiles - supportedLanguages,
|
|
221
|
+
failed: 0,
|
|
222
|
+
...(supportedLanguages !== replacementFiles
|
|
223
|
+
? { reason: 'unsupported_language' }
|
|
224
|
+
: {}),
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
dimension: 'parser',
|
|
228
|
+
state: parsedFiles === replacementFiles && failedFiles === 0 ? 'complete' : 'partial',
|
|
229
|
+
eligible: replacementFiles,
|
|
230
|
+
processed: parsedFiles,
|
|
231
|
+
skipped: skippedFiles,
|
|
232
|
+
failed: failedFiles,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
dimension: 'adapter',
|
|
236
|
+
state: 'not_analysed',
|
|
237
|
+
eligible: 0,
|
|
238
|
+
processed: 0,
|
|
239
|
+
skipped: 0,
|
|
240
|
+
failed: 0,
|
|
241
|
+
},
|
|
242
|
+
];
|
|
243
|
+
const resultHash = contentHash(hashCanonical({ entries: sortedEntries, coverage, diagnostics }));
|
|
244
|
+
const write = await this.dependencies.store.putOverlayEntries(lease, request.overlayId, sortedEntries);
|
|
245
|
+
if (!write.ok)
|
|
246
|
+
return fail(write.failure);
|
|
247
|
+
const completedAt = this.dependencies.clock.now();
|
|
248
|
+
const state = partial ? 'partial' : 'complete';
|
|
249
|
+
const completed = await this.dependencies.store.completeOverlay(lease, request.overlayId, {
|
|
250
|
+
state,
|
|
251
|
+
completedAt,
|
|
252
|
+
resultHash,
|
|
253
|
+
});
|
|
254
|
+
if (!completed.ok)
|
|
255
|
+
return propagated(completed.failure);
|
|
256
|
+
this.dependencies.telemetry.emit({
|
|
257
|
+
type: 'overlay_completed',
|
|
258
|
+
state,
|
|
259
|
+
changedFileCount: diff.value.entries.length,
|
|
260
|
+
durationMs: Math.max(0, new Date(completedAt).valueOf() - new Date(startedAt).valueOf()),
|
|
261
|
+
});
|
|
262
|
+
return portSuccess({
|
|
263
|
+
overlayId: request.overlayId,
|
|
264
|
+
state,
|
|
265
|
+
entryCount: sortedEntries.length,
|
|
266
|
+
resultHash,
|
|
267
|
+
coverage,
|
|
268
|
+
diagnostics,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=create-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-overlay.js","sourceRoot":"","sources":["../src/create-overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { contentHash, type BoundedDiagnostic, type CommitSha, type ConfigRevision, type CoverageRecord, type GenerationId, type GenerationLeaseId, type Instant, type RegistryRevision, type RepositoryStableId, type WorkspaceId } from '@yanib/reverb-domain';
|
|
2
|
+
import { type ArtifactParserBoundary } from './artifacts.js';
|
|
3
|
+
import type { ArtifactCachePort, CancellationPort, Clock, GenerationStore, PortResult, RepositoryReader, TelemetryPort } from './ports.js';
|
|
4
|
+
export interface IndexRepositoryGenerationRequest {
|
|
5
|
+
readonly generationId: GenerationId;
|
|
6
|
+
readonly leaseId: GenerationLeaseId;
|
|
7
|
+
readonly leaseExpiresAt: Instant;
|
|
8
|
+
readonly workspaceId: WorkspaceId;
|
|
9
|
+
readonly registryRevision: RegistryRevision;
|
|
10
|
+
readonly repositoryId: RepositoryStableId;
|
|
11
|
+
readonly commitSha: CommitSha;
|
|
12
|
+
readonly configRevision: ConfigRevision;
|
|
13
|
+
readonly indexerBundleVersion: string;
|
|
14
|
+
readonly previousGenerationId?: GenerationId;
|
|
15
|
+
readonly maximumFileBytes?: number;
|
|
16
|
+
readonly supersessionKey?: ReturnType<typeof contentHash>;
|
|
17
|
+
}
|
|
18
|
+
export interface IndexRepositoryGenerationResult {
|
|
19
|
+
readonly generationId: GenerationId;
|
|
20
|
+
readonly state: 'complete' | 'partial';
|
|
21
|
+
readonly artifactCount: number;
|
|
22
|
+
readonly reusedArtifactCount: number;
|
|
23
|
+
readonly coverage: readonly CoverageRecord[];
|
|
24
|
+
readonly diagnostics: readonly BoundedDiagnostic[];
|
|
25
|
+
readonly artifactResultHash: ReturnType<typeof contentHash>;
|
|
26
|
+
}
|
|
27
|
+
export interface IndexGenerationDependencies {
|
|
28
|
+
readonly reader: RepositoryReader;
|
|
29
|
+
readonly store: GenerationStore;
|
|
30
|
+
readonly cache: ArtifactCachePort;
|
|
31
|
+
readonly clock: Clock;
|
|
32
|
+
readonly telemetry: TelemetryPort;
|
|
33
|
+
readonly cancellation?: CancellationPort;
|
|
34
|
+
readonly parser?: ArtifactParserBoundary;
|
|
35
|
+
}
|
|
36
|
+
export declare class IndexRepositoryGeneration {
|
|
37
|
+
private readonly dependencies;
|
|
38
|
+
constructor(dependencies: IndexGenerationDependencies);
|
|
39
|
+
execute(request: IndexRepositoryGenerationRequest): Promise<PortResult<IndexRepositoryGenerationResult>>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index-generation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-generation.d.ts","sourceRoot":"","sources":["../src/index-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAOL,KAAK,sBAAsB,EAE5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,EACL,eAAe,EAEf,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AA6BD,qBAAa,yBAAyB;IACjB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,2BAA2B;IAEhE,OAAO,CAClB,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;CA2WxD"}
|