@appport/assessment 0.0.0-stage → 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/dist/go.js ADDED
@@ -0,0 +1,448 @@
1
+ /**
2
+ * A static reader for Go source: tokens, top-level declarations and the facts inside function bodies. It does not
3
+ * type-check, resolve generics, evaluate constants or build an AST beyond what the assessment needs, and it never runs
4
+ * the Go toolchain. What it does not understand is reported, not guessed (spec/assessment-1.md §5.2).
5
+ */
6
+ export class SourceSyntaxError extends Error {
7
+ line;
8
+ constructor(message, line) {
9
+ super(message);
10
+ this.line = line;
11
+ this.name = "SourceSyntaxError";
12
+ }
13
+ }
14
+ const IDENT_START = /[\p{L}_]/u;
15
+ const IDENT_PART = /[\p{L}\p{N}_]/u;
16
+ const PUNCT3 = ["...", "<<=", ">>=", "&^="];
17
+ const PUNCT2 = [":=", "==", "!=", "<=", ">=", "&&", "||", "<-", "++", "--", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<", ">>", "&^"];
18
+ /** Tokenizes Go source. Comments are dropped; an unterminated literal or comment is a syntax error. */
19
+ export function tokenizeGo(text) {
20
+ const tokens = [];
21
+ let i = 0;
22
+ let line = 1;
23
+ const n = text.length;
24
+ while (i < n) {
25
+ const c = text[i];
26
+ if (c === "\n") {
27
+ line++;
28
+ i++;
29
+ continue;
30
+ }
31
+ if (c === " " || c === "\t" || c === "\r" || c === "\f" || c === "") {
32
+ i++;
33
+ continue;
34
+ }
35
+ if (c === "/" && text[i + 1] === "/") {
36
+ while (i < n && text[i] !== "\n")
37
+ i++;
38
+ continue;
39
+ }
40
+ if (c === "/" && text[i + 1] === "*") {
41
+ const end = text.indexOf("*/", i + 2);
42
+ if (end < 0)
43
+ throw new SourceSyntaxError("unterminated block comment", line);
44
+ for (let k = i; k < end; k++)
45
+ if (text[k] === "\n")
46
+ line++;
47
+ i = end + 2;
48
+ continue;
49
+ }
50
+ if (c === '"') {
51
+ let value = "";
52
+ let k = i + 1;
53
+ for (;;) {
54
+ if (k >= n || text[k] === "\n")
55
+ throw new SourceSyntaxError("unterminated string literal", line);
56
+ const d = text[k];
57
+ if (d === "\\") {
58
+ const e = text[k + 1];
59
+ value += e === "n" ? "\n" : e === "t" ? "\t" : e === '"' ? '"' : e === "\\" ? "\\" : `\\${e ?? ""}`;
60
+ k += 2;
61
+ continue;
62
+ }
63
+ if (d === '"')
64
+ break;
65
+ value += d;
66
+ k++;
67
+ }
68
+ tokens.push({ kind: "string", value, line, endLine: line });
69
+ i = k + 1;
70
+ continue;
71
+ }
72
+ if (c === "`") {
73
+ const end = text.indexOf("`", i + 1);
74
+ if (end < 0)
75
+ throw new SourceSyntaxError("unterminated raw string literal", line);
76
+ const value = text.slice(i + 1, end);
77
+ const start = line;
78
+ for (const ch of value)
79
+ if (ch === "\n")
80
+ line++;
81
+ tokens.push({ kind: "string", value, line: start, endLine: line });
82
+ i = end + 1;
83
+ continue;
84
+ }
85
+ if (c === "'") {
86
+ let k = i + 1;
87
+ while (k < n && text[k] !== "'" && text[k] !== "\n")
88
+ k += text[k] === "\\" ? 2 : 1;
89
+ if (text[k] !== "'")
90
+ throw new SourceSyntaxError("unterminated rune literal", line);
91
+ tokens.push({ kind: "rune", value: text.slice(i + 1, k), line, endLine: line });
92
+ i = k + 1;
93
+ continue;
94
+ }
95
+ if (IDENT_START.test(c)) {
96
+ let k = i + 1;
97
+ while (k < n && IDENT_PART.test(text[k]))
98
+ k++;
99
+ tokens.push({ kind: "ident", value: text.slice(i, k), line, endLine: line });
100
+ i = k;
101
+ continue;
102
+ }
103
+ if (/[0-9]/.test(c) || (c === "." && /[0-9]/.test(text[i + 1] ?? ""))) {
104
+ let k = i + 1;
105
+ while (k < n && (/[0-9A-Za-z_.]/.test(text[k]) || ((text[k] === "+" || text[k] === "-") && /[eEpP]/.test(text[k - 1]))))
106
+ k++;
107
+ tokens.push({ kind: "number", value: text.slice(i, k), line, endLine: line });
108
+ i = k;
109
+ continue;
110
+ }
111
+ const three = text.slice(i, i + 3);
112
+ const two = text.slice(i, i + 2);
113
+ const value = PUNCT3.includes(three) ? three : PUNCT2.includes(two) ? two : c;
114
+ tokens.push({ kind: "punct", value, line, endLine: line });
115
+ i += value.length;
116
+ }
117
+ return tokens;
118
+ }
119
+ /** The generated-code marker Go tooling recognizes (`go help generate`). */
120
+ export const GENERATED_HEADER = /^\/\/ Code generated .* DO NOT EDIT\.$/m;
121
+ export function isGeneratedGo(text) {
122
+ // The marker must appear before the package clause.
123
+ const pkg = text.search(/^package\s/m);
124
+ return GENERATED_HEADER.test(pkg < 0 ? text : text.slice(0, pkg));
125
+ }
126
+ const KEYWORDS = new Set([
127
+ "break", "case", "chan", "const", "continue", "default", "defer", "else", "fallthrough", "for", "func", "go", "goto", "if",
128
+ "import", "interface", "map", "package", "range", "return", "select", "struct", "switch", "type", "var"
129
+ ]);
130
+ /** Index of the token closing the bracket opened at `open`. */
131
+ function matching(tokens, open) {
132
+ const opener = tokens[open].value;
133
+ const closer = opener === "(" ? ")" : opener === "[" ? "]" : "}";
134
+ let depth = 0;
135
+ for (let k = open; k < tokens.length; k++) {
136
+ const t = tokens[k];
137
+ if (t.kind !== "punct")
138
+ continue;
139
+ if (t.value === opener)
140
+ depth++;
141
+ else if (t.value === closer && --depth === 0)
142
+ return k;
143
+ }
144
+ throw new SourceSyntaxError(`unbalanced "${opener}"`, tokens[open].line);
145
+ }
146
+ /** Source text of a token range, with Go's conventional spacing for type expressions. */
147
+ const text = (tokens, from, to) => {
148
+ let out = "";
149
+ let prev;
150
+ for (const t of tokens.slice(from, to)) {
151
+ const value = t.kind === "string" ? JSON.stringify(t.value) : t.value;
152
+ const tight = !prev ||
153
+ ["(", "[", "]", ".", "*", "&", "..."].includes(prev.value) ||
154
+ [")", "]", ",", ".", ";"].includes(value) ||
155
+ ((value === "(" || value === "[") && (prev.kind === "ident" || prev.value === "]")) ||
156
+ (value === "{" && prev.value === "struct");
157
+ out += (tight ? "" : " ") + value;
158
+ prev = t;
159
+ }
160
+ return out;
161
+ };
162
+ /** Parses the declarations of one Go file. */
163
+ export function parseGo(source) {
164
+ const tokens = tokenizeGo(source);
165
+ const file = { packageName: "", imports: [], functions: [], types: [], values: [], tokens };
166
+ let i = 0;
167
+ const at = (k) => tokens[k];
168
+ const is = (k, value) => at(k)?.kind === "punct" && at(k).value === value;
169
+ const lineEnd = (k) => {
170
+ // A top-level declaration that is not bracketed ends at the last token on its line, or at the closing bracket of any
171
+ // bracket that starts on it.
172
+ const line = tokens[k].line;
173
+ let end = k;
174
+ for (let m = k; m < tokens.length && tokens[m].line === line; m++) {
175
+ if (tokens[m].kind === "punct" && ["(", "[", "{"].includes(tokens[m].value)) {
176
+ m = matching(tokens, m);
177
+ }
178
+ end = m;
179
+ }
180
+ return end;
181
+ };
182
+ const importSpec = (k) => {
183
+ let alias;
184
+ if (at(k)?.kind === "ident" || is(k, "."))
185
+ alias = tokens[k++].value;
186
+ const spec = at(k);
187
+ if (spec?.kind !== "string")
188
+ throw new SourceSyntaxError("malformed import", spec?.line ?? 0);
189
+ const last = spec.value.split("/").pop();
190
+ file.imports.push({ name: alias ?? last.replace(/^go-|\.v\d+$|-go$/g, "").replace(/[-.]/g, "_"), path: spec.value, line: spec.line, aliased: alias !== undefined });
191
+ return k + 1;
192
+ };
193
+ const typeSpec = (k) => {
194
+ const nameToken = at(k);
195
+ let m = k + 1;
196
+ if (is(m, "[") && at(m + 1)?.kind === "ident" && at(m + 2)?.kind !== "punct")
197
+ m = matching(tokens, m) + 1; // type parameters
198
+ if (is(m, "="))
199
+ m++;
200
+ const kindToken = at(m);
201
+ const type = { name: nameToken.value, kind: "other", fields: [], methods: [], signatures: [], startLine: nameToken.line, endLine: nameToken.line };
202
+ if (kindToken?.kind === "ident" && (kindToken.value === "struct" || kindToken.value === "interface") && is(m + 1, "{")) {
203
+ type.kind = kindToken.value;
204
+ const close = matching(tokens, m + 1);
205
+ type.endLine = tokens[close].line;
206
+ // Members are grouped by line at depth one.
207
+ let p = m + 2;
208
+ while (p < close) {
209
+ const line = tokens[p].line;
210
+ const start = p;
211
+ let q = p;
212
+ while (q < close && tokens[q].line === line) {
213
+ if (tokens[q].kind === "punct" && ["(", "[", "{"].includes(tokens[q].value))
214
+ q = matching(tokens, q);
215
+ q++;
216
+ }
217
+ const member = tokens.slice(start, q).filter((t) => !(t.kind === "punct" && t.value === ";"));
218
+ p = q;
219
+ if (!member.length)
220
+ continue;
221
+ if (type.kind === "interface") {
222
+ if (member[0].kind === "ident" && member[1]?.value === "(") {
223
+ const close = matching(member, 1);
224
+ type.methods.push(member[0].value);
225
+ type.signatures.push({ name: member[0].value, params: text(member, 2, close), results: text(member, close + 1, member.length).replace(/^\((.*)\)$/, "$1") });
226
+ }
227
+ continue;
228
+ }
229
+ const withoutTag = member.at(-1)?.kind === "string" ? member.slice(0, -1) : member;
230
+ const qualified = withoutTag.every((t, idx) => (idx === 0 && t.value === "*") || t.kind === "ident" || t.value === ".");
231
+ const embedded = qualified && withoutTag.filter((t) => t.kind === "ident").length <= 2 && !(withoutTag.length >= 2 && withoutTag[0].kind === "ident" && withoutTag[1].kind === "ident");
232
+ if (embedded) {
233
+ const last = withoutTag.filter((t) => t.kind === "ident").at(-1);
234
+ if (last)
235
+ type.fields.push({ name: last.value, type: text(withoutTag, 0, withoutTag.length), embedded: true, line });
236
+ continue;
237
+ }
238
+ const names = [];
239
+ let r = 0;
240
+ while (r < withoutTag.length && withoutTag[r].kind === "ident") {
241
+ names.push(withoutTag[r].value);
242
+ if (withoutTag[r + 1]?.value === ",")
243
+ r += 2;
244
+ else {
245
+ r++;
246
+ break;
247
+ }
248
+ }
249
+ const typeText = text(withoutTag, r, withoutTag.length);
250
+ for (const name of names)
251
+ type.fields.push({ name, type: typeText, embedded: false, line });
252
+ }
253
+ file.types.push(type);
254
+ return close + 1;
255
+ }
256
+ const end = lineEnd(k);
257
+ type.endLine = tokens[end].line;
258
+ file.types.push(type);
259
+ return end + 1;
260
+ };
261
+ const valueSpec = (k, keyword) => {
262
+ const end = lineEnd(k);
263
+ let m = k;
264
+ while (m <= end && at(m)?.kind === "ident") {
265
+ file.values.push({ name: tokens[m].value, keyword, startLine: tokens[k].line, endLine: tokens[end].line, range: [k, end] });
266
+ if (is(m + 1, ","))
267
+ m += 2;
268
+ else
269
+ break;
270
+ }
271
+ return end + 1;
272
+ };
273
+ const grouped = (k, spec) => {
274
+ if (!is(k, "("))
275
+ return spec(k);
276
+ const close = matching(tokens, k);
277
+ let m = k + 1;
278
+ while (m < close) {
279
+ if (is(m, ";")) {
280
+ m++;
281
+ continue;
282
+ }
283
+ m = spec(m);
284
+ }
285
+ return close + 1;
286
+ };
287
+ while (i < tokens.length) {
288
+ const t = tokens[i];
289
+ if (t.kind !== "ident") {
290
+ i++;
291
+ continue;
292
+ }
293
+ switch (t.value) {
294
+ case "package":
295
+ file.packageName = at(i + 1)?.value ?? "";
296
+ i += 2;
297
+ break;
298
+ case "import":
299
+ i = grouped(i + 1, importSpec);
300
+ break;
301
+ case "type":
302
+ i = grouped(i + 1, typeSpec);
303
+ break;
304
+ case "var":
305
+ case "const": {
306
+ const keyword = t.value;
307
+ i = grouped(i + 1, (k) => valueSpec(k, keyword));
308
+ break;
309
+ }
310
+ case "func": {
311
+ const fn = { name: "", params: "", results: "", startLine: t.line, endLine: t.line };
312
+ let k = i + 1;
313
+ if (is(k, "(")) {
314
+ const close = matching(tokens, k);
315
+ const receiver = tokens.slice(k + 1, close);
316
+ const idents = receiver.filter((r) => r.kind === "ident");
317
+ // `(s *T)`, `(T)`, `(s *T[K])`: the type is the first identifier after the optional name.
318
+ const bracket = receiver.findIndex((r) => r.value === "[");
319
+ const head = bracket < 0 ? receiver : receiver.slice(0, bracket);
320
+ const headIdents = head.filter((r) => r.kind === "ident");
321
+ fn.receiverType = headIdents.at(-1)?.value ?? idents.at(-1)?.value;
322
+ if (headIdents.length >= 2)
323
+ fn.receiverName = headIdents[0].value;
324
+ k = close + 1;
325
+ }
326
+ const name = at(k);
327
+ if (name?.kind !== "ident") {
328
+ i = k;
329
+ break;
330
+ }
331
+ fn.name = name.value;
332
+ k++;
333
+ if (is(k, "["))
334
+ k = matching(tokens, k) + 1;
335
+ if (!is(k, "(")) {
336
+ i = k;
337
+ break;
338
+ }
339
+ const paramsClose = matching(tokens, k);
340
+ fn.params = text(tokens, k + 1, paramsClose);
341
+ k = paramsClose + 1;
342
+ const resultsStart = k;
343
+ // Results run to the body's `{`, skipping brackets and struct/interface literal types.
344
+ while (k < tokens.length && !is(k, "{") && tokens[k].line === tokens[paramsClose].line) {
345
+ if (is(k, "(") || is(k, "["))
346
+ k = matching(tokens, k);
347
+ else if ((at(k).value === "struct" || at(k).value === "interface") && is(k + 1, "{"))
348
+ k = matching(tokens, k + 1);
349
+ k++;
350
+ }
351
+ fn.results = text(tokens, resultsStart, k).replace(/^\((.*)\)$/, "$1");
352
+ if (is(k, "{")) {
353
+ const close = matching(tokens, k);
354
+ fn.body = [k, close];
355
+ fn.endLine = tokens[close].line;
356
+ i = close + 1;
357
+ }
358
+ else {
359
+ i = k;
360
+ }
361
+ file.functions.push(fn);
362
+ break;
363
+ }
364
+ default:
365
+ i++;
366
+ }
367
+ }
368
+ return file;
369
+ }
370
+ const NOT_CALLS = new Set([
371
+ ...KEYWORDS, "append", "cap", "clear", "close", "complex", "copy", "delete", "imag", "len", "make", "max", "min", "new", "panic", "print",
372
+ "println", "real", "recover", "bool", "byte", "error", "float32", "float64", "int", "int8", "int16", "int32", "int64", "rune", "string",
373
+ "uint", "uint8", "uint16", "uint32", "uint64", "uintptr", "any"
374
+ ]);
375
+ /** The calls, selectors, string literals and `go` statements in a token range. */
376
+ export function bodyFacts(tokens, [from, to]) {
377
+ const facts = { calls: [], selectors: [], strings: [], goStatements: [] };
378
+ for (let k = from; k <= to; k++) {
379
+ const t = tokens[k];
380
+ if (t.kind === "string") {
381
+ facts.strings.push({ value: t.value, line: t.line, endLine: t.endLine });
382
+ continue;
383
+ }
384
+ if (t.kind !== "ident")
385
+ continue;
386
+ if (t.value === "go" && tokens[k - 1]?.value !== ".") {
387
+ facts.goStatements.push(t.line);
388
+ continue;
389
+ }
390
+ if (tokens[k - 1]?.kind === "punct" && tokens[k - 1].value === ".")
391
+ continue; // inside a chain
392
+ const chain = [t.value];
393
+ let m = k + 1;
394
+ while (tokens[m]?.value === "." && tokens[m + 1]?.kind === "ident") {
395
+ chain.push(tokens[m + 1].value);
396
+ m += 2;
397
+ }
398
+ if (tokens[m]?.kind === "punct" && tokens[m].value === "(") {
399
+ if (!(chain.length === 1 && NOT_CALLS.has(chain[0])))
400
+ facts.calls.push({ chain, line: t.line });
401
+ }
402
+ else if (chain.length === 2) {
403
+ facts.selectors.push({ chain, line: t.line });
404
+ }
405
+ k = m - 1;
406
+ }
407
+ return facts;
408
+ }
409
+ /**
410
+ * The parameter (or result) types of a signature, with names removed: `ctx context.Context, a, b int` →
411
+ * `["context.Context", "int", "int"]`. Go requires a list to name all of its parameters or none.
412
+ */
413
+ export function signatureTypes(list) {
414
+ const segments = [];
415
+ let depth = 0;
416
+ let current = "";
417
+ for (const c of list) {
418
+ if ("([{".includes(c))
419
+ depth++;
420
+ if (")]}".includes(c))
421
+ depth--;
422
+ if (c === "," && depth === 0) {
423
+ segments.push(current.trim());
424
+ current = "";
425
+ }
426
+ else
427
+ current += c;
428
+ }
429
+ if (current.trim())
430
+ segments.push(current.trim());
431
+ const named = segments.some((s) => /^[\p{L}_][\p{L}\p{N}_]* +\S/u.test(s));
432
+ if (!named)
433
+ return segments;
434
+ const types = [];
435
+ let pending = 0;
436
+ for (const s of segments) {
437
+ const m = s.match(/^[\p{L}_][\p{L}\p{N}_]* +(.+)$/u);
438
+ if (!m) {
439
+ pending++;
440
+ continue;
441
+ }
442
+ for (let k = 0; k <= pending; k++)
443
+ types.push(m[1]);
444
+ pending = 0;
445
+ }
446
+ return types;
447
+ }
448
+ //# sourceMappingURL=go.js.map
package/dist/go.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../src/go.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import { type Candidate, type Evidence, type Finding, type Location } from "./artifact.js";
2
+ import { type JsFile } from "./js.js";
3
+ export interface HttpSources {
4
+ /** Every analyzed JavaScript or TypeScript file's recognized content, by repository path. */
5
+ files: ReadonlyMap<string, JsFile>;
6
+ /** Every file the walk saw, for resolving imports. */
7
+ paths: ReadonlySet<string>;
8
+ /** The text of a repository file, or undefined. */
9
+ text(path: string): string | undefined;
10
+ }
11
+ export interface HttpSink {
12
+ record(e: Omit<Evidence, "id">): string;
13
+ at(path: string, startLine: number, endLine?: number): Location;
14
+ evidence: ReadonlyMap<string, Evidence>;
15
+ }
16
+ export declare function httpCandidates(sources: HttpSources, sink: HttpSink): {
17
+ candidates: Candidate[];
18
+ findings: Finding[];
19
+ routes: number;
20
+ unresolvedHandlers: number;
21
+ };
22
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,SAAS,EAGd,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EAId,MAAM,eAAe,CAAC;AACvB,OAAO,EAA2C,KAAK,MAAM,EAAmD,MAAM,SAAS,CAAC;AAEhI,MAAM,WAAW,WAAW;IAC1B,6FAA6F;IAC7F,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,sDAAsD;IACtD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,mDAAmD;IACnD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;IACxC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACzC;AAiCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,GAAG;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAqQjK"}