@smthrs/std 0.0.0-stage → 1.0.0-rc.4

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 (555) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/LICENSE +21 -0
  3. package/README.md +152 -2
  4. package/dist/cjs/ApplyPatch.d.ts +174 -0
  5. package/dist/cjs/ApplyPatch.d.ts.map +1 -0
  6. package/dist/cjs/ApplyPatch.js +309 -0
  7. package/dist/cjs/ApplyPatch.js.map +7 -0
  8. package/dist/cjs/Bash.d.ts +380 -0
  9. package/dist/cjs/Bash.d.ts.map +1 -0
  10. package/dist/cjs/Bash.js +332 -0
  11. package/dist/cjs/Bash.js.map +7 -0
  12. package/dist/cjs/Checkpoints.d.ts +279 -0
  13. package/dist/cjs/Checkpoints.d.ts.map +1 -0
  14. package/dist/cjs/Checkpoints.js +145 -0
  15. package/dist/cjs/Checkpoints.js.map +7 -0
  16. package/dist/cjs/Container.d.ts +132 -0
  17. package/dist/cjs/Container.d.ts.map +1 -0
  18. package/dist/cjs/Container.js +113 -0
  19. package/dist/cjs/Container.js.map +7 -0
  20. package/dist/cjs/Edit.d.ts +203 -0
  21. package/dist/cjs/Edit.d.ts.map +1 -0
  22. package/dist/cjs/Edit.js +258 -0
  23. package/dist/cjs/Edit.js.map +7 -0
  24. package/dist/cjs/ExaWebSearch.d.ts +22 -0
  25. package/dist/cjs/ExaWebSearch.d.ts.map +1 -0
  26. package/dist/cjs/ExaWebSearch.js +138 -0
  27. package/dist/cjs/ExaWebSearch.js.map +7 -0
  28. package/dist/cjs/Explore.d.ts +328 -0
  29. package/dist/cjs/Explore.d.ts.map +1 -0
  30. package/dist/cjs/Explore.js +90 -0
  31. package/dist/cjs/Explore.js.map +7 -0
  32. package/dist/cjs/Fetch.d.ts +130 -0
  33. package/dist/cjs/Fetch.d.ts.map +1 -0
  34. package/dist/cjs/Fetch.js +64 -0
  35. package/dist/cjs/Fetch.js.map +7 -0
  36. package/dist/cjs/Glob.d.ts +204 -0
  37. package/dist/cjs/Glob.d.ts.map +1 -0
  38. package/dist/cjs/Glob.js +94 -0
  39. package/dist/cjs/Glob.js.map +7 -0
  40. package/dist/cjs/Grep.d.ts +347 -0
  41. package/dist/cjs/Grep.d.ts.map +1 -0
  42. package/dist/cjs/Grep.js +181 -0
  43. package/dist/cjs/Grep.js.map +7 -0
  44. package/dist/cjs/HttpPost.d.ts +130 -0
  45. package/dist/cjs/HttpPost.d.ts.map +1 -0
  46. package/dist/cjs/HttpPost.js +72 -0
  47. package/dist/cjs/HttpPost.js.map +7 -0
  48. package/dist/cjs/LanguageServer.d.ts +90 -0
  49. package/dist/cjs/LanguageServer.d.ts.map +1 -0
  50. package/dist/cjs/LanguageServer.js +60 -0
  51. package/dist/cjs/LanguageServer.js.map +7 -0
  52. package/dist/cjs/Ls.d.ts +164 -0
  53. package/dist/cjs/Ls.d.ts.map +1 -0
  54. package/dist/cjs/Ls.js +136 -0
  55. package/dist/cjs/Ls.js.map +7 -0
  56. package/dist/cjs/Lsp.d.ts +125 -0
  57. package/dist/cjs/Lsp.d.ts.map +1 -0
  58. package/dist/cjs/Lsp.js +137 -0
  59. package/dist/cjs/Lsp.js.map +7 -0
  60. package/dist/cjs/Manifest.d.ts +918 -0
  61. package/dist/cjs/Manifest.d.ts.map +1 -0
  62. package/dist/cjs/Manifest.js +144 -0
  63. package/dist/cjs/Manifest.js.map +7 -0
  64. package/dist/cjs/NativeSearch.d.ts +38 -0
  65. package/dist/cjs/NativeSearch.d.ts.map +1 -0
  66. package/dist/cjs/NativeSearch.js +326 -0
  67. package/dist/cjs/NativeSearch.js.map +7 -0
  68. package/dist/cjs/NodeLanguageServer.d.ts +128 -0
  69. package/dist/cjs/NodeLanguageServer.d.ts.map +1 -0
  70. package/dist/cjs/NodeLanguageServer.js +796 -0
  71. package/dist/cjs/NodeLanguageServer.js.map +7 -0
  72. package/dist/cjs/PortableSearch.d.ts +24 -0
  73. package/dist/cjs/PortableSearch.d.ts.map +1 -0
  74. package/dist/cjs/PortableSearch.js +233 -0
  75. package/dist/cjs/PortableSearch.js.map +7 -0
  76. package/dist/cjs/Probe.d.ts +193 -0
  77. package/dist/cjs/Probe.d.ts.map +1 -0
  78. package/dist/cjs/Probe.js +134 -0
  79. package/dist/cjs/Probe.js.map +7 -0
  80. package/dist/cjs/Read.d.ts +189 -0
  81. package/dist/cjs/Read.d.ts.map +1 -0
  82. package/dist/cjs/Read.js +223 -0
  83. package/dist/cjs/Read.js.map +7 -0
  84. package/dist/cjs/Relocate.d.ts +73 -0
  85. package/dist/cjs/Relocate.d.ts.map +1 -0
  86. package/dist/cjs/Relocate.js +72 -0
  87. package/dist/cjs/Relocate.js.map +7 -0
  88. package/dist/cjs/Search.d.ts +163 -0
  89. package/dist/cjs/Search.d.ts.map +1 -0
  90. package/dist/cjs/Search.js +51 -0
  91. package/dist/cjs/Search.js.map +7 -0
  92. package/dist/cjs/SearchConformance.d.ts +115 -0
  93. package/dist/cjs/SearchConformance.d.ts.map +1 -0
  94. package/dist/cjs/SearchConformance.js +172 -0
  95. package/dist/cjs/SearchConformance.js.map +7 -0
  96. package/dist/cjs/SearchContract.d.ts +114 -0
  97. package/dist/cjs/SearchContract.d.ts.map +1 -0
  98. package/dist/cjs/SearchContract.js +339 -0
  99. package/dist/cjs/SearchContract.js.map +7 -0
  100. package/dist/cjs/ShellCommand.d.ts +164 -0
  101. package/dist/cjs/ShellCommand.d.ts.map +1 -0
  102. package/dist/cjs/ShellCommand.js +102 -0
  103. package/dist/cjs/ShellCommand.js.map +7 -0
  104. package/dist/cjs/StdError.d.ts +55 -0
  105. package/dist/cjs/StdError.d.ts.map +1 -0
  106. package/dist/cjs/StdError.js +74 -0
  107. package/dist/cjs/StdError.js.map +7 -0
  108. package/dist/cjs/TestRun.d.ts +311 -0
  109. package/dist/cjs/TestRun.d.ts.map +1 -0
  110. package/dist/cjs/TestRun.js +228 -0
  111. package/dist/cjs/TestRun.js.map +7 -0
  112. package/dist/cjs/TestRunner.d.ts +102 -0
  113. package/dist/cjs/TestRunner.d.ts.map +1 -0
  114. package/dist/cjs/TestRunner.js +54 -0
  115. package/dist/cjs/TestRunner.js.map +7 -0
  116. package/dist/cjs/TreeFingerprint.d.ts +140 -0
  117. package/dist/cjs/TreeFingerprint.d.ts.map +1 -0
  118. package/dist/cjs/TreeFingerprint.js +87 -0
  119. package/dist/cjs/TreeFingerprint.js.map +7 -0
  120. package/dist/cjs/UpdatePlan.d.ts +152 -0
  121. package/dist/cjs/UpdatePlan.d.ts.map +1 -0
  122. package/dist/cjs/UpdatePlan.js +87 -0
  123. package/dist/cjs/UpdatePlan.js.map +7 -0
  124. package/dist/cjs/WebFetch.d.ts +134 -0
  125. package/dist/cjs/WebFetch.d.ts.map +1 -0
  126. package/dist/cjs/WebFetch.js +140 -0
  127. package/dist/cjs/WebFetch.js.map +7 -0
  128. package/dist/cjs/WebSearch.d.ts +181 -0
  129. package/dist/cjs/WebSearch.d.ts.map +1 -0
  130. package/dist/cjs/WebSearch.js +86 -0
  131. package/dist/cjs/WebSearch.js.map +7 -0
  132. package/dist/cjs/Write.d.ts +147 -0
  133. package/dist/cjs/Write.d.ts.map +1 -0
  134. package/dist/cjs/Write.js +122 -0
  135. package/dist/cjs/Write.js.map +7 -0
  136. package/dist/cjs/index.d.ts +127 -0
  137. package/dist/cjs/index.d.ts.map +1 -0
  138. package/dist/cjs/index.js +99 -0
  139. package/dist/cjs/index.js.map +7 -0
  140. package/dist/cjs/internal/ApplyPatch.d.ts +145 -0
  141. package/dist/cjs/internal/ApplyPatch.d.ts.map +1 -0
  142. package/dist/cjs/internal/ApplyPatch.js +462 -0
  143. package/dist/cjs/internal/ApplyPatch.js.map +7 -0
  144. package/dist/cjs/internal/CodexText.d.ts +73 -0
  145. package/dist/cjs/internal/CodexText.d.ts.map +1 -0
  146. package/dist/cjs/internal/CodexText.js +108 -0
  147. package/dist/cjs/internal/CodexText.js.map +7 -0
  148. package/dist/cjs/internal/Declaration.d.ts +49 -0
  149. package/dist/cjs/internal/Declaration.d.ts.map +1 -0
  150. package/dist/cjs/internal/Declaration.js +46 -0
  151. package/dist/cjs/internal/Declaration.js.map +7 -0
  152. package/dist/cjs/internal/Diagnostics.d.ts +77 -0
  153. package/dist/cjs/internal/Diagnostics.d.ts.map +1 -0
  154. package/dist/cjs/internal/Diagnostics.js +89 -0
  155. package/dist/cjs/internal/Diagnostics.js.map +7 -0
  156. package/dist/cjs/internal/EnvelopePrecheck.d.ts +67 -0
  157. package/dist/cjs/internal/EnvelopePrecheck.d.ts.map +1 -0
  158. package/dist/cjs/internal/EnvelopePrecheck.js +124 -0
  159. package/dist/cjs/internal/EnvelopePrecheck.js.map +7 -0
  160. package/dist/cjs/internal/Exec.d.ts +139 -0
  161. package/dist/cjs/internal/Exec.d.ts.map +1 -0
  162. package/dist/cjs/internal/Exec.js +158 -0
  163. package/dist/cjs/internal/Exec.js.map +7 -0
  164. package/dist/cjs/internal/FileMutation.d.ts +109 -0
  165. package/dist/cjs/internal/FileMutation.d.ts.map +1 -0
  166. package/dist/cjs/internal/FileMutation.js +116 -0
  167. package/dist/cjs/internal/FileMutation.js.map +7 -0
  168. package/dist/cjs/internal/FsFailure.d.ts +38 -0
  169. package/dist/cjs/internal/FsFailure.d.ts.map +1 -0
  170. package/dist/cjs/internal/FsFailure.js +40 -0
  171. package/dist/cjs/internal/FsFailure.js.map +7 -0
  172. package/dist/cjs/internal/GitWorktree.d.ts +108 -0
  173. package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
  174. package/dist/cjs/internal/GitWorktree.js +276 -0
  175. package/dist/cjs/internal/GitWorktree.js.map +7 -0
  176. package/dist/cjs/internal/Grouping.d.ts +51 -0
  177. package/dist/cjs/internal/Grouping.d.ts.map +1 -0
  178. package/dist/cjs/internal/Grouping.js +83 -0
  179. package/dist/cjs/internal/Grouping.js.map +7 -0
  180. package/dist/cjs/internal/Html.d.ts +20 -0
  181. package/dist/cjs/internal/Html.d.ts.map +1 -0
  182. package/dist/cjs/internal/Html.js +81 -0
  183. package/dist/cjs/internal/Html.js.map +7 -0
  184. package/dist/cjs/internal/Http.d.ts +95 -0
  185. package/dist/cjs/internal/Http.d.ts.map +1 -0
  186. package/dist/cjs/internal/Http.js +153 -0
  187. package/dist/cjs/internal/Http.js.map +7 -0
  188. package/dist/cjs/internal/HttpNetwork.d.ts +27 -0
  189. package/dist/cjs/internal/HttpNetwork.d.ts.map +1 -0
  190. package/dist/cjs/internal/HttpNetwork.js +146 -0
  191. package/dist/cjs/internal/HttpNetwork.js.map +7 -0
  192. package/dist/cjs/internal/Ignore.d.ts +37 -0
  193. package/dist/cjs/internal/Ignore.d.ts.map +1 -0
  194. package/dist/cjs/internal/Ignore.js +100 -0
  195. package/dist/cjs/internal/Ignore.js.map +7 -0
  196. package/dist/cjs/internal/LinearRegex.d.ts +19 -0
  197. package/dist/cjs/internal/LinearRegex.d.ts.map +1 -0
  198. package/dist/cjs/internal/LinearRegex.js +166 -0
  199. package/dist/cjs/internal/LinearRegex.js.map +7 -0
  200. package/dist/cjs/internal/Match.d.ts +85 -0
  201. package/dist/cjs/internal/Match.d.ts.map +1 -0
  202. package/dist/cjs/internal/Match.js +99 -0
  203. package/dist/cjs/internal/Match.js.map +7 -0
  204. package/dist/cjs/internal/Paths.d.ts +23 -0
  205. package/dist/cjs/internal/Paths.d.ts.map +1 -0
  206. package/dist/cjs/internal/Paths.js +52 -0
  207. package/dist/cjs/internal/Paths.js.map +7 -0
  208. package/dist/cjs/internal/Preserve.d.ts +25 -0
  209. package/dist/cjs/internal/Preserve.d.ts.map +1 -0
  210. package/dist/cjs/internal/Preserve.js +88 -0
  211. package/dist/cjs/internal/Preserve.js.map +7 -0
  212. package/dist/cjs/internal/Prune.d.ts +35 -0
  213. package/dist/cjs/internal/Prune.d.ts.map +1 -0
  214. package/dist/cjs/internal/Prune.js +54 -0
  215. package/dist/cjs/internal/Prune.js.map +7 -0
  216. package/dist/cjs/internal/SearchContract.d.ts +63 -0
  217. package/dist/cjs/internal/SearchContract.d.ts.map +1 -0
  218. package/dist/cjs/internal/SearchContract.js +46 -0
  219. package/dist/cjs/internal/SearchContract.js.map +7 -0
  220. package/dist/cjs/internal/Symbols.d.ts +39 -0
  221. package/dist/cjs/internal/Symbols.d.ts.map +1 -0
  222. package/dist/cjs/internal/Symbols.js +59 -0
  223. package/dist/cjs/internal/Symbols.js.map +7 -0
  224. package/dist/cjs/internal/TestReport.d.ts +52 -0
  225. package/dist/cjs/internal/TestReport.d.ts.map +1 -0
  226. package/dist/cjs/internal/TestReport.js +131 -0
  227. package/dist/cjs/internal/TestReport.js.map +7 -0
  228. package/dist/cjs/internal/Text.d.ts +114 -0
  229. package/dist/cjs/internal/Text.d.ts.map +1 -0
  230. package/dist/cjs/internal/Text.js +82 -0
  231. package/dist/cjs/internal/Text.js.map +7 -0
  232. package/dist/cjs/internal/Url.d.ts +13 -0
  233. package/dist/cjs/internal/Url.d.ts.map +1 -0
  234. package/dist/cjs/internal/Url.js +35 -0
  235. package/dist/cjs/internal/Url.js.map +7 -0
  236. package/dist/cjs/internal/Walk.d.ts +72 -0
  237. package/dist/cjs/internal/Walk.d.ts.map +1 -0
  238. package/dist/cjs/internal/Walk.js +108 -0
  239. package/dist/cjs/internal/Walk.js.map +7 -0
  240. package/dist/cjs/package.json +1 -0
  241. package/dist/esm/ApplyPatch.d.ts +174 -0
  242. package/dist/esm/ApplyPatch.d.ts.map +1 -0
  243. package/dist/esm/ApplyPatch.js +346 -0
  244. package/dist/esm/ApplyPatch.js.map +1 -0
  245. package/dist/esm/Bash.d.ts +380 -0
  246. package/dist/esm/Bash.d.ts.map +1 -0
  247. package/dist/esm/Bash.js +505 -0
  248. package/dist/esm/Bash.js.map +1 -0
  249. package/dist/esm/Checkpoints.d.ts +279 -0
  250. package/dist/esm/Checkpoints.d.ts.map +1 -0
  251. package/dist/esm/Checkpoints.js +298 -0
  252. package/dist/esm/Checkpoints.js.map +1 -0
  253. package/dist/esm/Container.d.ts +132 -0
  254. package/dist/esm/Container.d.ts.map +1 -0
  255. package/dist/esm/Container.js +151 -0
  256. package/dist/esm/Container.js.map +1 -0
  257. package/dist/esm/Edit.d.ts +203 -0
  258. package/dist/esm/Edit.d.ts.map +1 -0
  259. package/dist/esm/Edit.js +296 -0
  260. package/dist/esm/Edit.js.map +1 -0
  261. package/dist/esm/ExaWebSearch.d.ts +22 -0
  262. package/dist/esm/ExaWebSearch.d.ts.map +1 -0
  263. package/dist/esm/ExaWebSearch.js +107 -0
  264. package/dist/esm/ExaWebSearch.js.map +1 -0
  265. package/dist/esm/Explore.d.ts +328 -0
  266. package/dist/esm/Explore.d.ts.map +1 -0
  267. package/dist/esm/Explore.js +106 -0
  268. package/dist/esm/Explore.js.map +1 -0
  269. package/dist/esm/Fetch.d.ts +130 -0
  270. package/dist/esm/Fetch.d.ts.map +1 -0
  271. package/dist/esm/Fetch.js +91 -0
  272. package/dist/esm/Fetch.js.map +1 -0
  273. package/dist/esm/Glob.d.ts +204 -0
  274. package/dist/esm/Glob.d.ts.map +1 -0
  275. package/dist/esm/Glob.js +177 -0
  276. package/dist/esm/Glob.js.map +1 -0
  277. package/dist/esm/Grep.d.ts +347 -0
  278. package/dist/esm/Grep.d.ts.map +1 -0
  279. package/dist/esm/Grep.js +289 -0
  280. package/dist/esm/Grep.js.map +1 -0
  281. package/dist/esm/HttpPost.d.ts +130 -0
  282. package/dist/esm/HttpPost.d.ts.map +1 -0
  283. package/dist/esm/HttpPost.js +89 -0
  284. package/dist/esm/HttpPost.js.map +1 -0
  285. package/dist/esm/LanguageServer.d.ts +90 -0
  286. package/dist/esm/LanguageServer.d.ts.map +1 -0
  287. package/dist/esm/LanguageServer.js +57 -0
  288. package/dist/esm/LanguageServer.js.map +1 -0
  289. package/dist/esm/Ls.d.ts +164 -0
  290. package/dist/esm/Ls.d.ts.map +1 -0
  291. package/dist/esm/Ls.js +178 -0
  292. package/dist/esm/Ls.js.map +1 -0
  293. package/dist/esm/Lsp.d.ts +125 -0
  294. package/dist/esm/Lsp.d.ts.map +1 -0
  295. package/dist/esm/Lsp.js +165 -0
  296. package/dist/esm/Lsp.js.map +1 -0
  297. package/dist/esm/Manifest.d.ts +918 -0
  298. package/dist/esm/Manifest.d.ts.map +1 -0
  299. package/dist/esm/Manifest.js +153 -0
  300. package/dist/esm/Manifest.js.map +1 -0
  301. package/dist/esm/NativeSearch.d.ts +38 -0
  302. package/dist/esm/NativeSearch.d.ts.map +1 -0
  303. package/dist/esm/NativeSearch.js +378 -0
  304. package/dist/esm/NativeSearch.js.map +1 -0
  305. package/dist/esm/NodeLanguageServer.d.ts +128 -0
  306. package/dist/esm/NodeLanguageServer.d.ts.map +1 -0
  307. package/dist/esm/NodeLanguageServer.js +843 -0
  308. package/dist/esm/NodeLanguageServer.js.map +1 -0
  309. package/dist/esm/PortableSearch.d.ts +24 -0
  310. package/dist/esm/PortableSearch.d.ts.map +1 -0
  311. package/dist/esm/PortableSearch.js +240 -0
  312. package/dist/esm/PortableSearch.js.map +1 -0
  313. package/dist/esm/Probe.d.ts +193 -0
  314. package/dist/esm/Probe.d.ts.map +1 -0
  315. package/dist/esm/Probe.js +225 -0
  316. package/dist/esm/Probe.js.map +1 -0
  317. package/dist/esm/Read.d.ts +189 -0
  318. package/dist/esm/Read.d.ts.map +1 -0
  319. package/dist/esm/Read.js +300 -0
  320. package/dist/esm/Read.js.map +1 -0
  321. package/dist/esm/Relocate.d.ts +73 -0
  322. package/dist/esm/Relocate.d.ts.map +1 -0
  323. package/dist/esm/Relocate.js +153 -0
  324. package/dist/esm/Relocate.js.map +1 -0
  325. package/dist/esm/Search.d.ts +163 -0
  326. package/dist/esm/Search.d.ts.map +1 -0
  327. package/dist/esm/Search.js +47 -0
  328. package/dist/esm/Search.js.map +1 -0
  329. package/dist/esm/SearchConformance.d.ts +115 -0
  330. package/dist/esm/SearchConformance.d.ts.map +1 -0
  331. package/dist/esm/SearchConformance.js +193 -0
  332. package/dist/esm/SearchConformance.js.map +1 -0
  333. package/dist/esm/SearchContract.d.ts +114 -0
  334. package/dist/esm/SearchContract.d.ts.map +1 -0
  335. package/dist/esm/SearchContract.js +461 -0
  336. package/dist/esm/SearchContract.js.map +1 -0
  337. package/dist/esm/ShellCommand.d.ts +164 -0
  338. package/dist/esm/ShellCommand.d.ts.map +1 -0
  339. package/dist/esm/ShellCommand.js +159 -0
  340. package/dist/esm/ShellCommand.js.map +1 -0
  341. package/dist/esm/StdError.d.ts +55 -0
  342. package/dist/esm/StdError.d.ts.map +1 -0
  343. package/dist/esm/StdError.js +71 -0
  344. package/dist/esm/StdError.js.map +1 -0
  345. package/dist/esm/TestRun.d.ts +311 -0
  346. package/dist/esm/TestRun.d.ts.map +1 -0
  347. package/dist/esm/TestRun.js +316 -0
  348. package/dist/esm/TestRun.js.map +1 -0
  349. package/dist/esm/TestRunner.d.ts +102 -0
  350. package/dist/esm/TestRunner.d.ts.map +1 -0
  351. package/dist/esm/TestRunner.js +68 -0
  352. package/dist/esm/TestRunner.js.map +1 -0
  353. package/dist/esm/TreeFingerprint.d.ts +140 -0
  354. package/dist/esm/TreeFingerprint.d.ts.map +1 -0
  355. package/dist/esm/TreeFingerprint.js +170 -0
  356. package/dist/esm/TreeFingerprint.js.map +1 -0
  357. package/dist/esm/UpdatePlan.d.ts +152 -0
  358. package/dist/esm/UpdatePlan.d.ts.map +1 -0
  359. package/dist/esm/UpdatePlan.js +129 -0
  360. package/dist/esm/UpdatePlan.js.map +1 -0
  361. package/dist/esm/WebFetch.d.ts +134 -0
  362. package/dist/esm/WebFetch.d.ts.map +1 -0
  363. package/dist/esm/WebFetch.js +151 -0
  364. package/dist/esm/WebFetch.js.map +1 -0
  365. package/dist/esm/WebSearch.d.ts +181 -0
  366. package/dist/esm/WebSearch.d.ts.map +1 -0
  367. package/dist/esm/WebSearch.js +134 -0
  368. package/dist/esm/WebSearch.js.map +1 -0
  369. package/dist/esm/Write.d.ts +147 -0
  370. package/dist/esm/Write.d.ts.map +1 -0
  371. package/dist/esm/Write.js +144 -0
  372. package/dist/esm/Write.js.map +1 -0
  373. package/dist/esm/index.d.ts +127 -0
  374. package/dist/esm/index.d.ts.map +1 -0
  375. package/dist/esm/index.js +127 -0
  376. package/dist/esm/index.js.map +1 -0
  377. package/dist/esm/internal/ApplyPatch.d.ts +145 -0
  378. package/dist/esm/internal/ApplyPatch.d.ts.map +1 -0
  379. package/dist/esm/internal/ApplyPatch.js +489 -0
  380. package/dist/esm/internal/ApplyPatch.js.map +1 -0
  381. package/dist/esm/internal/CodexText.d.ts +73 -0
  382. package/dist/esm/internal/CodexText.d.ts.map +1 -0
  383. package/dist/esm/internal/CodexText.js +156 -0
  384. package/dist/esm/internal/CodexText.js.map +1 -0
  385. package/dist/esm/internal/Declaration.d.ts +49 -0
  386. package/dist/esm/internal/Declaration.d.ts.map +1 -0
  387. package/dist/esm/internal/Declaration.js +42 -0
  388. package/dist/esm/internal/Declaration.js.map +1 -0
  389. package/dist/esm/internal/Diagnostics.d.ts +77 -0
  390. package/dist/esm/internal/Diagnostics.d.ts.map +1 -0
  391. package/dist/esm/internal/Diagnostics.js +99 -0
  392. package/dist/esm/internal/Diagnostics.js.map +1 -0
  393. package/dist/esm/internal/EnvelopePrecheck.d.ts +67 -0
  394. package/dist/esm/internal/EnvelopePrecheck.d.ts.map +1 -0
  395. package/dist/esm/internal/EnvelopePrecheck.js +167 -0
  396. package/dist/esm/internal/EnvelopePrecheck.js.map +1 -0
  397. package/dist/esm/internal/Exec.d.ts +139 -0
  398. package/dist/esm/internal/Exec.d.ts.map +1 -0
  399. package/dist/esm/internal/Exec.js +193 -0
  400. package/dist/esm/internal/Exec.js.map +1 -0
  401. package/dist/esm/internal/FileMutation.d.ts +109 -0
  402. package/dist/esm/internal/FileMutation.d.ts.map +1 -0
  403. package/dist/esm/internal/FileMutation.js +123 -0
  404. package/dist/esm/internal/FileMutation.js.map +1 -0
  405. package/dist/esm/internal/FsFailure.d.ts +38 -0
  406. package/dist/esm/internal/FsFailure.d.ts.map +1 -0
  407. package/dist/esm/internal/FsFailure.js +39 -0
  408. package/dist/esm/internal/FsFailure.js.map +1 -0
  409. package/dist/esm/internal/GitWorktree.d.ts +108 -0
  410. package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
  411. package/dist/esm/internal/GitWorktree.js +352 -0
  412. package/dist/esm/internal/GitWorktree.js.map +1 -0
  413. package/dist/esm/internal/Grouping.d.ts +51 -0
  414. package/dist/esm/internal/Grouping.d.ts.map +1 -0
  415. package/dist/esm/internal/Grouping.js +99 -0
  416. package/dist/esm/internal/Grouping.js.map +1 -0
  417. package/dist/esm/internal/Html.d.ts +20 -0
  418. package/dist/esm/internal/Html.d.ts.map +1 -0
  419. package/dist/esm/internal/Html.js +70 -0
  420. package/dist/esm/internal/Html.js.map +1 -0
  421. package/dist/esm/internal/Http.d.ts +95 -0
  422. package/dist/esm/internal/Http.d.ts.map +1 -0
  423. package/dist/esm/internal/Http.js +154 -0
  424. package/dist/esm/internal/Http.js.map +1 -0
  425. package/dist/esm/internal/HttpNetwork.d.ts +27 -0
  426. package/dist/esm/internal/HttpNetwork.d.ts.map +1 -0
  427. package/dist/esm/internal/HttpNetwork.js +114 -0
  428. package/dist/esm/internal/HttpNetwork.js.map +1 -0
  429. package/dist/esm/internal/Ignore.d.ts +37 -0
  430. package/dist/esm/internal/Ignore.d.ts.map +1 -0
  431. package/dist/esm/internal/Ignore.js +128 -0
  432. package/dist/esm/internal/Ignore.js.map +1 -0
  433. package/dist/esm/internal/LinearRegex.d.ts +19 -0
  434. package/dist/esm/internal/LinearRegex.d.ts.map +1 -0
  435. package/dist/esm/internal/LinearRegex.js +176 -0
  436. package/dist/esm/internal/LinearRegex.js.map +1 -0
  437. package/dist/esm/internal/Match.d.ts +85 -0
  438. package/dist/esm/internal/Match.d.ts.map +1 -0
  439. package/dist/esm/internal/Match.js +142 -0
  440. package/dist/esm/internal/Match.js.map +1 -0
  441. package/dist/esm/internal/Paths.d.ts +23 -0
  442. package/dist/esm/internal/Paths.d.ts.map +1 -0
  443. package/dist/esm/internal/Paths.js +40 -0
  444. package/dist/esm/internal/Paths.js.map +1 -0
  445. package/dist/esm/internal/Preserve.d.ts +25 -0
  446. package/dist/esm/internal/Preserve.d.ts.map +1 -0
  447. package/dist/esm/internal/Preserve.js +70 -0
  448. package/dist/esm/internal/Preserve.js.map +1 -0
  449. package/dist/esm/internal/Prune.d.ts +35 -0
  450. package/dist/esm/internal/Prune.d.ts.map +1 -0
  451. package/dist/esm/internal/Prune.js +60 -0
  452. package/dist/esm/internal/Prune.js.map +1 -0
  453. package/dist/esm/internal/SearchContract.d.ts +63 -0
  454. package/dist/esm/internal/SearchContract.d.ts.map +1 -0
  455. package/dist/esm/internal/SearchContract.js +66 -0
  456. package/dist/esm/internal/SearchContract.js.map +1 -0
  457. package/dist/esm/internal/Symbols.d.ts +39 -0
  458. package/dist/esm/internal/Symbols.d.ts.map +1 -0
  459. package/dist/esm/internal/Symbols.js +79 -0
  460. package/dist/esm/internal/Symbols.js.map +1 -0
  461. package/dist/esm/internal/TestReport.d.ts +52 -0
  462. package/dist/esm/internal/TestReport.d.ts.map +1 -0
  463. package/dist/esm/internal/TestReport.js +172 -0
  464. package/dist/esm/internal/TestReport.js.map +1 -0
  465. package/dist/esm/internal/Text.d.ts +114 -0
  466. package/dist/esm/internal/Text.d.ts.map +1 -0
  467. package/dist/esm/internal/Text.js +130 -0
  468. package/dist/esm/internal/Text.js.map +1 -0
  469. package/dist/esm/internal/Url.d.ts +13 -0
  470. package/dist/esm/internal/Url.d.ts.map +1 -0
  471. package/dist/esm/internal/Url.js +27 -0
  472. package/dist/esm/internal/Url.js.map +1 -0
  473. package/dist/esm/internal/Walk.d.ts +72 -0
  474. package/dist/esm/internal/Walk.d.ts.map +1 -0
  475. package/dist/esm/internal/Walk.js +126 -0
  476. package/dist/esm/internal/Walk.js.map +1 -0
  477. package/docs/README.md +117 -0
  478. package/docs/api.md +472 -0
  479. package/docs/concepts/effects-and-capabilities.md +136 -0
  480. package/docs/concepts/flows-and-handlers.md +115 -0
  481. package/docs/concepts/limits-and-disclosure.md +102 -0
  482. package/docs/concepts/search-contract.md +182 -0
  483. package/docs/guides/bind-the-standard-flows.md +114 -0
  484. package/docs/guides/implement-a-search-peer.md +133 -0
  485. package/docs/guides/pin-a-checkpoint.md +141 -0
  486. package/docs/guides/query-a-language-server.md +257 -0
  487. package/docs/guides/reach-the-network.md +141 -0
  488. package/docs/guides/read-and-edit-a-file.md +240 -0
  489. package/docs/guides/run-a-shell-command.md +215 -0
  490. package/docs/guides/run-the-test-suite.md +154 -0
  491. package/docs/guides/search-a-workspace.md +148 -0
  492. package/docs/installation.md +111 -0
  493. package/docs/quickstart.md +125 -0
  494. package/docs/reference/flows.md +556 -0
  495. package/docs/troubleshooting.md +322 -0
  496. package/package.json +439 -3
  497. package/src/ApplyPatch.ts +458 -0
  498. package/src/Bash.ts +607 -0
  499. package/src/Checkpoints.ts +422 -0
  500. package/src/Container.ts +212 -0
  501. package/src/Edit.ts +366 -0
  502. package/src/ExaWebSearch.ts +145 -0
  503. package/src/Explore.ts +139 -0
  504. package/src/Fetch.ts +117 -0
  505. package/src/Glob.ts +200 -0
  506. package/src/Grep.ts +320 -0
  507. package/src/HttpPost.ts +120 -0
  508. package/src/LanguageServer.ts +110 -0
  509. package/src/Ls.ts +228 -0
  510. package/src/Lsp.ts +184 -0
  511. package/src/Manifest.ts +162 -0
  512. package/src/NativeSearch.ts +457 -0
  513. package/src/NodeLanguageServer.ts +1148 -0
  514. package/src/PortableSearch.ts +264 -0
  515. package/src/Probe.ts +284 -0
  516. package/src/Read.ts +359 -0
  517. package/src/Relocate.ts +166 -0
  518. package/src/Search.ts +185 -0
  519. package/src/SearchConformance.ts +288 -0
  520. package/src/SearchContract.ts +489 -0
  521. package/src/ShellCommand.ts +201 -0
  522. package/src/StdError.ts +80 -0
  523. package/src/TestRun.ts +401 -0
  524. package/src/TestRunner.ts +119 -0
  525. package/src/TreeFingerprint.ts +200 -0
  526. package/src/UpdatePlan.ts +171 -0
  527. package/src/WebFetch.ts +194 -0
  528. package/src/WebSearch.ts +165 -0
  529. package/src/Write.ts +195 -0
  530. package/src/index.ts +154 -0
  531. package/src/internal/ApplyPatch.ts +601 -0
  532. package/src/internal/CodexText.ts +182 -0
  533. package/src/internal/Declaration.ts +60 -0
  534. package/src/internal/Diagnostics.ts +134 -0
  535. package/src/internal/EnvelopePrecheck.ts +233 -0
  536. package/src/internal/Exec.ts +314 -0
  537. package/src/internal/FileMutation.ts +231 -0
  538. package/src/internal/FsFailure.ts +51 -0
  539. package/src/internal/GitWorktree.ts +491 -0
  540. package/src/internal/Grouping.ts +106 -0
  541. package/src/internal/Html.ts +87 -0
  542. package/src/internal/Http.ts +209 -0
  543. package/src/internal/HttpNetwork.ts +153 -0
  544. package/src/internal/Ignore.ts +135 -0
  545. package/src/internal/LinearRegex.ts +173 -0
  546. package/src/internal/Match.ts +172 -0
  547. package/src/internal/Paths.ts +42 -0
  548. package/src/internal/Preserve.ts +108 -0
  549. package/src/internal/Prune.ts +62 -0
  550. package/src/internal/SearchContract.ts +77 -0
  551. package/src/internal/Symbols.ts +88 -0
  552. package/src/internal/TestReport.ts +194 -0
  553. package/src/internal/Text.ts +170 -0
  554. package/src/internal/Url.ts +23 -0
  555. package/src/internal/Walk.ts +176 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var HttpNetwork_exports = {};
30
+ __export(HttpNetwork_exports, {
31
+ ResolveHost: () => ResolveHost,
32
+ guarded: () => guarded,
33
+ refusal: () => refusal
34
+ });
35
+ module.exports = __toCommonJS(HttpNetwork_exports);
36
+ var Capability = __toESM(require("@smthrs/capability/Capability"), 1);
37
+ var import_GrantStore = require("@smthrs/kernel/GrantStore");
38
+ var import_HttpClient = require("@smthrs/kernel/HttpClient");
39
+ var import_effect = require("effect");
40
+ var FetchHttpClient = __toESM(require("effect/unstable/http/FetchHttpClient"), 1);
41
+ var HttpClient = __toESM(require("effect/unstable/http/HttpClient"), 1);
42
+ var HttpClientError = __toESM(require("effect/unstable/http/HttpClientError"), 1);
43
+ var import_promises = require("node:dns/promises");
44
+ var import_node_net = require("node:net");
45
+ var StdError = __toESM(require("../StdError.js"), 1);
46
+ var import_Url = require("./Url.js");
47
+ const ResolveHost = import_effect.Context.Reference("@smthrs/std/HttpNetwork/ResolveHost", {
48
+ defaultValue: () => (hostname) => import_effect.Effect.tryPromise(async () => (await (0, import_promises.lookup)(hostname, { all: true })).map((a) => a.address))
49
+ });
50
+ const blocked = new import_node_net.BlockList();
51
+ for (const [address, prefix] of [
52
+ ["0.0.0.0", 8],
53
+ ["10.0.0.0", 8],
54
+ ["127.0.0.0", 8],
55
+ ["169.254.0.0", 16],
56
+ ["172.16.0.0", 12],
57
+ ["192.168.0.0", 16],
58
+ ["192.0.0.0", 24],
59
+ ["100.64.0.0", 10],
60
+ ["198.18.0.0", 15],
61
+ ["224.0.0.0", 4],
62
+ ["240.0.0.0", 4]
63
+ ]) blocked.addSubnet(address, prefix, "ipv4");
64
+ const publicV6 = new import_node_net.BlockList();
65
+ publicV6.addSubnet("2000::", 3, "ipv6");
66
+ publicV6.addSubnet("::ffff:0:0", 96, "ipv6");
67
+ blocked.addSubnet("2002::", 16, "ipv6");
68
+ blocked.addSubnet("2001::", 32, "ipv6");
69
+ const isPublic = (address) => {
70
+ const family = (0, import_node_net.isIP)(address);
71
+ if (family === 4) return !blocked.check(address, "ipv4");
72
+ return family === 6 && publicV6.check(address, "ipv6") && !blocked.check(address, "ipv6");
73
+ };
74
+ const failure = (code, message, path) => new StdError.StdError({ code, message, path });
75
+ const check = import_effect.Effect.fn("HttpNetwork.check")(function* (value, client) {
76
+ const url = (0, import_Url.parseHttpUrl)(value);
77
+ if (url === void 0) {
78
+ return yield* import_effect.Effect.fail(failure("invalid_input", "URL must use http or https without user information", value));
79
+ }
80
+ if (!(0, import_HttpClient.supportsDestinationPinning)(client)) {
81
+ return yield* import_effect.Effect.fail(failure("unsupported", "HTTP host must support destination pinning", value));
82
+ }
83
+ const hostname = url.hostname.replace(/^\[|\]$/g, "");
84
+ const local = hostname.replace(/\.$/, "").toLowerCase();
85
+ const literal = (0, import_node_net.isIP)(hostname) !== 0;
86
+ const localhost = local === "localhost" || local.endsWith(".localhost");
87
+ const resolve = yield* ResolveHost;
88
+ const privateGrant = import_effect.Effect.gen(function* () {
89
+ const store = yield* import_GrantStore.GrantStore;
90
+ const capability = yield* import_effect.Effect.try({
91
+ try: () => Capability.make("net:private", url.origin),
92
+ catch: () => failure("invalid_input", "Private HTTP origin exceeds the capability resource limit", value)
93
+ });
94
+ yield* store.check(capability).pipe(
95
+ import_effect.Effect.mapError(
96
+ () => failure("permission_denied", "Private HTTP destination requires a net:private grant", value)
97
+ )
98
+ );
99
+ });
100
+ if (localhost) yield* privateGrant;
101
+ const addresses = literal ? [hostname] : [
102
+ ...yield* resolve(hostname).pipe(
103
+ import_effect.Effect.mapError(() => failure("request_failed", "Could not resolve HTTP destination", value))
104
+ )
105
+ ];
106
+ if (addresses.length === 0 || addresses.some((address) => (0, import_node_net.isIP)(address) === 0)) {
107
+ return yield* import_effect.Effect.fail(failure("request_failed", "HTTP destination has no valid addresses", value));
108
+ }
109
+ if (!localhost && !addresses.every(isPublic)) yield* privateGrant;
110
+ return Object.freeze({ origin: url.origin, addresses: Object.freeze(addresses) });
111
+ });
112
+ const guarded = (client, follow = true) => {
113
+ const checked = HttpClient.transform(
114
+ client,
115
+ (execute, request) => (0, import_HttpClient.authorizePreflight)(
116
+ request,
117
+ check(request.url, client).pipe(
118
+ import_effect.Effect.mapError(
119
+ (cause) => new HttpClientError.HttpClientError({
120
+ reason: new HttpClientError.TransportError({ request, cause, description: cause.message })
121
+ })
122
+ ),
123
+ import_effect.Effect.flatMap(
124
+ (destination) => import_effect.Effect.updateContext(execute, (context) => import_effect.Context.add(import_effect.Context.add(context, import_HttpClient.Destination, destination), FetchHttpClient.RequestInit, {
125
+ ...import_effect.Context.getOrUndefined(context, FetchHttpClient.RequestInit),
126
+ redirect: "manual"
127
+ }))
128
+ )
129
+ )
130
+ )
131
+ );
132
+ return follow ? HttpClient.followRedirects(checked) : checked;
133
+ };
134
+ const refusal = (error) => {
135
+ if (!(error instanceof HttpClientError.HttpClientError) || error.reason._tag !== "TransportError") return void 0;
136
+ if (error.reason.cause instanceof StdError.StdError) return error.reason.cause;
137
+ if (import_effect.Option.isSome((0, import_HttpClient.fromHttpClientError)(error))) {
138
+ return failure(
139
+ "permission_denied",
140
+ error.reason.description ?? "HTTP permission was refused",
141
+ error.reason.request.url
142
+ );
143
+ }
144
+ return void 0;
145
+ };
146
+ //# sourceMappingURL=HttpNetwork.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/HttpNetwork.ts"],
4
+ "sourcesContent": ["/**\n * Destination policy shared by the web tools, including every redirect hop.\n *\n * @since 1.0.0\n */\n\nimport * as Capability from \"@smthrs/capability/Capability\"\nimport { GrantStore } from \"@smthrs/kernel/GrantStore\"\nimport {\n authorizePreflight,\n Destination,\n fromHttpClientError,\n supportsDestinationPinning\n} from \"@smthrs/kernel/HttpClient\"\nimport { Context, Effect, Option } from \"effect\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\nimport * as HttpClient from \"effect/unstable/http/HttpClient\"\nimport * as HttpClientError from \"effect/unstable/http/HttpClientError\"\nimport { lookup } from \"node:dns/promises\"\nimport { BlockList, isIP } from \"node:net\"\nimport * as StdError from \"../StdError.ts\"\nimport { parseHttpUrl } from \"./Url.ts\"\n\n/** Resolver seam: all addresses must be public before an unprivileged request.\n * @since 1.0.0\n * @private\n */\nexport const ResolveHost = Context.Reference<\n (hostname: string) => Effect.Effect<ReadonlyArray<string>, unknown>\n>(\"@smthrs/std/HttpNetwork/ResolveHost\", {\n defaultValue: () => (hostname) =>\n Effect.tryPromise(async () => (await lookup(hostname, { all: true })).map((a) => a.address))\n})\n\nconst blocked = new BlockList()\nfor (\n const [address, prefix] of [\n [\"0.0.0.0\", 8],\n [\"10.0.0.0\", 8],\n [\"127.0.0.0\", 8],\n [\"169.254.0.0\", 16],\n [\"172.16.0.0\", 12],\n [\"192.168.0.0\", 16],\n [\"192.0.0.0\", 24],\n [\"100.64.0.0\", 10],\n [\"198.18.0.0\", 15],\n [\"224.0.0.0\", 4],\n [\"240.0.0.0\", 4]\n ] as const\n) blocked.addSubnet(address, prefix, \"ipv4\")\n// Allow global IPv6 and mapped IPv4 only, excluding transition tunnels.\nconst publicV6 = new BlockList()\npublicV6.addSubnet(\"2000::\", 3, \"ipv6\")\npublicV6.addSubnet(\"::ffff:0:0\", 96, \"ipv6\")\nblocked.addSubnet(\"2002::\", 16, \"ipv6\")\nblocked.addSubnet(\"2001::\", 32, \"ipv6\")\n\nconst isPublic = (address: string): boolean => {\n const family = isIP(address)\n if (family === 4) return !blocked.check(address, \"ipv4\")\n return family === 6 && publicV6.check(address, \"ipv6\") && !blocked.check(address, \"ipv6\")\n}\n\nconst failure = (code: StdError.Code, message: string, path: string) => new StdError.StdError({ code, message, path })\n\nconst check = Effect.fn(\"HttpNetwork.check\")(function*(value: string, client: HttpClient.HttpClient) {\n const url = parseHttpUrl(value)\n if (url === undefined) {\n return yield* Effect.fail(failure(\"invalid_input\", \"URL must use http or https without user information\", value))\n }\n if (!supportsDestinationPinning(client)) {\n return yield* Effect.fail(failure(\"unsupported\", \"HTTP host must support destination pinning\", value))\n }\n const hostname = url.hostname.replace(/^\\[|\\]$/g, \"\")\n const local = hostname.replace(/\\.$/, \"\").toLowerCase()\n const literal = isIP(hostname) !== 0\n const localhost = local === \"localhost\" || local.endsWith(\".localhost\")\n const resolve = yield* ResolveHost\n // Refuse localhost before DNS unless the origin is explicitly authorized.\n const privateGrant = Effect.gen(function*() {\n const store = yield* GrantStore\n const capability = yield* Effect.try({\n try: () => Capability.make(\"net:private\", url.origin),\n catch: () => failure(\"invalid_input\", \"Private HTTP origin exceeds the capability resource limit\", value)\n })\n yield* store.check(capability).pipe(\n Effect.mapError(() =>\n failure(\"permission_denied\", \"Private HTTP destination requires a net:private grant\", value)\n )\n )\n })\n if (localhost) yield* privateGrant\n const addresses = literal ? [hostname] : [\n ...yield* resolve(hostname).pipe(\n Effect.mapError(() => failure(\"request_failed\", \"Could not resolve HTTP destination\", value))\n )\n ]\n if (addresses.length === 0 || addresses.some((address) => isIP(address) === 0)) {\n return yield* Effect.fail(failure(\"request_failed\", \"HTTP destination has no valid addresses\", value))\n }\n if (!localhost && !addresses.every(isPublic)) yield* privateGrant\n return Object.freeze({ origin: url.origin, addresses: Object.freeze(addresses) })\n})\n\n/** Decorates the supplied client before following redirects through the guard.\n * The transport must honor manual redirects, as required by the kernel client.\n * @since 1.0.0\n * @private\n */\nexport const guarded = (\n client: HttpClient.HttpClient,\n follow = true\n): HttpClient.HttpClient.With<HttpClientError.HttpClientError, GrantStore> => {\n const checked = HttpClient.transform(\n client,\n (execute, request) =>\n authorizePreflight(\n request,\n check(request.url, client).pipe(\n Effect.mapError((cause) =>\n new HttpClientError.HttpClientError({\n reason: new HttpClientError.TransportError({ request, cause, description: cause.message })\n })\n ),\n Effect.flatMap((destination) =>\n Effect.updateContext(execute, (context: Context.Context<never>) =>\n Context.add(Context.add(context, Destination, destination), FetchHttpClient.RequestInit, {\n ...Context.getOrUndefined(context, FetchHttpClient.RequestInit),\n redirect: \"manual\"\n }))\n )\n )\n )\n )\n return follow ? HttpClient.followRedirects(checked) : checked\n}\n\n/** Recovers the typed refusal carried through Effect's HTTP error channel.\n * @since 1.0.0\n * @private\n */\nexport const refusal = (error: unknown): StdError.StdError | undefined => {\n if (!(error instanceof HttpClientError.HttpClientError) || error.reason._tag !== \"TransportError\") return undefined\n if (error.reason.cause instanceof StdError.StdError) return error.reason.cause\n if (Option.isSome(fromHttpClientError(error))) {\n return failure(\n \"permission_denied\",\n error.reason.description ?? \"HTTP permission was refused\",\n error.reason.request.url\n )\n }\n return undefined\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Root-scoped gitignore rules, compiled once per visited directory.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ interface Rule {
7
+ readonly expression: RegExp;
8
+ readonly directoryOnly: boolean;
9
+ readonly negated: boolean;
10
+ readonly byPath: boolean;
11
+ }
12
+ /**
13
+ * Rules belonging to one visited directory.
14
+ *
15
+ * @private
16
+ * @since 1.0.0
17
+ */
18
+ export interface Scope {
19
+ readonly directory: string;
20
+ readonly rules: ReadonlyArray<Rule>;
21
+ }
22
+ /**
23
+ * Parses gitignore lines without widening the caller-glob grammar.
24
+ *
25
+ * @private
26
+ * @since 1.0.0
27
+ */
28
+ export declare const parse: (directory: string, content: string) => Scope;
29
+ /**
30
+ * Tests an entry before descent; deeper scopes and later rules take priority.
31
+ *
32
+ * @private
33
+ * @since 1.0.0
34
+ */
35
+ export declare const ignored: (scopes: ReadonlyArray<Scope>, candidate: string, basename: string, directory: boolean, relative: (from: string, to: string) => string) => boolean;
36
+ export {};
37
+ //# sourceMappingURL=Ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ignore.d.ts","sourceRoot":"","sources":["../../../src/internal/Ignore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,IAAI;IACZ,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACpC;AAyDD;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,KAqB1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAClB,QAAQ,aAAa,CAAC,KAAK,CAAC,EAC5B,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,WAAW,OAAO,EAClB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,KAC7C,OAYF,CAAA"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Ignore_exports = {};
20
+ __export(Ignore_exports, {
21
+ ignored: () => ignored,
22
+ parse: () => parse
23
+ });
24
+ module.exports = __toCommonJS(Ignore_exports);
25
+ var import_SearchContract = require("./SearchContract.js");
26
+ const bytes = (value) => /[^\x20-\x7e]/.test(value) ? Array.from(new TextEncoder().encode(value), (byte) => String.fromCharCode(byte)).join("") : value;
27
+ const expression = (pattern) => {
28
+ let source = "";
29
+ const groups = [];
30
+ for (let index = 0; index < pattern.length; index++) {
31
+ const character = pattern[index];
32
+ if (character === "\\") {
33
+ if (++index === pattern.length) throw new Error("dangling escape");
34
+ source += (0, import_SearchContract.escapeRegex)(pattern[index]);
35
+ } else if (character === "[") {
36
+ let end = index + 1;
37
+ const negated = pattern[end] === "!" || pattern[end] === "^";
38
+ if (negated) end++;
39
+ if (pattern[end] === "]") end++;
40
+ end = pattern.indexOf("]", end);
41
+ if (end < 0) source += "\\[";
42
+ else {
43
+ const content = pattern.slice(index + (negated ? 2 : 1), end);
44
+ source += `[${negated ? "^" : ""}${content.replace(/[\\[\]^]/g, "\\$&")}]`;
45
+ index = end;
46
+ }
47
+ } else if (character === "{") {
48
+ groups.push({ prefix: source, alternatives: [] });
49
+ source = "";
50
+ } else if (character === "," && groups.length > 0) {
51
+ groups[groups.length - 1].alternatives.push(source);
52
+ source = "";
53
+ } else if (character === "}") {
54
+ const group = groups.pop();
55
+ if (group === void 0) throw new Error("unopened alternatives");
56
+ const alternatives = [...group.alternatives, source].filter((part) => part.length > 0);
57
+ source = group.prefix + (alternatives.length > 0 ? `(?:${alternatives.join("|")})` : "");
58
+ } else if (character === "*" && pattern[index + 1] === "*" && (index === 0 || "/{,".includes(pattern[index - 1])) && (pattern[index + 2] === void 0 || "/},".includes(pattern[index + 2]))) {
59
+ source += pattern[index + 2] === "/" ? "(?:.*/)?" : ".*";
60
+ index += pattern[index + 2] === "/" ? 2 : 1;
61
+ } else if (character === "*") source += "[^/]*";
62
+ else if (character === "?") source += "[^/]";
63
+ else source += (0, import_SearchContract.escapeRegex)(character);
64
+ }
65
+ if (groups.length > 0) throw new Error("unclosed alternatives");
66
+ return new RegExp(`^(?:${source})$`);
67
+ };
68
+ const parse = (directory, content) => {
69
+ const rules = [];
70
+ for (let line of content.replace(/^\uFEFF/, "").split(/\r?\n/)) {
71
+ if (line.startsWith("#")) continue;
72
+ if (!line.endsWith("\\ ")) line = line.trimEnd();
73
+ if (line.length === 0) continue;
74
+ const negated = line.startsWith("!");
75
+ if (negated) line = line.slice(1);
76
+ const rooted = line.startsWith("/");
77
+ if (rooted) line = line.slice(1);
78
+ const directoryOnly = line.endsWith("/");
79
+ if (directoryOnly) line = line.slice(0, -1).replace(/\\$/, "");
80
+ const byPath = rooted || line.includes("/");
81
+ try {
82
+ rules.push({ expression: expression(bytes(line)), negated, directoryOnly, byPath });
83
+ } catch {
84
+ }
85
+ }
86
+ return { directory, rules };
87
+ };
88
+ const ignored = (scopes, candidate, basename, directory, relative) => {
89
+ for (let scopeIndex = scopes.length - 1; scopeIndex >= 0; scopeIndex--) {
90
+ const scope = scopes[scopeIndex];
91
+ const scoped = bytes(relative(scope.directory, candidate));
92
+ for (let index = scope.rules.length - 1; index >= 0; index--) {
93
+ const rule = scope.rules[index];
94
+ if (rule.directoryOnly && !directory) continue;
95
+ if (rule.expression.test(rule.byPath ? scoped : bytes(basename))) return !rule.negated;
96
+ }
97
+ }
98
+ return false;
99
+ };
100
+ //# sourceMappingURL=Ignore.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Ignore.ts"],
4
+ "sourcesContent": ["/**\n * Root-scoped gitignore rules, compiled once per visited directory.\n *\n * @since 1.0.0\n */\n\nimport { escapeRegex } from \"./SearchContract.ts\"\n\ninterface Rule {\n readonly expression: RegExp\n readonly directoryOnly: boolean\n readonly negated: boolean\n readonly byPath: boolean\n}\n\n/**\n * Rules belonging to one visited directory.\n *\n * @private\n * @since 1.0.0\n */\nexport interface Scope {\n readonly directory: string\n readonly rules: ReadonlyArray<Rule>\n}\n\n// Like the search glob contract, rg's globset matches UTF-8 bytes, not code points.\nconst bytes = (value: string): string =>\n /[^\\x20-\\x7e]/.test(value)\n ? Array.from(new TextEncoder().encode(value), (byte) => String.fromCharCode(byte)).join(\"\")\n : value\n\n// The caller-glob subset cannot parse ignore files: escapes and classes are\n// intentionally refused there. Keep their richer grammar here, including rg's\n// brace alternatives. Invalid lines are skipped without discarding valid rules.\nconst expression = (pattern: string): RegExp => {\n let source = \"\"\n const groups: Array<{ prefix: string; alternatives: Array<string> }> = []\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]!\n if (character === \"\\\\\") {\n if (++index === pattern.length) throw new Error(\"dangling escape\")\n source += escapeRegex(pattern[index]!)\n } else if (character === \"[\") {\n let end = index + 1\n const negated = pattern[end] === \"!\" || pattern[end] === \"^\"\n if (negated) end++\n if (pattern[end] === \"]\") end++\n end = pattern.indexOf(\"]\", end)\n if (end < 0) source += \"\\\\[\"\n else {\n const content = pattern.slice(index + (negated ? 2 : 1), end)\n source += `[${negated ? \"^\" : \"\"}${content.replace(/[\\\\[\\]^]/g, \"\\\\$&\")}]`\n index = end\n }\n } else if (character === \"{\") {\n groups.push({ prefix: source, alternatives: [] })\n source = \"\"\n } else if (character === \",\" && groups.length > 0) {\n groups[groups.length - 1]!.alternatives.push(source)\n source = \"\"\n } else if (character === \"}\") {\n const group = groups.pop()\n if (group === undefined) throw new Error(\"unopened alternatives\")\n const alternatives = [...group.alternatives, source].filter((part) => part.length > 0)\n source = group.prefix + (alternatives.length > 0 ? `(?:${alternatives.join(\"|\")})` : \"\")\n } else if (\n character === \"*\" && pattern[index + 1] === \"*\" &&\n (index === 0 || \"/{,\".includes(pattern[index - 1]!)) &&\n (pattern[index + 2] === undefined || \"/},\".includes(pattern[index + 2]!))\n ) {\n source += pattern[index + 2] === \"/\" ? \"(?:.*/)?\" : \".*\"\n index += pattern[index + 2] === \"/\" ? 2 : 1\n } else if (character === \"*\") source += \"[^/]*\"\n else if (character === \"?\") source += \"[^/]\"\n else source += escapeRegex(character)\n }\n if (groups.length > 0) throw new Error(\"unclosed alternatives\")\n return new RegExp(`^(?:${source})$`)\n}\n\n/**\n * Parses gitignore lines without widening the caller-glob grammar.\n *\n * @private\n * @since 1.0.0\n */\nexport const parse = (directory: string, content: string): Scope => {\n const rules: Array<Rule> = []\n for (let line of content.replace(/^\\uFEFF/, \"\").split(/\\r?\\n/)) {\n if (line.startsWith(\"#\")) continue\n // Match rg's gitignore parser: an escaped final space preserves whitespace.\n if (!line.endsWith(\"\\\\ \")) line = line.trimEnd()\n if (line.length === 0) continue\n const negated = line.startsWith(\"!\")\n if (negated) line = line.slice(1)\n const rooted = line.startsWith(\"/\")\n if (rooted) line = line.slice(1)\n const directoryOnly = line.endsWith(\"/\")\n if (directoryOnly) line = line.slice(0, -1).replace(/\\\\$/, \"\")\n const byPath = rooted || line.includes(\"/\")\n try {\n rules.push({ expression: expression(bytes(line)), negated, directoryOnly, byPath })\n } catch {\n // rg --no-messages also tolerates malformed rules and unreadable files.\n }\n }\n return { directory, rules }\n}\n\n/**\n * Tests an entry before descent; deeper scopes and later rules take priority.\n *\n * @private\n * @since 1.0.0\n */\nexport const ignored = (\n scopes: ReadonlyArray<Scope>,\n candidate: string,\n basename: string,\n directory: boolean,\n relative: (from: string, to: string) => string\n): boolean => {\n // The nearest ignore file wins; within a file, the last matching line wins.\n for (let scopeIndex = scopes.length - 1; scopeIndex >= 0; scopeIndex--) {\n const scope = scopes[scopeIndex]!\n const scoped = bytes(relative(scope.directory, candidate))\n for (let index = scope.rules.length - 1; index >= 0; index--) {\n const rule = scope.rules[index]!\n if (rule.directoryOnly && !directory) continue\n if (rule.expression.test(rule.byPath ? scoped : bytes(basename))) return !rule.negated\n }\n }\n return false\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Thompson matching for the validated ASCII search grammar. Each state is
3
+ * visited once per input position; alternatives never backtrack over input.
4
+ *
5
+ * @since 1.0.0
6
+ */
7
+ /**
8
+ * Compiles an already syntax-validated pattern. Compilation is bounded to
9
+ * 8192 states and 128 nested groups, including expanded counted repetitions.
10
+ * The iterator yields every 4096 state visits so the host can dispatch timers
11
+ * and interruption even for long lines and expensive linear matches.
12
+ *
13
+ * @private
14
+ * @since 1.0.0
15
+ */
16
+ export declare const compile: (pattern: string, insensitive: boolean) => {
17
+ readonly test: (line: string) => Generator<void, boolean>;
18
+ };
19
+ //# sourceMappingURL=LinearRegex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinearRegex.d.ts","sourceRoot":"","sources":["../../../src/internal/LinearRegex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAClB,SAAS,MAAM,EACf,aAAa,OAAO,KACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;CA8I7D,CAAA"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var LinearRegex_exports = {};
20
+ __export(LinearRegex_exports, {
21
+ compile: () => compile
22
+ });
23
+ module.exports = __toCommonJS(LinearRegex_exports);
24
+ const compile = (pattern, insensitive) => {
25
+ let offset = 0;
26
+ const parse = (depth) => {
27
+ if (depth > 128) throw new Error("patterns must not exceed 128 nested groups");
28
+ const alternatives = [];
29
+ let sequence = [];
30
+ while (offset < pattern.length && pattern[offset] !== ")") {
31
+ const start2 = offset;
32
+ const character = pattern[offset++];
33
+ if (character === "|") {
34
+ alternatives.push({ kind: "sequence", terms: sequence });
35
+ sequence = [];
36
+ continue;
37
+ }
38
+ let term;
39
+ if (character === "(") {
40
+ term = parse(depth + 1);
41
+ offset++;
42
+ } else {
43
+ if (character === "\\") offset++;
44
+ if (character === "[") {
45
+ while (pattern[offset] !== "]") {
46
+ if (pattern[offset++] === "\\") offset++;
47
+ }
48
+ offset++;
49
+ }
50
+ term = { kind: "atom", source: pattern.slice(start2, offset) };
51
+ }
52
+ const quantifier = pattern[offset];
53
+ if (quantifier === "*" || quantifier === "+" || quantifier === "?" || quantifier === "{") {
54
+ offset++;
55
+ let min = quantifier === "+" ? 1 : 0;
56
+ let max = quantifier === "?" ? 1 : Infinity;
57
+ if (quantifier === "{") {
58
+ const end = pattern.indexOf("}", offset);
59
+ const counts = pattern.slice(offset, end).split(",");
60
+ min = Number(counts[0]);
61
+ max = counts.length === 1 ? min : counts[1] === "" ? Infinity : Number(counts[1]);
62
+ offset = end + 1;
63
+ }
64
+ if (pattern[offset] === "?") offset++;
65
+ term = { kind: "repeat", term, min, max };
66
+ }
67
+ sequence.push(term);
68
+ }
69
+ alternatives.push({ kind: "sequence", terms: sequence });
70
+ return { kind: "alternative", terms: alternatives };
71
+ };
72
+ const tree = parse(0);
73
+ const states = [{ kind: "accept" }];
74
+ const append = (state) => {
75
+ if (states.length >= 8192) throw new Error("patterns must not exceed 8192 compiled states");
76
+ states.push(state);
77
+ return states.length - 1;
78
+ };
79
+ const build = (term, next) => {
80
+ switch (term.kind) {
81
+ case "atom":
82
+ if (term.source === "^") return append({ kind: "start", next });
83
+ if (term.source === "$") return append({ kind: "end", next });
84
+ return append({
85
+ kind: "atom",
86
+ expression: new RegExp(term.source === "." ? "[^\\n]" : term.source, insensitive ? "iu" : "u"),
87
+ next
88
+ });
89
+ case "sequence": {
90
+ let head = next;
91
+ for (let index = term.terms.length - 1; index >= 0; index--) head = build(term.terms[index], head);
92
+ return head;
93
+ }
94
+ case "alternative":
95
+ return append({ kind: "split", next: term.terms.map((child) => build(child, next)) });
96
+ case "repeat": {
97
+ let head = next;
98
+ if (term.max === Infinity) {
99
+ const loop = append({ kind: "split", next: [] });
100
+ states[loop] = { kind: "split", next: [next, build(term.term, loop)] };
101
+ head = loop;
102
+ } else {
103
+ for (let index = term.min; index < term.max; index++) {
104
+ head = append({ kind: "split", next: [head, build(term.term, head)] });
105
+ }
106
+ }
107
+ for (let index = 0; index < term.min; index++) head = build(term.term, head);
108
+ return head;
109
+ }
110
+ }
111
+ };
112
+ const start = build(tree, 0);
113
+ return {
114
+ *test(line) {
115
+ let current = [];
116
+ let position = 0;
117
+ let work = 0;
118
+ const seen = new Int32Array(states.length);
119
+ let generation = 0;
120
+ while (true) {
121
+ generation++;
122
+ const pending = [...current, start];
123
+ const consuming = [];
124
+ while (pending.length > 0) {
125
+ if (++work === 4096) {
126
+ work = 0;
127
+ yield;
128
+ }
129
+ const id = pending.pop();
130
+ if (seen[id] === generation) continue;
131
+ seen[id] = generation;
132
+ const state = states[id];
133
+ switch (state.kind) {
134
+ case "accept":
135
+ return true;
136
+ case "atom":
137
+ consuming.push(id);
138
+ break;
139
+ case "split":
140
+ for (const next of state.next) pending.push(next);
141
+ break;
142
+ case "start":
143
+ if (position === 0) pending.push(state.next);
144
+ break;
145
+ case "end":
146
+ if (position === line.length) pending.push(state.next);
147
+ break;
148
+ }
149
+ }
150
+ if (position === line.length) return false;
151
+ const character = String.fromCodePoint(line.codePointAt(position));
152
+ position += character.length;
153
+ current = [];
154
+ for (const id of consuming) {
155
+ if (++work === 4096) {
156
+ work = 0;
157
+ yield;
158
+ }
159
+ const state = states[id];
160
+ if (state.kind === "atom" && state.expression.test(character)) current.push(state.next);
161
+ }
162
+ }
163
+ }
164
+ };
165
+ };
166
+ //# sourceMappingURL=LinearRegex.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/LinearRegex.ts"],
4
+ "sourcesContent": ["/**\n * Thompson matching for the validated ASCII search grammar. Each state is\n * visited once per input position; alternatives never backtrack over input.\n *\n * @since 1.0.0\n */\n\ntype Term =\n | { readonly kind: \"atom\"; readonly source: string }\n | { readonly kind: \"sequence\" | \"alternative\"; readonly terms: ReadonlyArray<Term> }\n | { readonly kind: \"repeat\"; readonly term: Term; readonly min: number; readonly max: number }\n\ntype State =\n | { readonly kind: \"atom\"; readonly expression: RegExp; readonly next: number }\n | { readonly kind: \"start\" | \"end\"; readonly next: number }\n | { readonly kind: \"split\"; readonly next: ReadonlyArray<number> }\n | { readonly kind: \"accept\" }\n\n/**\n * Compiles an already syntax-validated pattern. Compilation is bounded to\n * 8192 states and 128 nested groups, including expanded counted repetitions.\n * The iterator yields every 4096 state visits so the host can dispatch timers\n * and interruption even for long lines and expensive linear matches.\n *\n * @private\n * @since 1.0.0\n */\nexport const compile = (\n pattern: string,\n insensitive: boolean\n): { readonly test: (line: string) => Generator<void, boolean> } => {\n let offset = 0\n const parse = (depth: number): Term => {\n if (depth > 128) throw new Error(\"patterns must not exceed 128 nested groups\")\n const alternatives: Array<Term> = []\n let sequence: Array<Term> = []\n while (offset < pattern.length && pattern[offset] !== \")\") {\n const start = offset\n const character = pattern[offset++]!\n if (character === \"|\") {\n alternatives.push({ kind: \"sequence\", terms: sequence })\n sequence = []\n continue\n }\n let term: Term\n if (character === \"(\") {\n term = parse(depth + 1)\n offset++\n } else {\n if (character === \"\\\\\") offset++\n if (character === \"[\") {\n while (pattern[offset] !== \"]\") {\n if (pattern[offset++] === \"\\\\\") offset++\n }\n offset++\n }\n term = { kind: \"atom\", source: pattern.slice(start, offset) }\n }\n const quantifier = pattern[offset]\n if (quantifier === \"*\" || quantifier === \"+\" || quantifier === \"?\" || quantifier === \"{\") {\n offset++\n let min = quantifier === \"+\" ? 1 : 0\n let max = quantifier === \"?\" ? 1 : Infinity\n if (quantifier === \"{\") {\n const end = pattern.indexOf(\"}\", offset)\n const counts = pattern.slice(offset, end).split(\",\")\n min = Number(counts[0])\n max = counts.length === 1 ? min : counts[1] === \"\" ? Infinity : Number(counts[1])\n offset = end + 1\n }\n // Greediness affects captures, not whether a line contains a match.\n if (pattern[offset] === \"?\") offset++\n term = { kind: \"repeat\", term, min, max }\n }\n sequence.push(term)\n }\n alternatives.push({ kind: \"sequence\", terms: sequence })\n return { kind: \"alternative\", terms: alternatives }\n }\n const tree = parse(0)\n const states: Array<State> = [{ kind: \"accept\" }]\n const append = (state: State): number => {\n if (states.length >= 8192) throw new Error(\"patterns must not exceed 8192 compiled states\")\n states.push(state)\n return states.length - 1\n }\n const build = (term: Term, next: number): number => {\n switch (term.kind) {\n case \"atom\":\n if (term.source === \"^\") return append({ kind: \"start\", next })\n if (term.source === \"$\") return append({ kind: \"end\", next })\n return append({\n kind: \"atom\",\n expression: new RegExp(term.source === \".\" ? \"[^\\\\n]\" : term.source, insensitive ? \"iu\" : \"u\"),\n next\n })\n case \"sequence\": {\n let head = next\n for (let index = term.terms.length - 1; index >= 0; index--) head = build(term.terms[index]!, head)\n return head\n }\n case \"alternative\":\n return append({ kind: \"split\", next: term.terms.map((child) => build(child, next)) })\n case \"repeat\": {\n let head = next\n if (term.max === Infinity) {\n const loop = append({ kind: \"split\", next: [] })\n states[loop] = { kind: \"split\", next: [next, build(term.term, loop)] }\n head = loop\n } else {\n for (let index = term.min; index < term.max; index++) {\n head = append({ kind: \"split\", next: [head, build(term.term, head)] })\n }\n }\n for (let index = 0; index < term.min; index++) head = build(term.term, head)\n return head\n }\n }\n }\n const start = build(tree, 0)\n return {\n *test(line) {\n let current: Array<number> = []\n let position = 0\n let work = 0\n const seen = new Int32Array(states.length)\n let generation = 0\n while (true) {\n generation++\n const pending = [...current, start]\n const consuming: Array<number> = []\n while (pending.length > 0) {\n if (++work === 4096) {\n work = 0\n yield\n }\n const id = pending.pop()!\n if (seen[id] === generation) continue\n seen[id] = generation\n const state = states[id]!\n switch (state.kind) {\n case \"accept\":\n return true\n case \"atom\":\n consuming.push(id)\n break\n case \"split\":\n for (const next of state.next) pending.push(next)\n break\n case \"start\":\n if (position === 0) pending.push(state.next)\n break\n case \"end\":\n if (position === line.length) pending.push(state.next)\n break\n }\n }\n if (position === line.length) return false\n const character = String.fromCodePoint(line.codePointAt(position)!)\n position += character.length\n current = []\n for (const id of consuming) {\n if (++work === 4096) {\n work = 0\n yield\n }\n const state = states[id]!\n if (state.kind === \"atom\" && state.expression.test(character)) current.push(state.next)\n }\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["start"]
7
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Exact block location, and the pre-image reported when it misses.
3
+ *
4
+ * The editing flows locate a caller's block byte-exactly and refuse everything
5
+ * else. The tolerant cascade this module used to apply — trailing-whitespace
6
+ * insensitive, then inner-whitespace collapsed — is gone from the *apply* path,
7
+ * because a match that is not the caller's bytes is an edit the caller never
8
+ * inspected: on django-11490 a sixteen-space anchor matched inside a
9
+ * twenty-space line and silently dedented a guard, and on sympy-15380 a
10
+ * "successful" fuzzy apply corrupted the file it reported editing. Prior art is
11
+ * `reference/opencode`'s replacer cascade (`tool/edit.ts`), and this is where we
12
+ * deviate from it deliberately.
13
+ *
14
+ * The cascade survives as *diagnosis*. A miss is only expensive when it is
15
+ * silent: the agent re-reads, re-guesses, and re-misses. {@link nearest} runs
16
+ * the same loose strategies to find where the caller's block actually sits and
17
+ * returns that region's real bytes and line range, so the failing cell can
18
+ * re-anchor from reality inside the same frame rather than buying another one.
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ /**
23
+ * One located block: the exact source span the needle matched.
24
+ *
25
+ * @category models
26
+ * @since 1.0.0
27
+ */
28
+ export interface Located {
29
+ readonly start: number;
30
+ readonly end: number;
31
+ readonly startLine: number;
32
+ readonly endLine: number;
33
+ }
34
+ /**
35
+ * The real file region nearest a needle that did not match.
36
+ *
37
+ * `text` is raw file bytes, never line-number prefixed, so a caller can quote it
38
+ * back as an anchor without editing it first.
39
+ *
40
+ * @category models
41
+ * @since 1.0.0
42
+ */
43
+ export interface Nearest {
44
+ readonly startLine: number;
45
+ readonly endLine: number;
46
+ readonly text: string;
47
+ }
48
+ /**
49
+ * The 1-based line a byte offset falls on.
50
+ *
51
+ * @category matching
52
+ * @since 1.0.0
53
+ */
54
+ export declare const lineAt: (content: string, offset: number) => number;
55
+ /**
56
+ * Every byte-exact occurrence of `needle` in `content`.
57
+ *
58
+ * @category matching
59
+ * @since 1.0.0
60
+ */
61
+ export declare const locate: (content: string, needle: string) => ReadonlyArray<Located>;
62
+ /**
63
+ * The real region a failed needle was aiming at, with its line range.
64
+ *
65
+ * The loose strategies run in order — trailing whitespace, then collapsed inner
66
+ * whitespace, then the needle's first non-blank line alone — and the first that
67
+ * locates a region wins. `undefined` means not even one line of the needle
68
+ * occurs in the file, which is itself the answer: this is the wrong file.
69
+ *
70
+ * @category matching
71
+ * @since 1.0.0
72
+ */
73
+ export declare const nearest: (content: string, needle: string, pad?: number) => Nearest | undefined;
74
+ /**
75
+ * The applied region rendered back for inspection: raw bytes, plus its range.
76
+ *
77
+ * A bad edit is only expensive when it is invisible. sphinx-7233 lost its
78
+ * verdict to an in-cell string surgery that captured an `else` branch, and the
79
+ * model never saw the hunk it had written.
80
+ *
81
+ * @category matching
82
+ * @since 1.0.0
83
+ */
84
+ export declare const hunk: (content: string, start: number, end: number, pad?: number) => Nearest;
85
+ //# sourceMappingURL=Match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Match.d.ts","sourceRoot":"","sources":["../../../src/internal/Match.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,MAMxD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,aAAa,CAAC,OAAO,CAyB7E,CAAA;AA0BD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,EAAE,YAAO,KAAG,OAAO,GAAG,SAkB5E,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,YAAO,KAAG,OAO3E,CAAA"}