circle-ir 4.16.1 → 4.18.1

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 (295) hide show
  1. package/dist/analysis/advisories.d.ts +186 -0
  2. package/dist/analysis/advisories.d.ts.map +1 -0
  3. package/dist/analysis/advisories.js +391 -0
  4. package/dist/analysis/advisories.js.map +1 -0
  5. package/dist/analysis/comment-lines.d.ts +14 -0
  6. package/dist/analysis/comment-lines.d.ts.map +1 -0
  7. package/dist/analysis/comment-lines.js +34 -0
  8. package/dist/analysis/comment-lines.js.map +1 -0
  9. package/dist/analysis/config-loader.d.ts.map +1 -1
  10. package/dist/analysis/config-loader.js +59 -5
  11. package/dist/analysis/config-loader.js.map +1 -1
  12. package/dist/analysis/constant-caller-gate.d.ts +2 -2
  13. package/dist/analysis/constant-caller-gate.d.ts.map +1 -1
  14. package/dist/analysis/constant-caller-gate.js +205 -29
  15. package/dist/analysis/constant-caller-gate.js.map +1 -1
  16. package/dist/analysis/constant-propagation/index.d.ts +2 -0
  17. package/dist/analysis/constant-propagation/index.d.ts.map +1 -1
  18. package/dist/analysis/constant-propagation/index.js +10 -0
  19. package/dist/analysis/constant-propagation/index.js.map +1 -1
  20. package/dist/analysis/constant-propagation/propagator.d.ts +15 -0
  21. package/dist/analysis/constant-propagation/propagator.d.ts.map +1 -1
  22. package/dist/analysis/constant-propagation/propagator.js +224 -20
  23. package/dist/analysis/constant-propagation/propagator.js.map +1 -1
  24. package/dist/analysis/constant-propagation/types.d.ts +2 -0
  25. package/dist/analysis/constant-propagation/types.d.ts.map +1 -1
  26. package/dist/analysis/constant-propagation.d.ts +1 -1
  27. package/dist/analysis/constant-propagation.d.ts.map +1 -1
  28. package/dist/analysis/constant-propagation.js +1 -1
  29. package/dist/analysis/constant-propagation.js.map +1 -1
  30. package/dist/analysis/entry-point-detection.d.ts.map +1 -1
  31. package/dist/analysis/entry-point-detection.js +72 -0
  32. package/dist/analysis/entry-point-detection.js.map +1 -1
  33. package/dist/analysis/interprocedural.d.ts.map +1 -1
  34. package/dist/analysis/interprocedural.js +75 -8
  35. package/dist/analysis/interprocedural.js.map +1 -1
  36. package/dist/analysis/maven-declared.d.ts +72 -0
  37. package/dist/analysis/maven-declared.d.ts.map +1 -0
  38. package/dist/analysis/maven-declared.js +216 -0
  39. package/dist/analysis/maven-declared.js.map +1 -0
  40. package/dist/analysis/maven-version.d.ts +28 -0
  41. package/dist/analysis/maven-version.d.ts.map +1 -0
  42. package/dist/analysis/maven-version.js +172 -0
  43. package/dist/analysis/maven-version.js.map +1 -0
  44. package/dist/analysis/passes/constant-propagation-pass.d.ts.map +1 -1
  45. package/dist/analysis/passes/constant-propagation-pass.js +29 -1
  46. package/dist/analysis/passes/constant-propagation-pass.js.map +1 -1
  47. package/dist/analysis/passes/cross-file-pass.d.ts.map +1 -1
  48. package/dist/analysis/passes/cross-file-pass.js +84 -2
  49. package/dist/analysis/passes/cross-file-pass.js.map +1 -1
  50. package/dist/analysis/passes/csharp-sanitizer-credit.d.ts +7 -0
  51. package/dist/analysis/passes/csharp-sanitizer-credit.d.ts.map +1 -1
  52. package/dist/analysis/passes/csharp-sanitizer-credit.js +44 -1
  53. package/dist/analysis/passes/csharp-sanitizer-credit.js.map +1 -1
  54. package/dist/analysis/passes/insecure-cookie-pass.d.ts +2 -0
  55. package/dist/analysis/passes/insecure-cookie-pass.d.ts.map +1 -1
  56. package/dist/analysis/passes/insecure-cookie-pass.js +25 -3
  57. package/dist/analysis/passes/insecure-cookie-pass.js.map +1 -1
  58. package/dist/analysis/passes/interprocedural-pass.d.ts +11 -14
  59. package/dist/analysis/passes/interprocedural-pass.d.ts.map +1 -1
  60. package/dist/analysis/passes/interprocedural-pass.js +562 -0
  61. package/dist/analysis/passes/interprocedural-pass.js.map +1 -1
  62. package/dist/analysis/passes/language-sources-pass.d.ts +18 -1
  63. package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
  64. package/dist/analysis/passes/language-sources-pass.js +1079 -14
  65. package/dist/analysis/passes/language-sources-pass.js.map +1 -1
  66. package/dist/analysis/passes/param-source-flow-gate-pass.d.ts.map +1 -1
  67. package/dist/analysis/passes/param-source-flow-gate-pass.js +82 -3
  68. package/dist/analysis/passes/param-source-flow-gate-pass.js.map +1 -1
  69. package/dist/analysis/passes/sink-filter-pass.d.ts +44 -2
  70. package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
  71. package/dist/analysis/passes/sink-filter-pass.js +690 -12
  72. package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
  73. package/dist/analysis/passes/taint-propagation-pass.d.ts.map +1 -1
  74. package/dist/analysis/passes/taint-propagation-pass.js +298 -19
  75. package/dist/analysis/passes/taint-propagation-pass.js.map +1 -1
  76. package/dist/analysis/passes/tls-verify-disabled-pass.d.ts +18 -0
  77. package/dist/analysis/passes/tls-verify-disabled-pass.d.ts.map +1 -1
  78. package/dist/analysis/passes/tls-verify-disabled-pass.js +161 -0
  79. package/dist/analysis/passes/tls-verify-disabled-pass.js.map +1 -1
  80. package/dist/analysis/passes/weak-random-pass.d.ts +6 -0
  81. package/dist/analysis/passes/weak-random-pass.d.ts.map +1 -1
  82. package/dist/analysis/passes/weak-random-pass.js +29 -0
  83. package/dist/analysis/passes/weak-random-pass.js.map +1 -1
  84. package/dist/analysis/promote-cross-file-flows.d.ts +17 -0
  85. package/dist/analysis/promote-cross-file-flows.d.ts.map +1 -0
  86. package/dist/analysis/promote-cross-file-flows.js +32 -0
  87. package/dist/analysis/promote-cross-file-flows.js.map +1 -0
  88. package/dist/analysis/rust-literal-guard.d.ts.map +1 -1
  89. package/dist/analysis/rust-literal-guard.js +100 -1
  90. package/dist/analysis/rust-literal-guard.js.map +1 -1
  91. package/dist/analysis/sbom.d.ts +100 -0
  92. package/dist/analysis/sbom.d.ts.map +1 -1
  93. package/dist/analysis/sbom.js +514 -3
  94. package/dist/analysis/sbom.js.map +1 -1
  95. package/dist/analysis/semver-version.d.ts +30 -0
  96. package/dist/analysis/semver-version.d.ts.map +1 -0
  97. package/dist/analysis/semver-version.js +76 -0
  98. package/dist/analysis/semver-version.js.map +1 -0
  99. package/dist/analysis/taint-matcher.d.ts +5 -0
  100. package/dist/analysis/taint-matcher.d.ts.map +1 -1
  101. package/dist/analysis/taint-matcher.js +226 -4
  102. package/dist/analysis/taint-matcher.js.map +1 -1
  103. package/dist/analyzer.d.ts +57 -0
  104. package/dist/analyzer.d.ts.map +1 -1
  105. package/dist/analyzer.js +69 -6
  106. package/dist/analyzer.js.map +1 -1
  107. package/dist/browser/circle-ir.js +3360 -314
  108. package/dist/core/circle-ir-core.cjs +783 -220
  109. package/dist/core/circle-ir-core.js +783 -220
  110. package/dist/core/extractors/dfg.js +205 -2
  111. package/dist/core/extractors/dfg.js.map +1 -1
  112. package/dist/core/extractors/ts-declaration-detail.d.ts +39 -0
  113. package/dist/core/extractors/ts-declaration-detail.d.ts.map +1 -0
  114. package/dist/core/extractors/ts-declaration-detail.js +266 -0
  115. package/dist/core/extractors/ts-declaration-detail.js.map +1 -0
  116. package/dist/core/extractors/types.js +53 -9
  117. package/dist/core/extractors/types.js.map +1 -1
  118. package/dist/graph/analysis-pass.d.ts +4 -1
  119. package/dist/graph/analysis-pass.d.ts.map +1 -1
  120. package/dist/graph/analysis-pass.js +4 -1
  121. package/dist/graph/analysis-pass.js.map +1 -1
  122. package/dist/graph-facts/dead-code.d.ts +62 -0
  123. package/dist/graph-facts/dead-code.d.ts.map +1 -0
  124. package/dist/graph-facts/dead-code.js +90 -0
  125. package/dist/graph-facts/dead-code.js.map +1 -0
  126. package/dist/graph-facts/dependency-calls.d.ts +86 -0
  127. package/dist/graph-facts/dependency-calls.d.ts.map +1 -0
  128. package/dist/graph-facts/dependency-calls.js +93 -0
  129. package/dist/graph-facts/dependency-calls.js.map +1 -0
  130. package/dist/graph-facts/index.d.ts +10 -0
  131. package/dist/graph-facts/index.d.ts.map +1 -0
  132. package/dist/graph-facts/index.js +10 -0
  133. package/dist/graph-facts/index.js.map +1 -0
  134. package/dist/graph-facts/maven-packages.d.ts +42 -0
  135. package/dist/graph-facts/maven-packages.d.ts.map +1 -0
  136. package/dist/graph-facts/maven-packages.js +133 -0
  137. package/dist/graph-facts/maven-packages.js.map +1 -0
  138. package/dist/graph-facts/reach.d.ts +203 -0
  139. package/dist/graph-facts/reach.d.ts.map +1 -0
  140. package/dist/graph-facts/reach.js +219 -0
  141. package/dist/graph-facts/reach.js.map +1 -0
  142. package/dist/graph-facts/removal-reach.d.ts +73 -0
  143. package/dist/graph-facts/removal-reach.d.ts.map +1 -0
  144. package/dist/graph-facts/removal-reach.js +64 -0
  145. package/dist/graph-facts/removal-reach.js.map +1 -0
  146. package/dist/index.d.ts +21 -6
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +20 -3
  149. package/dist/index.js.map +1 -1
  150. package/dist/navigation/go-graph.d.ts +68 -0
  151. package/dist/navigation/go-graph.d.ts.map +1 -0
  152. package/dist/navigation/go-graph.js +753 -0
  153. package/dist/navigation/go-graph.js.map +1 -0
  154. package/dist/navigation/index.d.ts +7 -1
  155. package/dist/navigation/index.d.ts.map +1 -1
  156. package/dist/navigation/index.js +6 -0
  157. package/dist/navigation/index.js.map +1 -1
  158. package/dist/navigation/java-entry-tables.d.ts +43 -0
  159. package/dist/navigation/java-entry-tables.d.ts.map +1 -0
  160. package/dist/navigation/java-entry-tables.js +56 -0
  161. package/dist/navigation/java-entry-tables.js.map +1 -0
  162. package/dist/navigation/java-graph.d.ts +64 -0
  163. package/dist/navigation/java-graph.d.ts.map +1 -0
  164. package/dist/navigation/java-graph.js +466 -0
  165. package/dist/navigation/java-graph.js.map +1 -0
  166. package/dist/navigation/navigation-index.d.ts +91 -2
  167. package/dist/navigation/navigation-index.d.ts.map +1 -1
  168. package/dist/navigation/navigation-index.js +372 -45
  169. package/dist/navigation/navigation-index.js.map +1 -1
  170. package/dist/navigation/python-graph.d.ts +73 -0
  171. package/dist/navigation/python-graph.d.ts.map +1 -0
  172. package/dist/navigation/python-graph.js +867 -0
  173. package/dist/navigation/python-graph.js.map +1 -0
  174. package/dist/navigation/ts-call-edges.d.ts +193 -0
  175. package/dist/navigation/ts-call-edges.d.ts.map +1 -0
  176. package/dist/navigation/ts-call-edges.js +2089 -0
  177. package/dist/navigation/ts-call-edges.js.map +1 -0
  178. package/dist/navigation/ts-entry-tables.d.ts +88 -0
  179. package/dist/navigation/ts-entry-tables.d.ts.map +1 -0
  180. package/dist/navigation/ts-entry-tables.js +50 -0
  181. package/dist/navigation/ts-entry-tables.js.map +1 -0
  182. package/dist/path-set/branches.d.ts +52 -0
  183. package/dist/path-set/branches.d.ts.map +1 -0
  184. package/dist/path-set/branches.js +124 -0
  185. package/dist/path-set/branches.js.map +1 -0
  186. package/dist/path-set/finding-diff.d.ts +63 -0
  187. package/dist/path-set/finding-diff.d.ts.map +1 -0
  188. package/dist/path-set/finding-diff.js +150 -0
  189. package/dist/path-set/finding-diff.js.map +1 -0
  190. package/dist/path-set/index.d.ts +18 -0
  191. package/dist/path-set/index.d.ts.map +1 -0
  192. package/dist/path-set/index.js +12 -0
  193. package/dist/path-set/index.js.map +1 -0
  194. package/dist/path-set/line-diff.d.ts +19 -0
  195. package/dist/path-set/line-diff.d.ts.map +1 -0
  196. package/dist/path-set/line-diff.js +98 -0
  197. package/dist/path-set/line-diff.js.map +1 -0
  198. package/dist/path-set/path-set.d.ts +88 -0
  199. package/dist/path-set/path-set.d.ts.map +1 -0
  200. package/dist/path-set/path-set.js +716 -0
  201. package/dist/path-set/path-set.js.map +1 -0
  202. package/dist/path-set/templates.d.ts +42 -0
  203. package/dist/path-set/templates.d.ts.map +1 -0
  204. package/dist/path-set/templates.js +119 -0
  205. package/dist/path-set/templates.js.map +1 -0
  206. package/dist/path-set/types.d.ts +195 -0
  207. package/dist/path-set/types.d.ts.map +1 -0
  208. package/dist/path-set/types.js +8 -0
  209. package/dist/path-set/types.js.map +1 -0
  210. package/dist/remedy-class/index.d.ts +12 -0
  211. package/dist/remedy-class/index.d.ts.map +1 -0
  212. package/dist/remedy-class/index.js +9 -0
  213. package/dist/remedy-class/index.js.map +1 -0
  214. package/dist/remedy-class/match.d.ts +165 -0
  215. package/dist/remedy-class/match.d.ts.map +1 -0
  216. package/dist/remedy-class/match.js +705 -0
  217. package/dist/remedy-class/match.js.map +1 -0
  218. package/dist/remedy-class/output-context.d.ts +25 -0
  219. package/dist/remedy-class/output-context.d.ts.map +1 -0
  220. package/dist/remedy-class/output-context.js +150 -0
  221. package/dist/remedy-class/output-context.js.map +1 -0
  222. package/dist/remedy-class/sha256.d.ts +18 -0
  223. package/dist/remedy-class/sha256.d.ts.map +1 -0
  224. package/dist/remedy-class/sha256.js +89 -0
  225. package/dist/remedy-class/sha256.js.map +1 -0
  226. package/dist/remedy-class/table.d.ts +130 -0
  227. package/dist/remedy-class/table.d.ts.map +1 -0
  228. package/dist/remedy-class/table.js +457 -0
  229. package/dist/remedy-class/table.js.map +1 -0
  230. package/dist/resolution/cross-file.d.ts +18 -0
  231. package/dist/resolution/cross-file.d.ts.map +1 -1
  232. package/dist/resolution/cross-file.js +194 -5
  233. package/dist/resolution/cross-file.js.map +1 -1
  234. package/dist/stable-ids/builder.d.ts +20 -0
  235. package/dist/stable-ids/builder.d.ts.map +1 -0
  236. package/dist/stable-ids/builder.js +65 -0
  237. package/dist/stable-ids/builder.js.map +1 -0
  238. package/dist/stable-ids/diff.d.ts +18 -0
  239. package/dist/stable-ids/diff.d.ts.map +1 -0
  240. package/dist/stable-ids/diff.js +37 -0
  241. package/dist/stable-ids/diff.js.map +1 -0
  242. package/dist/stable-ids/go.d.ts +28 -0
  243. package/dist/stable-ids/go.d.ts.map +1 -0
  244. package/dist/stable-ids/go.js +160 -0
  245. package/dist/stable-ids/go.js.map +1 -0
  246. package/dist/stable-ids/hash.d.ts +22 -0
  247. package/dist/stable-ids/hash.d.ts.map +1 -0
  248. package/dist/stable-ids/hash.js +167 -0
  249. package/dist/stable-ids/hash.js.map +1 -0
  250. package/dist/stable-ids/index.d.ts +30 -0
  251. package/dist/stable-ids/index.d.ts.map +1 -0
  252. package/dist/stable-ids/index.js +59 -0
  253. package/dist/stable-ids/index.js.map +1 -0
  254. package/dist/stable-ids/java.d.ts +28 -0
  255. package/dist/stable-ids/java.d.ts.map +1 -0
  256. package/dist/stable-ids/java.js +224 -0
  257. package/dist/stable-ids/java.js.map +1 -0
  258. package/dist/stable-ids/moves.d.ts +87 -0
  259. package/dist/stable-ids/moves.d.ts.map +1 -0
  260. package/dist/stable-ids/moves.js +222 -0
  261. package/dist/stable-ids/moves.js.map +1 -0
  262. package/dist/stable-ids/nodes.d.ts +32 -0
  263. package/dist/stable-ids/nodes.d.ts.map +1 -0
  264. package/dist/stable-ids/nodes.js +92 -0
  265. package/dist/stable-ids/nodes.js.map +1 -0
  266. package/dist/stable-ids/normalize.d.ts +35 -0
  267. package/dist/stable-ids/normalize.d.ts.map +1 -0
  268. package/dist/stable-ids/normalize.js +174 -0
  269. package/dist/stable-ids/normalize.js.map +1 -0
  270. package/dist/stable-ids/parse-errors.d.ts +24 -0
  271. package/dist/stable-ids/parse-errors.d.ts.map +1 -0
  272. package/dist/stable-ids/parse-errors.js +46 -0
  273. package/dist/stable-ids/parse-errors.js.map +1 -0
  274. package/dist/stable-ids/python.d.ts +27 -0
  275. package/dist/stable-ids/python.d.ts.map +1 -0
  276. package/dist/stable-ids/python.js +212 -0
  277. package/dist/stable-ids/python.js.map +1 -0
  278. package/dist/stable-ids/ts-parse-errors.d.ts +27 -0
  279. package/dist/stable-ids/ts-parse-errors.d.ts.map +1 -0
  280. package/dist/stable-ids/ts-parse-errors.js +75 -0
  281. package/dist/stable-ids/ts-parse-errors.js.map +1 -0
  282. package/dist/stable-ids/types.d.ts +106 -0
  283. package/dist/stable-ids/types.d.ts.map +1 -0
  284. package/dist/stable-ids/types.js +16 -0
  285. package/dist/stable-ids/types.js.map +1 -0
  286. package/dist/stable-ids/typescript.d.ts +30 -0
  287. package/dist/stable-ids/typescript.d.ts.map +1 -0
  288. package/dist/stable-ids/typescript.js +362 -0
  289. package/dist/stable-ids/typescript.js.map +1 -0
  290. package/dist/types/config.d.ts +9 -0
  291. package/dist/types/config.d.ts.map +1 -1
  292. package/dist/types/index.d.ts +53 -0
  293. package/dist/types/index.d.ts.map +1 -1
  294. package/dist/types/index.js.map +1 -1
  295. package/package.json +3 -3
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Compare two `ids@0.1` id sets (two versions of the same files).
3
+ *
4
+ * A declaration is *unchanged* when its `decl` id and `body` id both match,
5
+ * *body changed* when only the `decl` id matches, and otherwise *added* or
6
+ * *removed*. Move and rename matching between removed and added
7
+ * declarations is a separate step; this comparison never pairs them.
8
+ */
9
+ function byId(files) {
10
+ const m = new Map();
11
+ for (const f of files) {
12
+ if (f.scheme !== 'ids@0.1')
13
+ throw new Error(`stable-ids: unsupported scheme ${String(f.scheme)}`);
14
+ for (const d of f.decls)
15
+ m.set(d.id, d);
16
+ }
17
+ return m;
18
+ }
19
+ export function diffStableIds(before, after) {
20
+ const a = byId(before);
21
+ const b = byId(after);
22
+ const out = { unchanged: [], body_changed: [], added: [], removed: [] };
23
+ for (const [id, old] of a) {
24
+ const now = b.get(id);
25
+ if (!now)
26
+ out.removed.push(old);
27
+ else if (now.body_id === old.body_id)
28
+ out.unchanged.push(now);
29
+ else
30
+ out.body_changed.push([old, now]);
31
+ }
32
+ for (const [id, now] of b)
33
+ if (!a.has(id))
34
+ out.added.push(now);
35
+ return out;
36
+ }
37
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/stable-ids/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,SAAS,IAAI,CAAC,KAA8B;IAC1C,MAAM,CAAC,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClG,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA+B,EAAE,KAA8B;IAC3F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,MAAM,GAAG,GAAiB,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACtF,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACzD,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `ids@0.1` declaration and body ids for Go.
3
+ *
4
+ * Declarations: the file (`module`, named `<package dir>/<file>`); functions;
5
+ * types (kind `type`); methods, keyed by their receiver type; package-level
6
+ * `var` and `const` names (kind `field`). Function literals inside a body
7
+ * are keyed by their enclosing declaration plus a structural path and
8
+ * flagged `unstable:anonymous`.
9
+ *
10
+ * Package: the file's directory (Go's unit of naming), `.` for the root,
11
+ * unless the caller passes one. Qualified name: `<package>:<Name>`,
12
+ * `<package>:<Type>.<Method>`. `init` may repeat across a package's files,
13
+ * so it is keyed by file: `<package>:init@<file>`. Signature: parameter and
14
+ * result types, parameter names never — `(string,...int)(int,error)` — so a
15
+ * rename does not re-key a function. A method's pointer or value receiver is
16
+ * not part of its name.
17
+ */
18
+ import type { Node, Tree } from '../core/parser.js';
19
+ import { type StableIdFile, type StableIdOptions } from './types.js';
20
+ /** The package directory for a repository-relative `.go` path. */
21
+ export declare function goPackageDir(filePath: string): string;
22
+ /** `(T1,T2)(R1,R2)` — parameter and result types only. */
23
+ export declare function goSignature(fn: Node): string;
24
+ /** The receiver's type name, pointer and type parameters dropped (`*Server[T]` → `Server`). */
25
+ export declare function goReceiverType(method: Node): string;
26
+ /** Derive `ids@0.1` ids from an already-parsed Go tree. */
27
+ export declare function deriveGoIds(tree: Tree, filePath: string, options?: StableIdOptions): StableIdFile;
28
+ //# sourceMappingURL=go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/stable-ids/go.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAqC,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAExG,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrD;AAsBD,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAM5C;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAKnD;AA6ED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAOrG"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * `ids@0.1` declaration and body ids for Go.
3
+ *
4
+ * Declarations: the file (`module`, named `<package dir>/<file>`); functions;
5
+ * types (kind `type`); methods, keyed by their receiver type; package-level
6
+ * `var` and `const` names (kind `field`). Function literals inside a body
7
+ * are keyed by their enclosing declaration plus a structural path and
8
+ * flagged `unstable:anonymous`.
9
+ *
10
+ * Package: the file's directory (Go's unit of naming), `.` for the root,
11
+ * unless the caller passes one. Qualified name: `<package>:<Name>`,
12
+ * `<package>:<Type>.<Method>`. `init` may repeat across a package's files,
13
+ * so it is keyed by file: `<package>:init@<file>`. Signature: parameter and
14
+ * result types, parameter names never — `(string,...int)(int,error)` — so a
15
+ * rename does not re-key a function. A method's pointer or value receiver is
16
+ * not part of its name.
17
+ */
18
+ import { partialOf } from './parse-errors.js';
19
+ import { Builder, placeholder } from './builder.js';
20
+ import { bodyTokens, namedChildren } from './normalize.js';
21
+ import { STABLE_ID_SCHEME } from './types.js';
22
+ /** The package directory for a repository-relative `.go` path. */
23
+ export function goPackageDir(filePath) {
24
+ const p = filePath.replace(/\\/g, '/').replace(/^\.\//, '');
25
+ const i = p.lastIndexOf('/');
26
+ return i < 0 ? '.' : p.slice(0, i);
27
+ }
28
+ function fileBase(filePath) {
29
+ const p = filePath.replace(/\\/g, '/');
30
+ return p.slice(p.lastIndexOf('/') + 1).replace(/\.go$/, '');
31
+ }
32
+ const compact = (s) => s.replace(/\s+/g, '');
33
+ function paramTypes(list) {
34
+ const out = [];
35
+ for (const p of list ? namedChildren(list) : []) {
36
+ if (p.type === 'parameter_declaration' || p.type === 'variadic_parameter_declaration') {
37
+ const t = compact(p.childForFieldName('type')?.text ?? '_');
38
+ const names = namedChildren(p).filter(c => c.type === 'identifier').length || 1;
39
+ const written = p.type === 'variadic_parameter_declaration' ? `...${t}` : t;
40
+ for (let i = 0; i < names; i++)
41
+ out.push(written);
42
+ }
43
+ }
44
+ return out;
45
+ }
46
+ /** `(T1,T2)(R1,R2)` — parameter and result types only. */
47
+ export function goSignature(fn) {
48
+ const params = paramTypes(fn.childForFieldName('parameters'));
49
+ const result = fn.childForFieldName('result');
50
+ let res = '';
51
+ if (result)
52
+ res = result.type === 'parameter_list' ? `(${paramTypes(result).join(',')})` : compact(result.text);
53
+ return `(${params.join(',')})${res}`;
54
+ }
55
+ /** The receiver's type name, pointer and type parameters dropped (`*Server[T]` → `Server`). */
56
+ export function goReceiverType(method) {
57
+ const recv = method.childForFieldName('receiver');
58
+ const decl = recv ? namedChildren(recv).find(c => c.type === 'parameter_declaration') : undefined;
59
+ const t = compact(decl?.childForFieldName('type')?.text ?? '');
60
+ return t.replace(/^\*/, '').replace(/\[.*$/, '');
61
+ }
62
+ class GoExtractor {
63
+ b;
64
+ pkg;
65
+ file;
66
+ constructor(b, pkg, file) {
67
+ this.b = b;
68
+ this.pkg = pkg;
69
+ this.file = file;
70
+ }
71
+ nested(node, enclosing, path = '') {
72
+ const kids = namedChildren(node);
73
+ for (let i = 0; i < kids.length; i++) {
74
+ const c = kids[i];
75
+ const p = path === '' ? `${i}` : `${path}.${i}`;
76
+ if (c.type === 'func_literal') {
77
+ const decl = this.b.add('function', '<func>', `${enclosing.qualified_name}/<func>@${p}`, goSignature(c), c, enclosing.id, ['unstable:anonymous']);
78
+ this.b.setBody(decl, bodyTokens([c]));
79
+ this.nested(c, decl);
80
+ }
81
+ else
82
+ this.nested(c, enclosing, p);
83
+ }
84
+ }
85
+ module(root, moduleDecl) {
86
+ const replace = new Map();
87
+ const types = new Map();
88
+ const stmts = namedChildren(root);
89
+ // Types first, so that methods declared before their type still find it.
90
+ for (const s of stmts) {
91
+ if (s.type !== 'type_declaration')
92
+ continue;
93
+ for (const spec of namedChildren(s)) {
94
+ if (spec.type !== 'type_spec' && spec.type !== 'type_alias')
95
+ continue;
96
+ const nameNode = spec.childForFieldName('name');
97
+ if (!nameNode)
98
+ continue;
99
+ const decl = this.b.add('type', nameNode.text, `${this.pkg}:${nameNode.text}`, '', spec, moduleDecl.id);
100
+ replace.set(spec.id, placeholder('type', nameNode.text, ''));
101
+ this.b.setBody(decl, bodyTokens([spec], { skip: new Set([nameNode.id]) }));
102
+ types.set(nameNode.text, decl);
103
+ }
104
+ }
105
+ for (const s of stmts) {
106
+ if (s.type === 'function_declaration') {
107
+ const nameNode = s.childForFieldName('name');
108
+ const name = nameNode?.text ?? '<unnamed>';
109
+ const sig = goSignature(s);
110
+ const qname = name === 'init' ? `${this.pkg}:init@${this.file}` : `${this.pkg}:${name}`;
111
+ const decl = this.b.add('function', name, qname, sig, s, moduleDecl.id);
112
+ replace.set(s.id, placeholder('function', name, sig));
113
+ this.b.setBody(decl, bodyTokens([s], { skip: new Set(nameNode ? [nameNode.id] : []) }));
114
+ this.nested(s, decl);
115
+ }
116
+ else if (s.type === 'method_declaration') {
117
+ const nameNode = s.childForFieldName('name');
118
+ const name = nameNode?.text ?? '<unnamed>';
119
+ const recv = goReceiverType(s);
120
+ const sig = goSignature(s);
121
+ const parent = types.get(recv) ?? moduleDecl;
122
+ const decl = this.b.add('method', name, `${this.pkg}:${recv}.${name}`, sig, s, parent.id);
123
+ replace.set(s.id, placeholder('method', name, sig));
124
+ const skip = new Set(nameNode ? [nameNode.id] : []);
125
+ const r = s.childForFieldName('receiver');
126
+ if (r)
127
+ skip.add(r.id);
128
+ this.b.setBody(decl, bodyTokens([s], { skip }));
129
+ this.nested(s, decl);
130
+ }
131
+ else if (s.type === 'var_declaration' || s.type === 'const_declaration') {
132
+ const specs = namedChildren(s).flatMap(c => (c.type === 'var_spec_list' || c.type === 'const_spec_list' ? namedChildren(c) : [c]));
133
+ for (const spec of specs) {
134
+ if (spec.type !== 'var_spec' && spec.type !== 'const_spec')
135
+ continue;
136
+ const t = compact(spec.childForFieldName('type')?.text ?? '');
137
+ for (const n of namedChildren(spec).filter(c => c.type === 'identifier')) {
138
+ if (n.text === '_')
139
+ continue;
140
+ const decl = this.b.add('field', n.text, `${this.pkg}:${n.text}`, t, spec, moduleDecl.id);
141
+ this.b.setBody(decl, bodyTokens([spec], { skip: new Set([n.id]) }));
142
+ this.nested(spec, decl);
143
+ }
144
+ replace.set(spec.id, placeholder('field', namedChildren(spec).filter(c => c.type === 'identifier').map(c => c.text).join(','), t));
145
+ }
146
+ }
147
+ }
148
+ this.b.setBody(moduleDecl, bodyTokens([root], { replace }));
149
+ }
150
+ }
151
+ /** Derive `ids@0.1` ids from an already-parsed Go tree. */
152
+ export function deriveGoIds(tree, filePath, options = {}) {
153
+ const pkg = options.module ?? goPackageDir(filePath);
154
+ const file = fileBase(filePath);
155
+ const builder = new Builder('go', options.keepBodyTokens === true);
156
+ const moduleDecl = builder.add('module', file, `${pkg}/${file}`, '', tree.rootNode, null);
157
+ new GoExtractor(builder, pkg, file).module(tree.rootNode, moduleDecl);
158
+ return { scheme: STABLE_ID_SCHEME, file: filePath, language: 'go', module: pkg, decls: builder.decls, ...partialOf(tree.rootNode) };
159
+ }
160
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../src/stable-ids/go.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * BLAKE3 (unkeyed hash mode, 32-byte output) and the 128-bit base32 digest the
3
+ * stable-id scheme prints.
4
+ *
5
+ * A dependency-free implementation so the library keeps its two dependencies
6
+ * and runs unchanged in Node.js, browsers and Workers. It is the plain
7
+ * reference algorithm (no SIMD, no incremental API): ids hash short strings —
8
+ * a qualified name, a signature, one function body — so throughput is not the
9
+ * constraint, and determinism across hosts is. Checked against the published
10
+ * BLAKE3 test vectors in `tests/stable-ids/hash.test.ts`.
11
+ */
12
+ /** BLAKE3 of `input`, the default 32-byte output. */
13
+ export declare function blake3(input: Uint8Array): Uint8Array;
14
+ /** RFC 4648 base32, lowercase, unpadded. */
15
+ export declare function base32(bytes: Uint8Array): string;
16
+ /**
17
+ * The digest every stable id is built from: BLAKE3 of the parts (UTF-8, each
18
+ * part followed by a NUL so `["ab","c"]` and `["a","bc"]` differ), truncated
19
+ * to 128 bits, printed as 26 base32 characters.
20
+ */
21
+ export declare function digest128(parts: readonly string[]): string;
22
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/stable-ids/hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0HH,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CA2BpD;AAID,4CAA4C;AAC5C,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAehD;AAID;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAI1D"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * BLAKE3 (unkeyed hash mode, 32-byte output) and the 128-bit base32 digest the
3
+ * stable-id scheme prints.
4
+ *
5
+ * A dependency-free implementation so the library keeps its two dependencies
6
+ * and runs unchanged in Node.js, browsers and Workers. It is the plain
7
+ * reference algorithm (no SIMD, no incremental API): ids hash short strings —
8
+ * a qualified name, a signature, one function body — so throughput is not the
9
+ * constraint, and determinism across hosts is. Checked against the published
10
+ * BLAKE3 test vectors in `tests/stable-ids/hash.test.ts`.
11
+ */
12
+ const IV = new Uint32Array([
13
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
14
+ 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
15
+ ]);
16
+ const MSG_PERMUTATION = [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8];
17
+ const CHUNK_START = 1;
18
+ const CHUNK_END = 2;
19
+ const PARENT = 4;
20
+ const ROOT = 8;
21
+ const BLOCK_LEN = 64;
22
+ const CHUNK_LEN = 1024;
23
+ function rotr(x, n) {
24
+ return ((x >>> n) | (x << (32 - n))) >>> 0;
25
+ }
26
+ function g(s, a, b, c, d, mx, my) {
27
+ s[a] = (s[a] + s[b] + mx) >>> 0;
28
+ s[d] = rotr(s[d] ^ s[a], 16);
29
+ s[c] = (s[c] + s[d]) >>> 0;
30
+ s[b] = rotr(s[b] ^ s[c], 12);
31
+ s[a] = (s[a] + s[b] + my) >>> 0;
32
+ s[d] = rotr(s[d] ^ s[a], 8);
33
+ s[c] = (s[c] + s[d]) >>> 0;
34
+ s[b] = rotr(s[b] ^ s[c], 7);
35
+ }
36
+ function round(s, m) {
37
+ g(s, 0, 4, 8, 12, m[0], m[1]);
38
+ g(s, 1, 5, 9, 13, m[2], m[3]);
39
+ g(s, 2, 6, 10, 14, m[4], m[5]);
40
+ g(s, 3, 7, 11, 15, m[6], m[7]);
41
+ g(s, 0, 5, 10, 15, m[8], m[9]);
42
+ g(s, 1, 6, 11, 12, m[10], m[11]);
43
+ g(s, 2, 7, 8, 13, m[12], m[13]);
44
+ g(s, 3, 4, 9, 14, m[14], m[15]);
45
+ }
46
+ /** The compression function; returns the first 8 output words. */
47
+ function compress(cv, block, counter, blockLen, flags) {
48
+ const s = new Uint32Array(16);
49
+ s.set(cv, 0);
50
+ s.set(IV.subarray(0, 4), 8);
51
+ s[12] = counter >>> 0;
52
+ // Counters here never exceed 2^53 (a JS number); the high word is exact.
53
+ s[13] = Math.floor(counter / 0x100000000) >>> 0;
54
+ s[14] = blockLen;
55
+ s[15] = flags;
56
+ let m = Uint32Array.from(block);
57
+ for (let r = 0; r < 7; r++) {
58
+ round(s, m);
59
+ if (r < 6) {
60
+ const p = new Uint32Array(16);
61
+ for (let i = 0; i < 16; i++)
62
+ p[i] = m[MSG_PERMUTATION[i]];
63
+ m = p;
64
+ }
65
+ }
66
+ const out = new Uint32Array(8);
67
+ for (let i = 0; i < 8; i++)
68
+ out[i] = (s[i] ^ s[i + 8]) >>> 0;
69
+ return out;
70
+ }
71
+ function blockWords(bytes, offset, len) {
72
+ const w = new Uint32Array(16);
73
+ for (let i = 0; i < len; i++) {
74
+ w[i >> 2] |= bytes[offset + i] << ((i & 3) * 8);
75
+ }
76
+ return w;
77
+ }
78
+ function chainingValue(o) {
79
+ return compress(o.cv, o.block, o.counter, o.blockLen, o.flags);
80
+ }
81
+ function chunkOutput(input, start, end, chunkCounter) {
82
+ let cv = IV;
83
+ let offset = start;
84
+ let blocksDone = 0;
85
+ // Every block but the last is compressed straight into the chaining value.
86
+ while (end - offset > BLOCK_LEN) {
87
+ const flags = blocksDone === 0 ? CHUNK_START : 0;
88
+ cv = compress(cv, blockWords(input, offset, BLOCK_LEN), chunkCounter, BLOCK_LEN, flags);
89
+ offset += BLOCK_LEN;
90
+ blocksDone++;
91
+ }
92
+ const len = end - offset;
93
+ return {
94
+ cv,
95
+ block: blockWords(input, offset, len),
96
+ counter: chunkCounter,
97
+ blockLen: len,
98
+ flags: (blocksDone === 0 ? CHUNK_START : 0) | CHUNK_END,
99
+ };
100
+ }
101
+ function parentOutput(left, right) {
102
+ const block = new Uint32Array(16);
103
+ block.set(left, 0);
104
+ block.set(right, 8);
105
+ return { cv: IV, block, counter: 0, blockLen: BLOCK_LEN, flags: PARENT };
106
+ }
107
+ /** BLAKE3 of `input`, the default 32-byte output. */
108
+ export function blake3(input) {
109
+ const chunkCount = Math.max(1, Math.ceil(input.length / CHUNK_LEN));
110
+ const stack = [];
111
+ for (let i = 0; i < chunkCount - 1; i++) {
112
+ let cv = chainingValue(chunkOutput(input, i * CHUNK_LEN, (i + 1) * CHUNK_LEN, i));
113
+ // Merge completed subtrees: one merge per trailing zero bit of the count.
114
+ let total = i + 1;
115
+ while ((total & 1) === 0) {
116
+ cv = chainingValue(parentOutput(stack.pop(), cv));
117
+ total >>= 1;
118
+ }
119
+ stack.push(cv);
120
+ }
121
+ const last = chunkCount - 1;
122
+ let output = chunkOutput(input, last * CHUNK_LEN, input.length, last);
123
+ while (stack.length > 0) {
124
+ output = parentOutput(stack.pop(), chainingValue(output));
125
+ }
126
+ const words = compress(output.cv, output.block, 0, output.blockLen, output.flags | ROOT);
127
+ const bytes = new Uint8Array(32);
128
+ for (let i = 0; i < 8; i++) {
129
+ bytes[i * 4] = words[i] & 0xff;
130
+ bytes[i * 4 + 1] = (words[i] >>> 8) & 0xff;
131
+ bytes[i * 4 + 2] = (words[i] >>> 16) & 0xff;
132
+ bytes[i * 4 + 3] = (words[i] >>> 24) & 0xff;
133
+ }
134
+ return bytes;
135
+ }
136
+ const BASE32 = 'abcdefghijklmnopqrstuvwxyz234567';
137
+ /** RFC 4648 base32, lowercase, unpadded. */
138
+ export function base32(bytes) {
139
+ let out = '';
140
+ let buffer = 0;
141
+ let bits = 0;
142
+ for (const b of bytes) {
143
+ buffer = (buffer << 8) | b;
144
+ bits += 8;
145
+ while (bits >= 5) {
146
+ out += BASE32[(buffer >>> (bits - 5)) & 31];
147
+ bits -= 5;
148
+ }
149
+ buffer &= (1 << bits) - 1;
150
+ }
151
+ if (bits > 0)
152
+ out += BASE32[(buffer << (5 - bits)) & 31];
153
+ return out;
154
+ }
155
+ const encoder = new TextEncoder();
156
+ /**
157
+ * The digest every stable id is built from: BLAKE3 of the parts (UTF-8, each
158
+ * part followed by a NUL so `["ab","c"]` and `["a","bc"]` differ), truncated
159
+ * to 128 bits, printed as 26 base32 characters.
160
+ */
161
+ export function digest128(parts) {
162
+ let s = '';
163
+ for (const p of parts)
164
+ s += p + '\u0000';
165
+ return base32(blake3(encoder.encode(s)).subarray(0, 16));
166
+ }
167
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/stable-ids/hash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Stable code ids (`ids@0.1`) — experimental, opt-in.
3
+ *
4
+ * Nothing in `analyze()` calls this module; a consumer that wants ids calls
5
+ * `deriveStableIds` (or `deriveTypeScriptIds` on a tree it already holds) and
6
+ * `assignNodeIds` on the IR it already has. TypeScript and JavaScript only in
7
+ * this version.
8
+ */
9
+ import { type SupportedLanguage } from '../core/parser.js';
10
+ import type { StableIdFile, StableIdOptions } from './types.js';
11
+ export { STABLE_ID_SCHEME } from './types.js';
12
+ export type { StableIdScheme, StableDecl, StableDeclKind, StableIdFlag, StableIdFile, StableIdOptions, StableNodeIds, ParseErrorSite, } from './types.js';
13
+ export { firstParseError } from './parse-errors.js';
14
+ export { deriveTypeScriptIds, moduleNameFor } from './typescript.js';
15
+ export { deriveJavaIds, eraseJavaType } from './java.js';
16
+ export { derivePythonIds, pythonModuleName, pythonSignature } from './python.js';
17
+ export { deriveGoIds, goPackageDir, goSignature, goReceiverType } from './go.js';
18
+ export { assignNodeIds, type NodeIdSource } from './nodes.js';
19
+ export { diffStableIds, type StableIdDiff } from './diff.js';
20
+ export { detectMoves, bodySimilarity, type MoveRelation, type MoveEvidence, type CandidateEvidence, type StableIdMove, type MoveCandidate, type MoveOptions, type MoveDetection, } from './moves.js';
21
+ export { blake3, base32, digest128 } from './hash.js';
22
+ /** True when `ids@0.1` covers the language. */
23
+ export declare function stableIdsSupport(language: SupportedLanguage): boolean;
24
+ /**
25
+ * Parse `code` and derive its `ids@0.1` declaration and body ids.
26
+ * `.tsx`/`.jsx` files (or `language: 'tsx'`) parse with the JSX-aware
27
+ * grammar; ids record the language as `typescript` or `javascript`.
28
+ */
29
+ export declare function deriveStableIds(code: string, filePath: string, language: SupportedLanguage, options?: StableIdOptions): Promise<StableIdFile>;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stable-ids/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK/E,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtD,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAErE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Stable code ids (`ids@0.1`) — experimental, opt-in.
3
+ *
4
+ * Nothing in `analyze()` calls this module; a consumer that wants ids calls
5
+ * `deriveStableIds` (or `deriveTypeScriptIds` on a tree it already holds) and
6
+ * `assignNodeIds` on the IR it already has. TypeScript and JavaScript only in
7
+ * this version.
8
+ */
9
+ import { disposeTree, parse } from '../core/parser.js';
10
+ import { deriveTypeScriptIds } from './typescript.js';
11
+ import { deriveJavaIds } from './java.js';
12
+ import { derivePythonIds } from './python.js';
13
+ import { deriveGoIds } from './go.js';
14
+ export { STABLE_ID_SCHEME } from './types.js';
15
+ export { firstParseError } from './parse-errors.js';
16
+ export { deriveTypeScriptIds, moduleNameFor } from './typescript.js';
17
+ export { deriveJavaIds, eraseJavaType } from './java.js';
18
+ export { derivePythonIds, pythonModuleName, pythonSignature } from './python.js';
19
+ export { deriveGoIds, goPackageDir, goSignature, goReceiverType } from './go.js';
20
+ export { assignNodeIds } from './nodes.js';
21
+ export { diffStableIds } from './diff.js';
22
+ export { detectMoves, bodySimilarity, } from './moves.js';
23
+ export { blake3, base32, digest128 } from './hash.js';
24
+ /** True when `ids@0.1` covers the language. */
25
+ export function stableIdsSupport(language) {
26
+ return language === 'typescript' || language === 'javascript' || language === 'tsx' || language === 'java' || language === 'python' || language === 'go';
27
+ }
28
+ /**
29
+ * Parse `code` and derive its `ids@0.1` declaration and body ids.
30
+ * `.tsx`/`.jsx` files (or `language: 'tsx'`) parse with the JSX-aware
31
+ * grammar; ids record the language as `typescript` or `javascript`.
32
+ */
33
+ export async function deriveStableIds(code, filePath, language, options = {}) {
34
+ if (!stableIdsSupport(language)) {
35
+ throw new Error(`stable-ids: ${language} is not covered by ids@0.1 (TypeScript, JavaScript, Java, Python and Go)`);
36
+ }
37
+ if (language === 'java' || language === 'python' || language === 'go') {
38
+ const tree = await parse(code, language);
39
+ try {
40
+ if (language === 'go')
41
+ return deriveGoIds(tree, filePath, options);
42
+ return language === 'java' ? deriveJavaIds(tree, filePath, options) : derivePythonIds(tree, filePath, options);
43
+ }
44
+ finally {
45
+ disposeTree(tree);
46
+ }
47
+ }
48
+ const lower = filePath.toLowerCase();
49
+ const jsx = language === 'tsx' || lower.endsWith('.tsx') || lower.endsWith('.jsx');
50
+ const idLanguage = language === 'javascript' ? 'javascript' : 'typescript';
51
+ const tree = await parse(code, jsx ? 'tsx' : idLanguage);
52
+ try {
53
+ return deriveTypeScriptIds(tree, filePath, idLanguage, options);
54
+ }
55
+ finally {
56
+ disposeTree(tree);
57
+ }
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stable-ids/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `ids@0.1` declaration and body ids for Java.
3
+ *
4
+ * Declarations: the compilation unit (`module`, named `<package>/<File>`);
5
+ * classes, interfaces, enums, records and annotation types (kind `type`);
6
+ * methods, constructors (named `constructor`) and static initializers
7
+ * (`<clinit>`) (kind `method`); fields, enum constants and record components
8
+ * (kind `field`). Lambdas, anonymous classes and local classes inside a body
9
+ * are keyed by their enclosing declaration plus a structural path and
10
+ * flagged `unstable:anonymous`.
11
+ *
12
+ * Qualified name: `<package>:<Outer>.<Inner>.<member>` (`<default>` for the
13
+ * default package). Signature: the erased parameter types, simple names —
14
+ * `(List,String[],int...)` — so a parameter rename, a generic argument
15
+ * change or an import change does not re-key a method, and overloads stay
16
+ * apart. Type variables keep their names.
17
+ *
18
+ * Bodies follow the TypeScript rules: a leaf's body is its subtree minus its
19
+ * own name; a type's body holds a placeholder per member, so editing a
20
+ * method changes only the method's body id.
21
+ */
22
+ import type { Tree } from '../core/parser.js';
23
+ import { type StableIdFile, type StableIdOptions } from './types.js';
24
+ /** A Java type as written, erased: generics and annotations dropped, last name segment kept, dimensions kept. */
25
+ export declare function eraseJavaType(text: string): string;
26
+ /** Derive `ids@0.1` ids from an already-parsed Java tree. */
27
+ export declare function deriveJavaIds(tree: Tree, filePath: string, options?: StableIdOptions): StableIdFile;
28
+ //# sourceMappingURL=java.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../src/stable-ids/java.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAQ,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAA0D,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAO7H,iHAAiH;AACjH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAelD;AAyJD,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAgBvG"}