@trebired/code-insights 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.
Files changed (88) hide show
  1. package/.trebired/logger/config.ts +4 -0
  2. package/CHANGELOG.md +11 -0
  3. package/LICENSE +661 -0
  4. package/README.md +139 -2
  5. package/dist/client/controller.d.ts +31 -0
  6. package/dist/client/controller.d.ts.map +1 -0
  7. package/dist/client/controller.js +136 -0
  8. package/dist/client/controller.js.map +1 -0
  9. package/dist/client/index.d.ts +5 -0
  10. package/dist/client/index.d.ts.map +1 -0
  11. package/dist/client/index.js +59 -0
  12. package/dist/client/index.js.map +1 -0
  13. package/dist/client/layout.d.ts +8 -0
  14. package/dist/client/layout.d.ts.map +1 -0
  15. package/dist/client/layout.js +30 -0
  16. package/dist/client/layout.js.map +1 -0
  17. package/dist/client/model.d.ts +27 -0
  18. package/dist/client/model.d.ts.map +1 -0
  19. package/dist/client/model.js +57 -0
  20. package/dist/client/model.js.map +1 -0
  21. package/dist/client/render.d.ts +20 -0
  22. package/dist/client/render.d.ts.map +1 -0
  23. package/dist/client/render.js +95 -0
  24. package/dist/client/render.js.map +1 -0
  25. package/dist/client/viewport.d.ts +12 -0
  26. package/dist/client/viewport.d.ts.map +1 -0
  27. package/dist/client/viewport.js +70 -0
  28. package/dist/client/viewport.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +2 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/react/code_map.d.ts +17 -0
  34. package/dist/react/code_map.d.ts.map +1 -0
  35. package/dist/react/code_map.js +36 -0
  36. package/dist/react/code_map.js.map +1 -0
  37. package/dist/react/hotspots.d.ts +12 -0
  38. package/dist/react/hotspots.d.ts.map +1 -0
  39. package/dist/react/hotspots.js +28 -0
  40. package/dist/react/hotspots.js.map +1 -0
  41. package/dist/react/index.d.ts +5 -0
  42. package/dist/react/index.d.ts.map +1 -0
  43. package/dist/react/index.js +3 -0
  44. package/dist/react/index.js.map +1 -0
  45. package/dist/server/binary.d.ts +4 -0
  46. package/dist/server/binary.d.ts.map +1 -0
  47. package/dist/server/binary.js +46 -0
  48. package/dist/server/binary.js.map +1 -0
  49. package/dist/server/detect.d.ts +13 -0
  50. package/dist/server/detect.d.ts.map +1 -0
  51. package/dist/server/detect.js +15 -0
  52. package/dist/server/detect.js.map +1 -0
  53. package/dist/server/index.d.ts +10 -0
  54. package/dist/server/index.d.ts.map +1 -0
  55. package/dist/server/index.js +6 -0
  56. package/dist/server/index.js.map +1 -0
  57. package/dist/server/logging.d.ts +4 -0
  58. package/dist/server/logging.d.ts.map +1 -0
  59. package/dist/server/logging.js +12 -0
  60. package/dist/server/logging.js.map +1 -0
  61. package/dist/server/map.d.ts +8 -0
  62. package/dist/server/map.d.ts.map +1 -0
  63. package/dist/server/map.js +81 -0
  64. package/dist/server/map.js.map +1 -0
  65. package/dist/server/process.d.ts +13 -0
  66. package/dist/server/process.d.ts.map +1 -0
  67. package/dist/server/process.js +58 -0
  68. package/dist/server/process.js.map +1 -0
  69. package/dist/server/scan.d.ts +30 -0
  70. package/dist/server/scan.d.ts.map +1 -0
  71. package/dist/server/scan.js +63 -0
  72. package/dist/server/scan.js.map +1 -0
  73. package/dist/shared/constants.d.ts +5 -0
  74. package/dist/shared/constants.d.ts.map +1 -0
  75. package/dist/shared/constants.js +5 -0
  76. package/dist/shared/constants.js.map +1 -0
  77. package/dist/shared/copy.d.ts +40 -0
  78. package/dist/shared/copy.d.ts.map +1 -0
  79. package/dist/shared/copy.js +56 -0
  80. package/dist/shared/copy.js.map +1 -0
  81. package/dist/shared/types.d.ts +138 -0
  82. package/dist/shared/types.d.ts.map +1 -0
  83. package/dist/shared/types.js +2 -0
  84. package/dist/shared/types.js.map +1 -0
  85. package/native/linux-arm64-gnu/code-insights +0 -0
  86. package/native/linux-x64-gnu/code-insights +0 -0
  87. package/native/vendor/hyperpolyglot/LICENSE-MIT +21 -0
  88. package/package.json +107 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/server/map.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACrE,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,MAAM,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,SAAS,CAAC,MAA0B;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE,EAAE;QACT,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI,EAAE;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI;QACpC,IAAI,EAAE,IAAI;QACV,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;KACxD,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,MAA0B;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,KAAK,EAAE,EAAE;QACT,EAAE,EAAE,IAAI,KAAK,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC5D,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KACrD,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB,EAAE,KAAoB,EAAE,QAAgB;IACjF,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7E,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0B,EAAE,KAAmB,EAAE,UAA0B,EAAE;IACrG,MAAM,MAAM,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;IACjG,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9E,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9H,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;AAChF,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ declare class CodeInsightsError extends Error {
2
+ code: string;
3
+ constructor(code: string, message: string);
4
+ }
5
+ type EngineRun = {
6
+ args: string[];
7
+ input?: string;
8
+ onEvent: (event: Record<string, any>) => void;
9
+ signal?: AbortSignal;
10
+ };
11
+ declare function runEngine(run: EngineRun): Promise<void>;
12
+ export { CodeInsightsError, runEngine };
13
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/server/process.ts"],"names":[],"mappings":"AAKA,cAAM,iBAAkB,SAAQ,KAAK;IACnC,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAWF,iBAAS,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhD;AAED,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { spawn } from "node:child_process";
2
+ import readline from "node:readline";
3
+ import { resolveBinary } from "./binary.js";
4
+ class CodeInsightsError extends Error {
5
+ code;
6
+ constructor(code, message) {
7
+ super(message || code);
8
+ this.code = code;
9
+ this.name = "CodeInsightsError";
10
+ }
11
+ }
12
+ function parseLine(line) {
13
+ try {
14
+ const value = JSON.parse(line);
15
+ return value && typeof value === "object" ? value : null;
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ function runEngine(run) {
22
+ return new Promise((resolve, reject) => {
23
+ if (run.signal?.aborted)
24
+ return reject(new CodeInsightsError("aborted", "Scan aborted."));
25
+ const child = spawn(resolveBinary(), run.args, { stdio: ["pipe", "pipe", "pipe"] });
26
+ let failure = null;
27
+ let stderr = "";
28
+ const onAbort = () => {
29
+ failure = new CodeInsightsError("aborted", "Scan aborted.");
30
+ child.kill("SIGKILL");
31
+ };
32
+ run.signal?.addEventListener("abort", onAbort, { once: true });
33
+ readline.createInterface({ input: child.stdout }).on("line", (line) => {
34
+ const event = parseLine(line);
35
+ if (!event)
36
+ return;
37
+ if (event.type === "error")
38
+ failure = failure || new CodeInsightsError(String(event.code), String(event.message || ""));
39
+ else
40
+ run.onEvent(event);
41
+ });
42
+ child.stderr.on("data", (chunk) => {
43
+ stderr = (stderr + String(chunk)).slice(-4000);
44
+ });
45
+ child.on("error", (error) => reject(new CodeInsightsError("engine-failed", error.message)));
46
+ child.on("close", (code) => {
47
+ run.signal?.removeEventListener("abort", onAbort);
48
+ if (failure)
49
+ return reject(failure);
50
+ if (code !== 0)
51
+ return reject(new CodeInsightsError("engine-failed", stderr.trim() || `engine exited with ${code}`));
52
+ resolve();
53
+ });
54
+ child.stdin.end(run.input ?? "");
55
+ });
56
+ }
57
+ export { CodeInsightsError, runEngine };
58
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/server/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,iBAAkB,SAAQ,KAAK;IACnC,IAAI,CAAS;IAEb,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AASD,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAc;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,MAAM,CAAC,IAAI,iBAAiB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACpF,IAAI,OAAO,GAA6B,IAAI,CAAC;QAC7C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAClE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,GAAG,OAAO,IAAI,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;;gBACnH,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5F,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,IAAI,iBAAiB,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;YACrH,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { LoggerAdapterLogger } from "@package/logger-adapter";
2
+ import type { CodeInsightsResult, ScanPhase, ScanProgress } from "../shared/types.d.ts";
3
+ type ScanLimits = {
4
+ historyCommits?: number;
5
+ maxFunctionEdges?: number;
6
+ maxFunctionNodes?: number;
7
+ maxImportEdges?: number;
8
+ maxParseBytes?: number;
9
+ maxReadBytes?: number;
10
+ };
11
+ type ScanPhaseEvent = {
12
+ ms?: number;
13
+ phase: ScanPhase;
14
+ state: "done" | "start";
15
+ total?: number;
16
+ };
17
+ type ScanRepositoryOptions = {
18
+ gitDir: string;
19
+ limits?: ScanLimits;
20
+ logger?: LoggerAdapterLogger | null;
21
+ onPhase?: (event: ScanPhaseEvent) => void;
22
+ onProgress?: (progress: ScanProgress) => void;
23
+ phases?: ScanPhase[];
24
+ ref?: string;
25
+ signal?: AbortSignal;
26
+ };
27
+ declare function scanRepository(options: ScanRepositoryOptions): Promise<CodeInsightsResult>;
28
+ export { scanRepository };
29
+ export type { ScanLimits, ScanPhaseEvent, ScanRepositoryOptions };
30
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/server/scan.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIjF,KAAK,UAAU,GAAG;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAwCF,iBAAe,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAczF;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,63 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { RESULT_VERSION, SCAN_PHASES } from "../shared/constants.js";
5
+ import { insightsLog } from "./logging.js";
6
+ import { CodeInsightsError, runEngine } from "./process.js";
7
+ const LIMIT_FLAGS = [
8
+ ["historyCommits", "--history"],
9
+ ["maxFunctionEdges", "--max-function-edges"],
10
+ ["maxFunctionNodes", "--max-function-nodes"],
11
+ ["maxImportEdges", "--max-import-edges"],
12
+ ["maxParseBytes", "--max-parse-bytes"],
13
+ ["maxReadBytes", "--max-read-bytes"],
14
+ ];
15
+ function scanArgs(options, out) {
16
+ const args = ["scan", "--git-dir", options.gitDir, "--out", out, "--ref", options.ref || "HEAD"];
17
+ const phases = (options.phases || []).filter((phase) => SCAN_PHASES.includes(phase));
18
+ if (phases.length)
19
+ args.push("--phases", phases.join(","));
20
+ for (const [key, flag] of LIMIT_FLAGS) {
21
+ const value = Number(options.limits?.[key]);
22
+ if (Number.isFinite(value) && value > 0)
23
+ args.push(flag, String(Math.floor(value)));
24
+ }
25
+ return args;
26
+ }
27
+ function dispatchEvent(event, options) {
28
+ if (event.type === "progress") {
29
+ options.onProgress?.({ done: Number(event.done) || 0, percent: Number(event.percent) || 0, phase: event.phase, total: Number(event.total) || 0 });
30
+ }
31
+ else if (event.type === "phase") {
32
+ options.onPhase?.({ ms: event.ms, phase: event.phase, state: event.state, total: event.total });
33
+ }
34
+ else if (event.type === "done") {
35
+ options.onProgress?.({ done: 1, percent: 100, phase: "hotspots", total: 1 });
36
+ }
37
+ }
38
+ async function readResult(out) {
39
+ const result = JSON.parse(await fs.readFile(out, "utf8"));
40
+ if (!result || result.version !== RESULT_VERSION) {
41
+ throw new CodeInsightsError("result-version-mismatch", `Expected result version ${RESULT_VERSION}, got ${result && result.version}.`);
42
+ }
43
+ return result;
44
+ }
45
+ async function scanRepository(options) {
46
+ if (!options || !String(options.gitDir || "").trim())
47
+ throw new CodeInsightsError("missing-git-dir", "scanRepository() requires gitDir.");
48
+ const log = insightsLog(options.logger);
49
+ const workDir = await fs.mkdtemp(path.join(os.tmpdir(), "code-insights-"));
50
+ const out = path.join(workDir, "result.json");
51
+ const startedAt = performance.now();
52
+ try {
53
+ await runEngine({ args: scanArgs(options, out), onEvent: (event) => dispatchEvent(event, options), signal: options.signal });
54
+ const result = await readResult(out);
55
+ log.info("scan", "repository scanned", { commit: result.commit, files: result.totals.count, ms: Math.round(performance.now() - startedAt) });
56
+ return result;
57
+ }
58
+ finally {
59
+ await fs.rm(workDir, { force: true, recursive: true });
60
+ }
61
+ }
62
+ export { scanRepository };
63
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/server/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare const PACKAGE_NAME = "@trebired/code-insights";
2
+ declare const RESULT_VERSION = 1;
3
+ declare const SCAN_PHASES: readonly ["listing", "languages", "tree", "imports", "functions", "hotspots"];
4
+ export { PACKAGE_NAME, RESULT_VERSION, SCAN_PHASES };
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY,4BAA4B,CAAC;AAC/C,QAAA,MAAM,cAAc,IAAI,CAAC;AACzB,QAAA,MAAM,WAAW,+EAAgF,CAAC;AAElG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ const PACKAGE_NAME = "@trebired/code-insights";
2
+ const RESULT_VERSION = 1;
3
+ const SCAN_PHASES = ["listing", "languages", "tree", "imports", "functions", "hotspots"];
4
+ export { PACKAGE_NAME, RESULT_VERSION, SCAN_PHASES };
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAElG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ declare const COPY: {
2
+ readonly cs: {
3
+ readonly codeMap: "Mapa kódu";
4
+ readonly empty: "Žádná propojení.";
5
+ readonly failed: "Mapu kódu se nepodařilo načíst.";
6
+ readonly files: "Soubory";
7
+ readonly filter: "Filtrovat podle názvu";
8
+ readonly functions: "Funkce";
9
+ readonly hint: "Kliknutím na složku ji otevřete. Kliknutím na soubor zobrazíte jeho vazby, dalším kliknutím ho otevřete.";
10
+ readonly hotspots: "Rizikové soubory";
11
+ readonly hotspotsDescription: "Velké soubory, které se často mění.";
12
+ readonly hotspotsEmpty: "Zatím žádné rizikové soubory.";
13
+ readonly links: "vazeb";
14
+ readonly loading: "Načítání mapy kódu…";
15
+ readonly nodes: "uzlů";
16
+ readonly truncated: "Zobrazena je nejpropojenější část velkého grafu.";
17
+ };
18
+ readonly en: {
19
+ readonly codeMap: "Code map";
20
+ readonly empty: "No connections found.";
21
+ readonly failed: "The code map could not be loaded.";
22
+ readonly files: "Files";
23
+ readonly filter: "Filter by name";
24
+ readonly functions: "Functions";
25
+ readonly hint: "Click a folder to open it. Click a file to see its links, then click it again to open it.";
26
+ readonly hotspots: "Hotspots";
27
+ readonly hotspotsDescription: "Large files that change often.";
28
+ readonly hotspotsEmpty: "No hotspots yet.";
29
+ readonly links: "links";
30
+ readonly loading: "Loading the code map…";
31
+ readonly nodes: "nodes";
32
+ readonly truncated: "Showing the most connected part of a large graph.";
33
+ };
34
+ };
35
+ type CopyKey = keyof typeof COPY.en;
36
+ declare function countFor(lang?: string | null): (count: number, noun: "commits" | "lines") => string;
37
+ declare function copyFor(lang?: string | null): (key: CopyKey) => "Mapa kódu" | "Žádná propojení." | "Mapu kódu se nepodařilo načíst." | "Soubory" | "Filtrovat podle názvu" | "Funkce" | "Kliknutím na složku ji otevřete. Kliknutím na soubor zobrazíte jeho vazby, dalším kliknutím ho otevřete." | "Rizikové soubory" | "Velké soubory, které se často mění." | "Zatím žádné rizikové soubory." | "vazeb" | "Načítání mapy kódu…" | "uzlů" | "Zobrazena je nejpropojenější část velkého grafu." | "Code map" | "No connections found." | "The code map could not be loaded." | "Files" | "Filter by name" | "Functions" | "Click a folder to open it. Click a file to see its links, then click it again to open it." | "Hotspots" | "Large files that change often." | "No hotspots yet." | "links" | "Loading the code map…" | "nodes" | "Showing the most connected part of a large graph.";
38
+ export { copyFor, countFor };
39
+ export type { CopyKey };
40
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/shared/copy.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCA,CAAC;AAEX,KAAK,OAAO,GAAG,MAAM,OAAO,IAAI,CAAC,EAAE,CAAC;AAUpC,iBAAS,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,IAG5B,OAAO,MAAM,EAAE,MAAM,SAAS,GAAG,OAAO,YAIjD;AAED,iBAAS,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,IAG3B,KAAK,OAAO,syBACrB;AAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC7B,YAAY,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,56 @@
1
+ const COPY = {
2
+ cs: {
3
+ codeMap: "Mapa kódu",
4
+ empty: "Žádná propojení.",
5
+ failed: "Mapu kódu se nepodařilo načíst.",
6
+ files: "Soubory",
7
+ filter: "Filtrovat podle názvu",
8
+ functions: "Funkce",
9
+ hint: "Kliknutím na složku ji otevřete. Kliknutím na soubor zobrazíte jeho vazby, dalším kliknutím ho otevřete.",
10
+ hotspots: "Rizikové soubory",
11
+ hotspotsDescription: "Velké soubory, které se často mění.",
12
+ hotspotsEmpty: "Zatím žádné rizikové soubory.",
13
+ links: "vazeb",
14
+ loading: "Načítání mapy kódu…",
15
+ nodes: "uzlů",
16
+ truncated: "Zobrazena je nejpropojenější část velkého grafu.",
17
+ },
18
+ en: {
19
+ codeMap: "Code map",
20
+ empty: "No connections found.",
21
+ failed: "The code map could not be loaded.",
22
+ files: "Files",
23
+ filter: "Filter by name",
24
+ functions: "Functions",
25
+ hint: "Click a folder to open it. Click a file to see its links, then click it again to open it.",
26
+ hotspots: "Hotspots",
27
+ hotspotsDescription: "Large files that change often.",
28
+ hotspotsEmpty: "No hotspots yet.",
29
+ links: "links",
30
+ loading: "Loading the code map…",
31
+ nodes: "nodes",
32
+ truncated: "Showing the most connected part of a large graph.",
33
+ },
34
+ };
35
+ const COUNTED = {
36
+ cs: {
37
+ commits: { few: "commity", many: "commitů", one: "commit", other: "commitů" },
38
+ lines: { few: "řádky", many: "řádků", one: "řádek", other: "řádků" },
39
+ },
40
+ en: { commits: { one: "commit", other: "commits" }, lines: { one: "line", other: "lines" } },
41
+ };
42
+ function countFor(lang) {
43
+ const base = String(lang || "").toLowerCase().split("-")[0] === "cs" ? "cs" : "en";
44
+ const rules = new Intl.PluralRules(base);
45
+ return (count, noun) => {
46
+ const forms = COUNTED[base][noun];
47
+ return `${count} ${forms[rules.select(count)] || forms.other}`;
48
+ };
49
+ }
50
+ function copyFor(lang) {
51
+ const base = String(lang || "").toLowerCase().split("-")[0];
52
+ const table = base === "cs" ? COPY.cs : COPY.en;
53
+ return (key) => table[key];
54
+ }
55
+ export { copyFor, countFor };
56
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/shared/copy.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG;IACX,EAAE,EAAE;QACF,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,iCAAiC;QACzC,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,uBAAuB;QAC/B,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,0GAA0G;QAChH,QAAQ,EAAE,kBAAkB;QAC5B,mBAAmB,EAAE,qCAAqC;QAC1D,aAAa,EAAE,+BAA+B;QAC9C,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,qBAAqB;QAC9B,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,kDAAkD;KAC9D;IACD,EAAE,EAAE;QACF,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,uBAAuB;QAC9B,MAAM,EAAE,mCAAmC;QAC3C,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,2FAA2F;QACjG,QAAQ,EAAE,UAAU;QACpB,mBAAmB,EAAE,gCAAgC;QACrD,aAAa,EAAE,kBAAkB;QACjC,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,mDAAmD;KAC/D;CACO,CAAC;AAIX,MAAM,OAAO,GAAG;IACd,EAAE,EAAE;QACF,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;QAC7E,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;KACrE;IACD,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;CACpF,CAAC;AAEX,SAAS,QAAQ,CAAC,IAAoB;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,KAAa,EAAE,IAAyB,EAAE,EAAE;QAClD,MAAM,KAAK,GAA2B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAoB;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAChD,OAAO,CAAC,GAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,138 @@
1
+ import type { SCAN_PHASES } from "./constants.js";
2
+ type ScanPhase = typeof SCAN_PHASES[number];
3
+ type CodeLines = {
4
+ code: number;
5
+ content: number;
6
+ total: number;
7
+ };
8
+ type CodeTotals = {
9
+ bytes: number;
10
+ count: number;
11
+ lines: CodeLines;
12
+ };
13
+ type LanguageTotal = CodeTotals & {
14
+ color: string;
15
+ id: string;
16
+ name: string;
17
+ percent: number;
18
+ type: "data" | "markup" | "programming" | "prose";
19
+ };
20
+ type FileRecord = {
21
+ bytes: number;
22
+ language: string | null;
23
+ lines: CodeLines;
24
+ path: string;
25
+ };
26
+ type TreeNode = {
27
+ children?: TreeNode[];
28
+ kind: "dir" | "file";
29
+ language: string | null;
30
+ mode: string;
31
+ name: string;
32
+ object: string;
33
+ path: string;
34
+ size: number | null;
35
+ };
36
+ type ImportGraph = {
37
+ edges: {
38
+ from: number;
39
+ kind: string;
40
+ to: number;
41
+ }[];
42
+ external: number;
43
+ nodes: string[];
44
+ truncated: boolean;
45
+ unresolved: number;
46
+ unresolved_samples: {
47
+ from: number;
48
+ spec: string;
49
+ }[];
50
+ };
51
+ type FunctionNode = {
52
+ end_line: number;
53
+ exported: boolean;
54
+ file: number;
55
+ kind: "arrow" | "function" | "method";
56
+ line: number;
57
+ name: string;
58
+ owner: string | null;
59
+ };
60
+ type FunctionGraph = {
61
+ edges: {
62
+ confidence: "import" | "local" | "member" | "package";
63
+ count: number;
64
+ from: number;
65
+ to: number;
66
+ }[];
67
+ files: string[];
68
+ nodes: FunctionNode[];
69
+ truncated: boolean;
70
+ unresolved: number;
71
+ };
72
+ type Hotspot = {
73
+ commits: number;
74
+ language: string | null;
75
+ lines: number;
76
+ path: string;
77
+ score: number;
78
+ };
79
+ type CodeInsightsResult = {
80
+ commit: string;
81
+ empty: boolean;
82
+ files: FileRecord[];
83
+ functions?: FunctionGraph;
84
+ hotspots?: Hotspot[];
85
+ imports?: ImportGraph;
86
+ languages: LanguageTotal[];
87
+ ref: string;
88
+ scanned_at: string;
89
+ skipped: {
90
+ binary: number;
91
+ documentation: number;
92
+ generated: number;
93
+ unparsed: number;
94
+ vendored: number;
95
+ };
96
+ timings_ms: Partial<Record<ScanPhase, number>>;
97
+ totals: CodeTotals;
98
+ tree?: {
99
+ ascii: string;
100
+ nested: TreeNode[];
101
+ };
102
+ unknown: CodeTotals;
103
+ version: number;
104
+ };
105
+ type ScanProgress = {
106
+ done: number;
107
+ percent: number;
108
+ phase: ScanPhase;
109
+ total: number;
110
+ };
111
+ type CodeMapLevel = "file" | "function";
112
+ type CodeMapNode = {
113
+ group: string;
114
+ id: string;
115
+ kind: string;
116
+ label: string;
117
+ line: number | null;
118
+ path: string;
119
+ size: number;
120
+ };
121
+ type CodeMapEdge = {
122
+ source: string;
123
+ target: string;
124
+ weight: number;
125
+ };
126
+ type CodeMapData = {
127
+ edges: CodeMapEdge[];
128
+ groups: {
129
+ id: string;
130
+ label: string;
131
+ size: number;
132
+ }[];
133
+ level: CodeMapLevel;
134
+ nodes: CodeMapNode[];
135
+ truncated: boolean;
136
+ };
137
+ export type { CodeInsightsResult, CodeLines, CodeMapData, CodeMapEdge, CodeMapLevel, CodeMapNode, CodeTotals, FileRecord, FunctionGraph, FunctionNode, Hotspot, ImportGraph, LanguageTotal, ScanPhase, ScanProgress, TreeNode, };
138
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,109 @@
1
1
  {
2
+ "author": "Miroslav Machynka (Trebired)",
3
+ "config": {
4
+ "organization": {
5
+ "displayName": "Trebired",
6
+ "name": "trebired",
7
+ "website": "https://trebired.com"
8
+ }
9
+ },
2
10
  "name": "@trebired/code-insights",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
11
+ "version": "0.1.0",
12
+ "description": "Fast repository insights for Bun apps: languages, file tree, file import graph, function call graph and hotspots, scanned by a native engine with live progress, plus an interactive code map for @trebired/frontend.",
13
+ "type": "module",
14
+ "private": false,
15
+ "license": "AGPL-3.0-only",
16
+ "packageManager": "bun@1.4.2",
17
+ "engines": {
18
+ "bun": ">=1.0.0"
19
+ },
20
+ "main": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "import": "./dist/index.js",
25
+ "types": "./dist/index.d.ts"
26
+ },
27
+ "./client": {
28
+ "import": "./dist/client/index.js",
29
+ "types": "./dist/client/index.d.ts"
30
+ },
31
+ "./react": {
32
+ "import": "./dist/react/index.js",
33
+ "types": "./dist/react/index.d.ts"
34
+ },
35
+ "./server": {
36
+ "import": "./dist/server/index.js",
37
+ "types": "./dist/server/index.d.ts"
38
+ }
39
+ },
40
+ "files": [
41
+ ".trebired/logger/config.ts",
42
+ "dist",
43
+ "native/linux-*/code-insights",
44
+ "native/vendor/hyperpolyglot/LICENSE-MIT",
45
+ "CHANGELOG.md",
46
+ "LICENSE",
47
+ "README.md"
48
+ ],
49
+ "scripts": {
50
+ "build": "bun run prepare:generated && rm -rf dist && tsc -p tsconfig.build.json && bun ./scripts/prepare-dist.mjs",
51
+ "build:native": "bun ./scripts/build/native.mjs",
52
+ "prepare:generated": "bun node_modules/@trebired/code-discipline/dist/cli.js fix imports",
53
+ "prepublishOnly": "bun run typecheck && bun run build && bun run verify:pack && bun run verify:scan && bun run verify:map",
54
+ "typecheck": "bun run prepare:generated && tsc --noEmit",
55
+ "verify:map": "bun ./scripts/verify/map.mjs",
56
+ "verify:native": "cargo test --release --manifest-path native/code-insights/Cargo.toml",
57
+ "verify:pack": "bun ./scripts/verify/pack.mjs",
58
+ "verify:scan": "bun ./scripts/verify/scan.mjs"
59
+ },
60
+ "dependencies": {
61
+ "@package/logger-adapter": "npm:@trebired/logger-adapter@^0.8.5",
62
+ "d3-force": "^3.0.0"
63
+ },
64
+ "peerDependencies": {
65
+ "@trebired/frontend": "^31.0.7",
66
+ "react": "^19.2.0"
67
+ },
68
+ "peerDependenciesMeta": {
69
+ "@trebired/frontend": {
70
+ "optional": true
71
+ },
72
+ "react": {
73
+ "optional": true
74
+ }
75
+ },
76
+ "devDependencies": {
77
+ "@trebired/code-discipline": "^8.0.4",
78
+ "@trebired/configs": "^0.11.1",
79
+ "@trebired/frontend": "^31.0.7",
80
+ "@types/bun": "^1.3.14",
81
+ "@types/d3-force": "^3.0.10",
82
+ "@types/node": "^24.13.3",
83
+ "@types/react": "^19.2.0",
84
+ "happy-dom": "^21.0.4",
85
+ "react": "^19.2.0",
86
+ "react-dom": "^19.2.0",
87
+ "typescript": "^6.0.3"
88
+ },
89
+ "keywords": [
90
+ "code-insights",
91
+ "languages",
92
+ "dependency-graph",
93
+ "call-graph",
94
+ "tree-sitter",
95
+ "git",
96
+ "bun"
97
+ ],
98
+ "repository": {
99
+ "type": "git",
100
+ "url": "https://github.com/Trebired/code-insights"
101
+ },
102
+ "homepage": "https://github.com/Trebired/code-insights#readme",
103
+ "bugs": {
104
+ "url": "https://github.com/Trebired/code-insights/issues"
105
+ },
106
+ "publishConfig": {
107
+ "access": "public"
108
+ }
109
+ }